2012-04-18 125 views
2

我有一个mongo(版本2)在replicaset配置生产(下一步是添加分片)。mongo db插入大集合

我需要实现以下几点:

  • 每天一次,我会收到一个文件与数百万行,我将其加载到蒙戈。
  • 我有一个运行时应用程序,总是从这个集合读取 - 非常大量的读取,并且它们的性能非常重要。 集合已编入索引,所有读取都执行readByIndex操作。

我当前实现装载的是:

  1. 液滴收集
  2. 创建集合
  3. 插入到收集新文档

一个我看到的是,由于mongoDB锁定我的总性能在加载过程中变得最差。 我已经检查了多达1000万个条目的集合。 对于那么大的尺寸,我认为我应该开始使用分片

爱这种问题的最佳方法是什么? 或者我应该使用另一种解决方案策略?

+0

是对你的使用情况,所有读取针对此集合是“一致的”很重要(因为他们看到的要么是前一天的记录任何5M记录,或当前记录)?或者是否可以接受一些读数来自昨天的转储,还有一些来自今天的转储? – dcrosta 2012-04-18 15:04:45

+0

不,如果在加载期间某些数据将是“不可访问的”(因为我在操作开始时将所有值都删除),那甚至可以。但是,这当然如果负载需要一些合理的时间,比如说1-2小时。否则,我应该可能有两个集合和一个元数据(每个元数据可以从中读取) – Julias 2012-04-19 06:22:07

+0

第N天和第N + 1天的数据文件之间是否有记录被删除?或者他们只是添加(或更新)?也就是说,第N天出现的记录是否在第N + 1天没有出现? – dcrosta 2012-04-19 20:32:35

回答

1

你可以使用两个集合:)

  • collectionA包含这一天的数据
  • 新数据到达
  • 创建一个新的集合(collectionB)并插入数据
  • 现在使用collectionB为您数据

然后,第二天,重复上面的只是交换A和B :)

这会让collectionA仍然服务请求,而collectionB正在更新。

PS只注意到我很担心晚了一年在回答这个问题:)