Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 - Fatal编程技术网

MongoDb数据库与集合

MongoDb数据库与集合,mongodb,Mongodb,我正在设计一个使用MongoDb(64位版本)的系统来处理大量用户(大约100000个),每个用户将拥有大量数据(大约100万条记录) 设计的最佳策略是什么 在单个集合中转储所有记录 为每个用户创建一个集合 每个用户都有一个数据库 非常感谢,关于每个用户的收藏: 默认配置下,MongoDB限制为12k个集合。您可以使用--nssize增加此文件的大小,但它不是无限的。 你必须把索引计算到这12k中。(查看mongo文档中的“名称空间”概念) 关于每个用户的数据库: 从模型的角度来看,这很奇怪。

我正在设计一个使用MongoDb(64位版本)的系统来处理大量用户(大约100000个),每个用户将拥有大量数据(大约100万条记录)

设计的最佳策略是什么

  • 在单个集合中转储所有记录

  • 为每个用户创建一个集合

  • 每个用户都有一个数据库

  • 非常感谢,

    关于每个用户的收藏:

    默认配置下,MongoDB限制为12k个集合。您可以使用--nssize增加此文件的大小,但它不是无限的。 你必须把索引计算到这12k中。(查看mongo文档中的“名称空间”概念)

    关于每个用户的数据库:

    从模型的角度来看,这很奇怪。 对于技术方面,mongo没有限制,但您可能对文件描述符有限制(操作系统/设置的限制)

    所以正如@Rohit所说,最后两个是不好的。 也许你应该多解释一下你的案子。 也许你可以将用户分成不同的集合(例如:每个名字的第一个字母都有一个集合,或者公司的每个服务都有一个集合…)。 当然,使用切分


    编辑:也许MongoDb不是适合您的用例的最佳数据库。

    所以您看到的是1000亿条记录(100万条记录*100000个用户)

    处理大量数据的首选方法是创建一个分片集群,将数据分割到多个服务器上,这些服务器通过mongo客户端作为单个逻辑单元显示

    因此,您的问题的答案是将所有记录放在一个分片集合中

    所需碎片的数量和集群的配置与数据的大小和其他因素(如读写的数量和分布)有关。这些问题的答案可能非常特定于您的特殊情况,因此我不会试图猜测它们


    我可能会首先决定您有多少时间和机器可以在这么多机器组成的集群上设置和测试系统。根据其性能,您可以决定集群中是否需要更多或更少的碎片

    因此,您要为10万用户寻找总计100000000条详细记录

    许多人似乎不理解的是MongoDB擅长于水平扩展。水平扩展通常被归类为跨大型集群中的多台(多台)服务器扩展大型单一数据集合

    因此,如果您对公共数据使用单个集合(即一个名为
    user
    的集合和一个名为
    detail
    )的集合),那么您已经符合MongoDB的核心目的和构建

    正如其他人提到的,MongoDB不太擅长在许多集合之间进行垂直伸缩。它一开始就有一个nssize限制,尽管实际上由于索引大小估计了12K个初始集合,但您的数据库中只有5K个集合

    因此,按用户收集是完全不可行的。它将违背其核心原则使用MongoDB

    每个用户拥有一个数据库与每个用户拥有一个单一的集合涉及相同的问题,可能更多

    我从未遇到过有人不能在优化的设置下将MongoDB扩展到数十亿甚至接近1000亿(或更高),但是,我不明白为什么它不能;毕竟,Facebook能够将MySQL扩展到每个用户1000亿(超过32K+个碎片),这两个数据库之间的碎片概念是相似的

    因此,这样做的理论和可能性是存在的。这一切都是关于选择正确的模式和切分概念和关键(以及服务器和网络等)


    如果您遇到问题,您可以将归档集合拆分,或将项目从主集合中删除,但我认为这是过分的,您需要确保MongoDB知道在主集合上的任何给定时间点,您的大型数据集的每个片段在何处,并确保这些数据始终是热的,这样,不执行全局和分散操作的查询应该会非常快。

    从数据库体系结构的角度来看,我建议使用单个集合,但我不确定当您有数千亿条记录时,它们是否仍能很好地扩展。虽然分片体系结构在这种情况下肯定是相关的,你的帖子没有提到OP的问题,OP是关于使用一个集合、多个集合还是多个数据库。啊,是的,选项2和3对我来说太反直觉了,以至于我忘了明确指出你应该把它放在一个集合中,然后shard@chrisbunney你的2便士是多少“每个用户的数据库或集合”仅用于安全和简化访问控制管理?