【问题标题】:NoSQL data splitNoSQL 数据拆分
【发布时间】:2016-01-09 15:36:42
【问题描述】:

我是 NoSQL 系统的新手。我想使用 Java+Spring+MongoDB(不重要)。 我尝试为我的数据建立正确的方案。我会有太多的日志记录(每年大约 3 000 000 000 条)。记录结构如下所示:

{
    shop: 'shop1',
    product: 'product1',
    count: '10',
    incost: '100',
    outcost: '120',
    operation: 'sell',
    date: '2015-12-12'
}

我有大约 1000 家商店和大约 30000 种产品。

我应该有按 [shops]+product 按天或月划分的计数总和或 (sum*(outcost-incost)) 总和的报告。

*[shops] 表示可选过滤器。在这种情况下(没有商店),性能并不重要。

*可能需要超过 1 年的报告,但性能无关紧要。

我可以使用带有日期、商店、产品索引的单一集合“日志”吗?或者我应该明确地将这个系列按商店和年份拆分为子系列?

对不起,如果我的问题很愚蠢,我只是初学者......

问候, 米纳斯

【问题讨论】:

    标签: java mongodb nosql


    【解决方案1】:

    除非并且直到文档进一步增长,否则这可以正常工作。如果您想向现有文档添加更多字段或附加现有字段,并且您认为它可能会增长到超过 16 MB,那么最好有单独的集合。

    索引键似乎也很好,因为您在商店、日期和产品字段上有复合索引。

    如果从单个集合中检索完整数据而不是从多个集合中获取,您将获得一些性能提升(简单且快速,因为只发生单个磁盘查找)。

    【讨论】:

      【解决方案2】:

      我不会对主集合进行太多聚合,30 亿条记录已经很多了。

      我能想到的一个大问题是,任何查询都可能很大,返回大量文档。现在,确实可以通过使用分片来分散数据本身的权重来减轻查询此集合的大多数负面因素,但是,返回到mongos 的数据量可能会很慢而且很痛苦。

      有时候,再多的索引也救不了你,因为你的收藏实在是太大了。

      如果您只是显示集合,这无关紧要,MongoDB 可以很容易地做到这一点,聚合不会很好地工作。

      我会按照你的建议做:根据数据片段和时间桶预先聚合到其他集合中。

      【讨论】:

        猜你喜欢
        • 2015-07-16
        • 2015-08-16
        • 1970-01-01
        • 2014-01-13
        • 2019-06-10
        • 2013-02-05
        • 2020-02-23
        • 2016-08-30
        • 1970-01-01
        相关资源
        最近更新 更多