组合mysql mongodb
我正在构建一个需要可扩展的web应用程序。简言之: 我们有用户,用户有朋友,所以他们有一个朋友列表。用户可以创建消息,来自朋友的消息显示在主页上,每条消息都链接到一个位置,并且这些消息可以按日期进行筛选,例如,我希望显示来自昨天发布的朋友的所有消息,或者显示来自位置X的所有消息 我现在完全在MongoDb中构建应用程序,但是我遇到了麻烦。例如:组合mysql mongodb,mysql,mongodb,Mysql,Mongodb,我正在构建一个需要可扩展的web应用程序。简言之: 我们有用户,用户有朋友,所以他们有一个朋友列表。用户可以创建消息,来自朋友的消息显示在主页上,每条消息都链接到一个位置,并且这些消息可以按日期进行筛选,例如,我希望显示来自昨天发布的朋友的所有消息,或者显示来自位置X的所有消息 我现在完全在MongoDb中构建应用程序,但是我遇到了麻烦。例如: 在主页上,我们得到了用户朋友的消息列表,没有问题,我们使用: $db->messages->find(数组('users.\u id'=>array
- 在主页上,我们得到了用户朋友的消息列表,没有问题,我们使用:
这与MangGDB的过程是一致的,事实上,这是一个核心的MangoDB权衡。
MongoDB基于连接不可伸缩的原则。所以它没有连接,让你“自己滚”。一些库,如Morphia(用于Java)提供了用于加载引用的内置逻辑 PHP有一个功能,这应该有助于实现这一点 这是否需要大量的资源,循环 有点?这将真正取决于执行情况 很明显,这将涉及到数据库的一系列来回操作,但是它可能比SQL版本的网络流量要少。所有返回的数据都需要内存空间。但是,这与SQL并没有太大区别 真的,这取决于你对如何实现这一点以及谁在内存中保留什么进行权衡 我应该继续在循环中使用MongoDb吗 当您的数据不是固有的关系数据时,MongoDB是一个好主意 在您提供的示例中,您的数据似乎是关系型的。对于关系数据,MySQL和其他关系数据库(如Postgres)是比MongoDB更好的数据存储。这将更详细地介绍这个主题 总之,我建议如下:祝你的网络应用好运 在SQL中,进行一次查询,并流式处理N个结果。使用此设置,您可以进行一次查询,得到一个包含N个结果的blob,然后再进行N个RPC以查找额外的数据。这几乎可以肯定是延迟/流量的损失,而不是在SQL中本地执行,因为额外的往返次数太多了。也就是说,这些查找中的每一个都应该相对便宜,而且在您以任何方式流式返回数据的情况下(即显示前N,然后在滚动时执行AJAX请求以获取下一个N,等等),这可能会抵消它。如果我加入4个表,服务器必须为循环执行4次索引查找+数据查找+一系列内存中的
。如果您在Mongo中执行此操作,您仍然会对
循环执行4个索引查找+数据查找+。由于重复(连接中固有的),SQL响应通常需要更多的数据。Mongo将需要更多的查询。这个难题中最慢的部分是驱动器,但它们看起来几乎相同,因此这就变成了4个小查询与1个大查询,或者延迟与吞吐量的问题。老实说,我不确定哪一个会更好,延迟还是吞吐量。