0

对于所有具有特定内容的文档,type我的应用程序中有一个查询,它只选择最后一个文档的一个字段。我按日期映射这些文档,因此将降序查询限制为 1 肯定可以解决问题。我困扰的问题是这个视图会缓存所有这种类型的文档,占用明显的冗余空间。

所以我的问题是:

  1. 向该视图添加一个减少到最后一个文档的reduce函数是否会为我节省任何空间,或者视图仍然必须存储所有涉及的文档?
  2. 如果没有,还有其他节省空间的策略吗?
4

2 回答 2

2
  1. 不会。map 函数的结果仍然会浪费空间。
  2. 此刻我的一些想法:
    • 改变数据库的设计。如果文档的 id 将包括类型和日期,您可以在没有 map/reduce 的情况下进行一些搜索,如下所示http://127.0.0.1:5984/YOURDB/_all_docs?start_key="<TYPE>_<CURRENT_TIME>"&descending=true&limit=1
    • map你所能。不发出任何值,map 将存储文档的密钥和 id/ver。用于include_doc在查询时检索文档。
    • 添加附加字段,说明该文档是最后一个的候选者。仅映射那些确实拥有该领域的候选人。定期运行清理,从除最新文档之外的所有文档中删除该字段。注意:当支持删除最后添加的文档时,这可能会很困难。

对我来说,这似乎是 CouchDB 的想法:通过缓存查询来“浪费”空间,因此如果数据不经常更改,它们可以快速回答。也许如果您非常关心浪费空间,那么您的答案不是 CouchDB?

于 2012-12-21T21:57:32.803 回答
1

我的 couchdb 设置具有独立 RAID 驱动器上的数据和索引。地图是用 erlang 编写的,我发现它比 javascript 快 8 倍,而且地图当然返回 null。我将密钥保持在较小的范围内,并且在许多设计文档中拆分了我的视图,并且我使我的数据保持非常平坦,从而提高了序列化性能。

于 2012-12-28T18:20:03.060 回答