【发布时间】:2013-04-03 19:58:50
【问题描述】:
我在副本集配置中有一个 mongo(版本 2)在生产中(下一步是添加分片)。
我需要实现以下内容:
- 每天我会收到一个包含数百万行的文件,我会将其加载到 mongo 中。
- 我有一个运行时应用程序,它总是从这个集合中读取 - 非常大量的读取,它们的性能非常重要。 集合被索引,所有读取都执行 readByIndex 操作。
我目前的加载实现是:
- 删除收藏
- 创建集合
- 插入集合新文档
我看到的一件事是,由于 mongoDB 锁定,我的总体性能在加载过程中变得最差。 我已经检查了多达 1000 万个条目的集合。 对于更大的尺寸,我认为我应该开始使用分片
喜欢这样的问题的最佳方式是什么? 或者我应该使用其他解决方案策略吗?
【问题讨论】:
-
对于您的用例来说,对这个集合的所有读取都是“一致的”重要吗(因为他们将看到前一天的任何 5M 记录的记录,或者当天的记录)?或者是否可以接受一些读取来自昨天的转储,而另一些来自今天的转储?
-
不,如果在加载期间某些数据将“无法访问”,那也没关系(因为我在操作开始时删除了所有值)。但这当然如果负载需要一些合理的时间,比如最多 1-2 小时。否则我可能应该有两个集合和一个从中读取的元数据(每次都像它们之间的交换)
-
第 N 天和第 N+1 天的数据文件之间,是否曾经删除过记录?还是它们只是添加(或更新)?也就是说,有没有在第 N 天出现而在第 N+1 天没有出现的记录?
标签: java performance mongodb