【发布时间】:2011-12-19 20:48:31
【问题描述】:
我有一个 Mongo 集合,其中每个文档都有一组唯一的嵌入键:
{
Facebook :
{
Archived:'False' //non unique
'fan_count_December_19_2011':12345, //unique
'unique_views_count_December_19_2011':12345, //unique
'post_count_December_19_2011':12345, //unique
...
...
}
}
我们使用以下查询查找这些文档:
db.metrics.find({
{'Facebook.fan_count_December_19_2011' : {'$ne':null}},'Archived':'False'}
}
).limit(1)
问题是,有 6,000 个这样的文档,速度有点慢。查看 Explain() 日志;每个查询平均需要 0.06 秒来执行,并且每次都进行一次完整的集合扫描。 我们的服务必须执行上述查询大约 100 次(针对 100 个不同的键);在 0.06 p/s 时,每次调用最多加起来 6 秒(不包括提供数据的站点的开销)。 批量发送所有键并执行一次大型查询将需要对数据层进行重大重写;由于截止日期紧迫,我试图避免这种情况。 我一直在查看文档,似乎没有办法拥有基于键的索引。该文档说您可以对嵌入式键进行索引;但这似乎只是索引值。这对我也没有多大好处。因为系统中的每个键都是唯一的;每个新键都必须有一个索引。
没有重新设计我们的文档结构(这需要进行重大更改);无论如何我可以做些什么来加快这个查询对现有集合的当前格式?
非常感谢任何建设性的意见。
谢谢, 弗兰克
【问题讨论】:
-
为什么特定日期的粉丝数是唯一的?不能有两个收藏品在给定日期拥有相同数量的粉丝吗?还是您希望 键 是唯一的,而不是值?
-
键必须是唯一的,因为它们是我们用来查找特定日期的指标的。我们正在使用来自一个网站的数据,该网站绘制了给定月份 facebook 粉丝增长图表,我们需要每天的历史记录来做到这一点。
-
你说的key是指字段名还是字段值?我不确定我现在是否理解这一点......