我需要存储数十亿个小型数据结构(每个大约 200 字节)。到目前为止,将每个元素存储为单独的文档效果很好,Mongo 每秒可提供大约 10,000 个结果。我使用 20 字节散列作为每个文档的 _id,并在 _id 字段上使用单个索引。在测试中,这适用于包含 5,000,000 个文档的数据集。
在操作中,我们将每秒发出大约 10,000 个请求,每秒更新大约 1,000 次现有文档,每秒可能插入 100 次或更少的新文档。
当我们无法在 RAM 中存储整个索引时,我们如何管理更大的数据集?如果我们将多个元素组合到每个文档中,MongoDB 的性能是否会更好——以便更快地搜索索引,但在每个查询中返回更多数据?
与其他关于 SO 的问题不同,我不仅对我们可以将多少数据填充到 Mongo 中感兴趣。它可以清楚地管理我们正在查看的数据量。find
我担心的是,在有限的 RAM的情况下,我们如何才能最大限度地提高大型集合的操作速度。
我们的搜索将趋于聚集;大约 50,000 个元素将满足大约 50% 的查询,但其余 50% 将随机分布在所有数据中。我们是否可以通过将这 50% 的数据移动到他们自己的集合中来获得性能提升,以便将最常用数据的较小索引始终保留在 ram 中?
将 _id 字段的大小从 20 字节减少到 8 字节会对 MnogoDB 的索引速度产生重大影响吗?