Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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
Mongodb 范围分片或散列分片_Mongodb_Neo4j_Cassandra - Fatal编程技术网

Mongodb 范围分片或散列分片

Mongodb 范围分片或散列分片,mongodb,neo4j,cassandra,Mongodb,Neo4j,Cassandra,我有一个交友网站,用户可以在其中相互交流 数据如下: ID Sender Receiver Msg TIME 1 22 33 Hi 2017-04-01 2 22 33 how r u 2017-04-02 3 33 22 i am gd 2017-04-03 4 22 44 Hey 2017-04-03 所需查询的类型: 列表发送者=22个接收者 列表接收者=33

我有一个交友网站,用户可以在其中相互交流

数据如下:

ID Sender Receiver Msg      TIME
1   22     33      Hi       2017-04-01 
2   22     33      how r u  2017-04-02
3   33     22      i am gd  2017-04-03 
4   22     44      Hey      2017-04-03 
所需查询的类型:

  • 列表发送者=22个接收者
  • 列表接收者=33个发送者
  • 最新发送方=22,接收方=33消息
  • 存档旧记录说超过3年
  • 我应该如何在这里配置MongoDB分片

    问题:

  • 如果我使用范围切分:

    • 所有最新的记录都将移动到一个碎片,因此它将被大量使用
    • 还需要扫描所有碎片以列出上述任何信息
    • 有助于存档
  • 如果我使用散列切分:

    • 记录分发将是均匀的
    • 还需要扫描所有碎片以列出上述任何信息
    • 不利于存档

  • 分片的效率在很大程度上取决于设置和数据量。所以,如果你真的想要一个答案,你需要用有代表性的数据进行测试。不过,我可以回答一些关于这个想法的问题,如果它能有所帮助的话

    切分的想法是让多台机器处理一个查询。由于数据集较小,对碎片的查询将更快完成,但如果时间增益小于合并结果所需的时间(例如,如果需要排序或有限的结果),则将确定这对您的情况是否有利

    我不会担心“不利于实现”的事情,因为在交通流量较低的时候,你可能每周/每月只运行一次。这样它就不会干扰日常工作


    您还应该测试是否需要此归档。如果使用正确的查询和限制结果,这些旧消息甚至可能不会对性能产生任何影响。

    这只是一个想法:因为对于这样的应用程序,数据的关系可能与数据本身一样重要,您还可以查看neo4j。我从未使用过它,因为我没有任何项目可以从中受益。但这将是一个很好的例子,它可能会很好地工作。我需要所有的要求,问题是什么是切分的最佳方式,即使mongodb适合这种需要?我想告诉你的是,没有“最佳”方式。这取决于数据。你知道这些选项,去测试一下吧!至于mongodb是否合适。最后,它是一个文档数据库,而不是关系数据库或图形数据库。如果您有一个没有太多数据嵌套的非常静态的模式,那么postgreSQL可能更适合。但是,如果(正如我在另一篇评论中所说的)数据的关系与数据本身一样重要,那么看看neo4jI就不同意您的观点,即切分是让多台机器处理一个查询。如果碎片的数量很低,这可能是真的。但是,例如,当您得到10台服务器时,在每台服务器中执行相同的查询是非常昂贵的。切分是指能够同时执行多个查询。如果您在一个分片中有来自一个用户的所有信息,在另一个分片中有来自另一个用户的所有信息,那么查询这两个信息很容易,而且都是简单的查询。您是对的,这是使用分片的另一种方式。但是,由于OP是关于多个用户之间的交互,因此0可以保证所有这些用户都在同一个切分上,并且您的查询仍将在多个切分上运行。