节省空间的观点

时间:2012-12-21 19:36:46

标签: view couchdb

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

所以我的问题是:

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

2 个答案:

答案 0 :(得分:2)

  1. 否。地图功能的结果仍然会浪费空间。
  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检索文档。
    • 添加其他字段,说明该文档是最后一个文档的候选对象。仅映射那些拥有该领域的候选人。定期运行清理,从除最新文档之外的所有文档中删除该字段。注意:删除最后添加的文档时,这可能很困难。
  3. 对我而言,CouchDB的想法似乎是:通过缓存查询来“浪费”空间,因此如果数据不经常更改,他们可以快速回答。也许如果你非常关心浪费空间,你的案例中的答案不是CouchDB吗?

答案 1 :(得分:1)

我的couchdb设置包含数据和索引RAID驱动器。地图用erlang编写,我发现比javascript快8倍,地图当然返回null。我保持键很小,我也在许多设计文档中分解我的观点,并且我保持数据非常扁平,这提高了序列化性能。