View 节省空间的视图

View 节省空间的视图,view,couchdb,View,Couchdb,对于具有特定类型的所有文档,我的应用程序中只有一个查询,它只选择最后一个文档的一个字段。我按日期映射这些文档,因此将降序查询限制为1肯定可以做到这一点。我担心的问题是,这个视图会缓存这种类型的所有文档,占用明显的冗余空间 因此,我的问题是: 向该视图添加一个reduce函数(该函数将减少到最后一个文档)是否会为我节省空间,或者该视图仍然需要存储所有涉及的文档 如果没有,是否有其他节省空间的战略 不会。地图功能的结果仍然会浪费空间 现在我脑子里有些事情: 更改数据库的设计。如果文档的id包含类型

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

因此,我的问题是:

  • 向该视图添加一个reduce函数(该函数将减少到最后一个文档)是否会为我节省空间,或者该视图仍然需要存储所有涉及的文档
  • 如果没有,是否有其他节省空间的战略
  • 不会。地图功能的结果仍然会浪费空间
  • 现在我脑子里有些事情:
    • 更改数据库的设计。如果文档的id包含类型和日期,您可以在不使用map/reduce的情况下进行搜索,如下所示:
      http://127.0.0.1:5984/YOURDB/_all_docs?start_key=“u”&降序=true&限制=1
    • 尽量利用
      map
      。不发出任何值,map将存储文档的键和id/ver。查询时使用
      include_doc
      检索单据
    • 添加附加字段,说明该文档是最后一个文档的候选文档。仅映射那些具有该字段的候选人。定期运行清理,从除最新文档外的所有文档中删除该字段。注意:当支持删除最后添加的文档时,这可能会很困难
  • 对我来说,这似乎就是CouchDB的想法:通过缓存查询来“浪费”空间,因此,如果数据没有频繁更改,查询可以快速得到响应。也许如果你这么在意浪费空间,那么你的答案不是CouchDB

  • 不会。地图功能的结果仍然会浪费空间
  • 现在我脑子里有些事情:
    • 更改数据库的设计。如果文档的id包含类型和日期,您可以在不使用map/reduce的情况下进行搜索,如下所示:
      http://127.0.0.1:5984/YOURDB/_all_docs?start_key=“u”&降序=true&限制=1
    • 尽量利用
      map
      。不发出任何值,map将存储文档的键和id/ver。查询时使用
      include_doc
      检索单据
    • 添加附加字段,说明该文档是最后一个文档的候选文档。仅映射那些具有该字段的候选人。定期运行清理,从除最新文档外的所有文档中删除该字段。注意:当支持删除最后添加的文档时,这可能会很困难

  • 对我来说,这似乎就是CouchDB的想法:通过缓存查询来“浪费”空间,因此,如果数据没有频繁更改,查询可以快速得到响应。也许如果您非常关心浪费空间,那么您的案例中的答案不是CouchDB?

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

    My couchdb安装程序在sperate RAID驱动器上具有数据和索引。地图是用erlang编写的,我发现它比javascript快8倍,当然地图返回空值。我将键保持在较小的范围内,并且在许多设计文档中分解视图,并将数据保持在非常平坦的位置,从而提高序列化性能

    回答得很好。非常感谢。因为我使用Cloudant作为云内数据库宿主,所以我有点拘泥于沙发。您会建议哪种NoSQL替代方案?在这种情况下,关于Cloudant替代服务的建议会更好。请注意,如果您不使用
    type
    date
    字段创建索引,那么无论您选择什么数据库系统,您想要的查询都会非常慢。可以考虑在<代码>类型< /代码>上筛选的映射,并返回密钥日期和无值作为索引。它可能比任何其他DB更节省空间。coach的问题是很难做出效率不高的想法:并没有连接,并没有索引就并没有搜索,等等。我真的很喜欢你们所有的建议,非常机智。另一个问题:基于表单
    \uu
    的查询的id不是最慢的吗?它不需要遍历所有文档ID直到找到它吗?我认为查询所有文档应该很快。我不知道它的实现,但建议它是(隐式)视图。标准视图(如地图)将所有数据保存在B-树中,您应该能够快速搜索它。我认为您应该就此提出新的问题,这样更熟悉CouchDB内部结构的人就会回答:)一般来说,使用代表一些可用价值的ID通常是好的,但一切都取决于您的具体情况。我不熟悉你所有的数据库设计来提出具体的建议:)回答得很好。非常感谢。因为我使用Cloudant作为云内数据库宿主,所以我有点拘泥于沙发。您会建议哪种NoSQL替代方案?在这种情况下,关于Cloudant替代服务的建议会更好。请注意,如果您不使用
    type
    date
    字段创建索引,那么无论您选择什么数据库系统,您想要的查询都会非常慢。可以考虑在<代码>类型< /代码>上筛选的映射,并返回密钥日期和无值作为索引。它可能比任何其他DB更节省空间。coach的问题是很难做出效率不高的想法:并没有连接,并没有索引就并没有搜索,等等。我真的很喜欢你们所有的建议,非常机智。另一个问题:基于表单
    \uu
    的查询的id不是最慢的吗?难道它不需要检查所有的文档ID直到找到它吗