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
所需查询的类型:
- 所有最新的记录都将移动到一个碎片,因此它将被大量使用
- 还需要扫描所有碎片以列出上述任何信息
- 有助于存档
- 记录分发将是均匀的
- 还需要扫描所有碎片以列出上述任何信息
- 不利于存档
分片的效率在很大程度上取决于设置和数据量。所以,如果你真的想要一个答案,你需要用有代表性的数据进行测试。不过,我可以回答一些关于这个想法的问题,如果它能有所帮助的话 切分的想法是让多台机器处理一个查询。由于数据集较小,对碎片的查询将更快完成,但如果时间增益小于合并结果所需的时间(例如,如果需要排序或有限的结果),则将确定这对您的情况是否有利 我不会担心“不利于实现”的事情,因为在交通流量较低的时候,你可能每周/每月只运行一次。这样它就不会干扰日常工作
您还应该测试是否需要此归档。如果使用正确的查询和限制结果,这些旧消息甚至可能不会对性能产生任何影响。这只是一个想法:因为对于这样的应用程序,数据的关系可能与数据本身一样重要,您还可以查看neo4j。我从未使用过它,因为我没有任何项目可以从中受益。但这将是一个很好的例子,它可能会很好地工作。我需要所有的要求,问题是什么是切分的最佳方式,即使mongodb适合这种需要?我想告诉你的是,没有“最佳”方式。这取决于数据。你知道这些选项,去测试一下吧!至于mongodb是否合适。最后,它是一个文档数据库,而不是关系数据库或图形数据库。如果您有一个没有太多数据嵌套的非常静态的模式,那么postgreSQL可能更适合。但是,如果(正如我在另一篇评论中所说的)数据的关系与数据本身一样重要,那么看看neo4jI就不同意您的观点,即切分是让多台机器处理一个查询。如果碎片的数量很低,这可能是真的。但是,例如,当您得到10台服务器时,在每台服务器中执行相同的查询是非常昂贵的。切分是指能够同时执行多个查询。如果您在一个分片中有来自一个用户的所有信息,在另一个分片中有来自另一个用户的所有信息,那么查询这两个信息很容易,而且都是简单的查询。您是对的,这是使用分片的另一种方式。但是,由于OP是关于多个用户之间的交互,因此0可以保证所有这些用户都在同一个切分上,并且您的查询仍将在多个切分上运行。