【问题标题】:Is it better to have one collection with a billion or one thousand with one million objects?拥有十亿个收藏品的收藏品,还是拥有一百万件收藏品的一千个收藏品更好?
【发布时间】:2017-07-06 09:11:17
【问题描述】:

一个 NoSQL 数据库 (MongoDB) 包含单个集合 - logs - 具有 10 亿个条目或一千个集合(logs_source0logs_source1)之间的性能差异有多大?如果数据跨多个服务器分片,这种情况会改变吗?对象包含 6 到 10 个键,有时包含 3-5 个对象的数组。应用程序的设计可以使用其中任何一种,因为_sourceX 可以很容易地变成额外的密钥,反之亦然。

【问题讨论】:

    标签: mongodb nosql


    【解决方案1】:

    只要所有数据都在一台服务器上,拥有一个大集合或许多小集合应该不会有太大的不同。与任何性能问题一样,彻底的答案必须考虑到您对该数据的预期用途。您是否经常访问所有这些数据?或者您是否有一个相对较小的工作数据集经常被访问,而其余的却很少被查看?

    在有选择地将部分数据分页到内存中时,拥有许多小型集合可能会更好。当然,单个大集合也可以有选择地分页到内存中,但至少索引必须尽可能完全在内存中,以确保快速访问数据。对于许多较小的集合,这会更容易,因为每个集合都有自己的小索引。

    但是,MongoDB 的分片旨在解决这个问题(维护大量数据),它通过将所有内容保存在一个逻辑集合中来实现这一点,但会自动将该集合分布到您喜欢的多个分片上。这比自己创建这些单独的集合要灵活得多。除其他外,它允许随着时间的推移重新平衡数据,以确保每个分片具有相同部分的数据。适应不同数量的分片也更灵活,而您的多收集方案似乎依赖于相当固定的数据分区(根据来源#)。

    使用分片,应用程序将完全不知道分布模式,您可以透明地添加或删除任意数量的分片,以处理大量数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      相关资源
      最近更新 更多