0

我有一个非常大的文档集合(数亿个文档)

每份文件都是如此

  • YYYY/MM/DD 格式的日期
  • 姓名
  • 类型1
  • 类型2
  • 价值

有~50个不同的名字,~60个不同的type1,~20个不同的type2

我需要从这个数据库中读取,通常是:

  1. 一组唯一的 (name,type1,type2),但包含所有日期
  2. 所有类型的几个日期1
  3. 项目清单

目前我正在阅读没有任何索引,而且速度很慢!比拥有几个扁平的 sql 表要慢得多......

如何使用索引来加速这个数据库?

谢谢

4

1 回答 1

1

YYYY/MM/DD 格式的日期

有 MongoDB 日期时间格式。用它。它使用的内存比字符串少,并且不需要额外的约定。从某种意义上说,您的格式是合理的,它的字典顺序等同于 0001-01-01 和 9999-12-31 之间日期的时间顺序,但是对于范围查询,内置数据类型绝对是更可取的。

有~50个不同的名字,~60个不同的type1,~20个不同的type2

您的键的选择性非常低,因此单个索引可能毫无意义

我需要从这个数据库中读取,通常是:

  • 一组独特的(name,type1,type2),但包含所有日期

使用复合索引{name, type1, type2}。如果您还需要按时间顺序排序,您可能需要添加date排序或使用像 ObjectId 这样的单调主键并依赖自然排序。

db.collection.ensureIndex({'name' : 1, 'type1' : 1, 'type2' : 1, 'date' : 1});
  • 几个约会type1

什么是“几个日期”?我假设您的意思是“给定日期范围内的所有日期”?为date. date自然应该有更好的选择性,所以单独的键是有意义的。

db.collection.ensureIndex({'date' : 1});
  • 项目清单

列出所有项目?有订购吗?你需要更具体的东西。请记住skip/take是昂贵的。

于 2013-10-23T10:04:52.083 回答