【发布时间】:2011-11-12 17:11:50
【问题描述】:
我有一个 CouchDB 数据库,其中包含代表 100,000 个事件的文档。除其他事项外,每个事件都有其发生的时间(存储为 [Year,month,day,hour,minute,second] 的数组)和分数。我想制作一个随时间变化的平均分数图。为了做到这一点,我创建了一个视图,其中包含一个映射,该映射发出按间隔存储的键,以及一个对存储桶中的键进行平均的 reduce 函数。
这很好用。当查询总平均值时,CouchDB 几乎立即返回结果。当我每天存储一百个左右的结果时,我的 CouchDB 数据库需要几百毫秒才能产生结果。使用 1000 多个存储桶,查询需要几秒钟才能返回。在运行此查询时,我的 CPU 会跳到 100%,并且我的磁盘相当安静。
我对这种放缓感到有些困惑。由于减少所有内容似乎是即时的,因此我得出的结论是,开销可能在于生成包含 1000 多个条目的 JSON 文档。 CouchDB 不能快速返回 1000 行结果吗?
我是一个 CouchDB 新手,所以完全有可能我的 map 或 reduce 函数很糟糕,或者配置中某处有一个标志允许 CouchDB 使用更多内存。或者可能是 CouchDB 只是针对返回许多结果的聚合查询进行了强烈优化。
建议?
【问题讨论】: