Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
组合mysql mongodb_Mysql_Mongodb - Fatal编程技术网

组合mysql mongodb

组合mysql mongodb,mysql,mongodb,Mysql,Mongodb,我正在构建一个需要可扩展的web应用程序。简言之: 我们有用户,用户有朋友,所以他们有一个朋友列表。用户可以创建消息,来自朋友的消息显示在主页上,每条消息都链接到一个位置,并且这些消息可以按日期进行筛选,例如,我希望显示来自昨天发布的朋友的所有消息,或者显示来自位置X的所有消息 我现在完全在MongoDb中构建应用程序,但是我遇到了麻烦。例如: 在主页上,我们得到了用户朋友的消息列表,没有问题,我们使用: $db->messages->find(数组('users.\u id'=>array

我正在构建一个需要可扩展的web应用程序。简言之:

我们有用户,用户有朋友,所以他们有一个朋友列表。用户可以创建消息,来自朋友的消息显示在主页上,每条消息都链接到一个位置,并且这些消息可以按日期进行筛选,例如,我希望显示来自昨天发布的朋友的所有消息,或者显示来自位置X的所有消息

我现在完全在MongoDb中构建应用程序,但是我遇到了麻烦。例如:

  • 在主页上,我们得到了用户朋友的消息列表,没有问题,我们使用:
$db->messages->find(数组('users.\u id'=>array('in'=>$userFriendlistGoesher))

然后我们得到了我们的消息,但是在那之后,每条消息都有一个位置,所以我必须在所有消息中循环,从另一个集合中获取位置,而且多个用户可以绑定到一条消息,所以我们还必须从另一个集合中获取所有用户数据,在MySql中只是一个连接查询,在MongoDb 2循环中,这是我的第一个问题:这是个问题吗?这是否需要大量的资源,循环

所以我的想法是与MySql和MongoDb分开,我使用MongoDb存储所有位置(因为它超过350.000个位置,并且使用lat-long计算),MySql存储消息、用户和用户朋友,所以第二个问题,你能帮我做决定吗,我应该继续使用MongoDb和循环吗?还是使用组合

谢谢你的阅读和时间

。。在MySql中,只是一个连接查询,在MongoDb 2循环中,这是我的第一个问题:这是一个问题吗

这与MangGDB的过程是一致的,事实上,这是一个核心的MangoDB权衡。

MongoDB基于连接不可伸缩的原则。所以它没有连接,让你“自己滚”。一些库,如Morphia(用于Java)提供了用于加载引用的内置逻辑

PHP有一个功能,这应该有助于实现这一点

这是否需要大量的资源,循环

有点?这将真正取决于执行情况

很明显,这将涉及到数据库的一系列来回操作,但是它可能比SQL版本的网络流量要少。所有返回的数据都需要内存空间。但是,这与SQL并没有太大区别

真的,这取决于你对如何实现这一点以及谁在内存中保留什么进行权衡

我应该继续在循环中使用MongoDb吗

当您的数据不是固有的关系数据时,MongoDB是一个好主意

在您提供的示例中,您的数据似乎是关系型的。对于关系数据,MySQL和其他关系数据库(如Postgres)是比MongoDB更好的数据存储。这将更详细地介绍这个主题

总之,我建议如下:

  • 请花一些时间分析您的数据是否具有内在的关系
  • 如果不是,那么MongoDB可以给您带来比使用MySQL更大的好处
  • 如果是关系型的,那么MySQL是更好的解决方案
  • 当然,使用这两种方法都是可能的,但它会为您带来额外的工作和复杂性。从长远来看,这值得付出努力吗?只有你知道答案

  • 祝你的网络应用好运

    在SQL中,进行一次查询,并流式处理N个结果。使用此设置,您可以进行一次查询,得到一个包含N个结果的blob,然后再进行N个RPC以查找额外的数据。这几乎可以肯定是延迟/流量的损失,而不是在SQL中本地执行,因为额外的往返次数太多了。也就是说,这些查找中的每一个都应该相对便宜,而且在您以任何方式流式返回数据的情况下(即显示前N,然后在滚动时执行AJAX请求以获取下一个N,等等),这可能会抵消它。如果我加入4个表,服务器必须为循环执行4次索引查找+数据查找+一系列内存中的
    。如果您在Mongo中执行此操作,您仍然会对
    循环执行4个索引查找+数据查找+
    。由于重复(连接中固有的),SQL响应通常需要更多的数据。Mongo将需要更多的查询。这个难题中最慢的部分是驱动器,但它们看起来几乎相同,因此这就变成了4个小查询与1个大查询,或者延迟与吞吐量的问题。老实说,我不确定哪一个会更好,延迟还是吞吐量。