视图的CouchDB性能与HTTP批量获取

视图的CouchDB性能与HTTP批量获取,couchdb,mapreduce,Couchdb,Mapreduce,我有几个CouchDB数据库,都有数百GB,我需要以依赖于多个数据库的方式从中获取文档,例如(伪代码,前缀指示文档来自哪个数据库): 我可以用一组复杂的(和粗糙的)视图来实现这一点。或者我可以批量HTTP获取所需的文档,并用Java进行处理 与创建视图相比,批量HTTP获取的成本有多高?CouchDB本机不支持视图链接的原因是否足以避免视图解决方案 这是一个效率非常高的应用程序。在Coach中创建视图需要大量的I/O和CPU,尤其是因为它会影响实例中的所有文档 如果您的逻辑影响所有文档,那么创建

我有几个CouchDB数据库,都有数百GB,我需要以依赖于多个数据库的方式从中获取文档,例如(伪代码,前缀指示文档来自哪个数据库):

我可以用一组复杂的(和粗糙的)视图来实现这一点。或者我可以批量HTTP获取所需的文档,并用Java进行处理

与创建视图相比,批量HTTP获取的成本有多高?CouchDB本机不支持视图链接的原因是否足以避免视图解决方案


这是一个效率非常高的应用程序。

在Coach中创建视图需要大量的I/O和CPU,尤其是因为它会影响实例中的所有文档


如果您的逻辑影响所有文档,那么创建视图可能是最有效的机制。如果您已经有了一个相当粗略的视图,它为您提供了此处理所需的子集(或子集的超集,但小于整个DB),您可能会发现创建一个新的数据库更容易/更好,它可以使用过滤复制将其他数据库中的所有信息拉入另一个数据库。然后对另一个数据库执行查询。您的数据将有点陈旧,但将所有相关数据放在一个数据库中的优势将使您能够编写一个可以查看所有相关文档的视图。因此,当新文档从复制步骤到达时,将对该视图进行索引和增量更新

这将提供最好的世界:

  • 您将能够编写有意义的视图
  • 您将只将需要的数据拉入Java代码中
  • 在运行时,您仍然可以获得性能优势,因为视图将被索引,并在新数据从复制中到达时进行增量更新
for each Db1_Document in Db1
    if Db1_Document has field "Db2_match"
        Db2_Document = Db1_Document.Db2_match
        for each Db2_Reference in Db2_Document.references
            if Db2_Reference has empty field "Db1_match"
                add Db2_Reference to List bigList
        emit [Db2_Document, bigList]