如何处理大型mongodb集合

Posted

技术标签:

【中文标题】如何处理大型mongodb集合【英文标题】:How to handle large mongodb collection 【发布时间】:2014-12-24 05:01:50 【问题描述】:

我们有一个可能会非常大的集合。这个集合用于存储比尔相关数据。所以这通常用于报告/分析目的。

请告诉我处理这个大型收藏的最佳方法

1) 我可以拆分和存档旧数据(比如 12 个月期间)吗?但是这里需要旧数据来获取分析报告。我想查询这些旧数据以显示过去 2 年的销售比较。

2)我可以用旧数据(12 个月)创建新集合吗?所以每 12 个月我必须创建新集合。为了生成报告,我必须访问所有这些文档以进行查询。那么这会导致性能问题吗?

3) 我可以进行分片吗?

【问题讨论】:

【参考方案1】:

需要考虑许多变量,最清楚的是您使用的硬件、数据的结构以及查询方式。分布式网络应该能够比单台机器更快地处理您的数据,但在深入研究该解决方案之前,我建议生成与您预期相当的大量模拟数据,然后测试各种方法。严重地。创建一堆数据,并尝试破坏事物。很有趣!很快,您就会比任何网站都更了解您的问题需要什么。

至于直接回应:

    也许,在归档数据之前,可以生成(或更新)适当的统计信息摘要。这些摘要/简化可用于销售比较,而无需重新加载它们所代表的所有存档数据。

    这让我觉得很明智。通过拆分销售数据,您可以更好地控制需要访问的数据量。毕竟,用户并不总是希望看到 3 年的数据,他们可能只希望看到上周的数据。

    当你真正需要它时移动到分片。正如 MongoDB 网站所述:

    将非分片数据库转换为分片集群既简单又无缝,因此在数据集较小的情况下配置分片几乎没有优势。

当您的内存映射接近服务器的 RAM 限制时,您就会知道是时候了。 MongoDB 支持对太大而无法保存在内存中的数据库进行读写,但我相信你已经知道这是 SLOW

【讨论】:

感谢您的宝贵反馈。正如您在第 1 点中所说的“可以生成适当的统计数据摘要”,您能否详细说明这一点。如果我需要旧数据与新年数据进行比较,我该如何做总结?可以概括一下吗? 这取决于您的数据以及您希望进行什么样的比较。例如,任何超过 12 个月的数据都可以简化为每周的总和。或者,您的用户查找的常见统计数据可能是每日销售总额。无需将每条销售记录的总数相加,而是可以预先计算每天的总数并随时掌握。 谢谢。我可以在哪里存储预计算摘要?在不同的集合中?能否请您指教一下.. 正确。在存档原始数据时,可以在新集合中访问摘要。 明确地说,我的编号列表旨在与您的编号列表相对应。所以我在2. 中提出的观点是为了回应你的2)

以上是关于如何处理大型mongodb集合的主要内容,如果未能解决你的问题,请参考以下文章

使用mongodb在utc中存储日期时如何处理时区问题?

如何处理MongoDB中的多对多关系?

如何处理 MongoDB 主分片空间不足?

如何处理 MongoDB / Morphia 中的查询迁移?

mongodb 连接如何处理 NodeJS express 服务器中的并发请求?

我们如何处理 MongoDB 连接、模式?