Hadoop couchdb 1.6作为单服务器数据库时如何固有地利用Map reduce

Hadoop couchdb 1.6作为单服务器数据库时如何固有地利用Map reduce,hadoop,mapreduce,couchdb,Hadoop,Mapreduce,Couchdb,我是couchdb的新手,在阅读couchdb1.6的文档时,我知道它是单服务器数据库,所以我想知道map reduce如何利用它。 如果我需要扩展这个数据库,那么我需要投入更多的RAID硬件吗?当然,它会在HDFS这样的商品硬件上工作吗 我知道Coach db 2.0计划引入集群功能,但无法获得关于这方面的适当文档 你能帮我理解文件是如何被存储和访问的吗。 非常感谢您的帮助。我想您的问题是这样的: “MapReduce是……集群上的并行分布式算法。”[从维基百科上缩短] 但是CouchDB 1

我是couchdb的新手,在阅读couchdb1.6的文档时,我知道它是单服务器数据库,所以我想知道map reduce如何利用它。 如果我需要扩展这个数据库,那么我需要投入更多的RAID硬件吗?当然,它会在HDFS这样的商品硬件上工作吗

我知道Coach db 2.0计划引入集群功能,但无法获得关于这方面的适当文档

你能帮我理解文件是如何被存储和访问的吗。
非常感谢您的帮助。

我想您的问题是这样的:

  • “MapReduce是……集群上的并行分布式算法。”[从维基百科上缩短]
  • 但是CouchDB 1.x不是集群数据库
  • 那么CouchDB使用术语“map reduce”是什么意思呢
  • 这是一个合理的问题

    “MapReduce”的历史用法是使用该样式化术语,并且使用相同的样式意味着对数据集进行并行处理,该数据集可能太大,单台计算机无法处理

    但CouchDB 1.x不是这样工作的。视图索引“map”和“reduce”处理不仅发生在单个机器上,甚至发生在单个线程上!正如dch(核心CouchDB项目的长期贡献者)在回答以下问题时所解释的:

    问题是,最终,某些东西必须以串行方式进行操作,以构建B~树,从而使跨索引视图的范围查询高效…当你第一次意识到高度并行的map-reduce算法是按顺序运行的时候,这看起来真是太奇怪了,等等

    那么:map/reduce给单服务器CouchDB带来了什么好处?为什么要围绕它构建CouchDB 1.x视图索引

    这样做的好处是,开发人员可以为每个索引提供两个函数“map”和“reduce”,这两个函数构成非常简单的构建块,至少在设计索引之后,很容易进行推理

    我的意思是:

    例如,使用SQL查询语言,您可以关注所需的数据,而不是查找数据所需的工作量。因此,您可能会遇到意外的性能问题,这可能通过确定要添加索引的正确列来解决,也可能无法解决,等等

    有了CouchDB,所谓的方法就走到了极端。您必须明确考虑如何“找到”每个文档或文档集。您可以说,我希望能够找到“主管”字段与特定标识符匹配的所有“员工”文档。因此,现在您必须编写一个映射函数:

    function (doc) {
       if (doc.isEmployeeRecord) emit(doc.supervisor.identifier);
    }
    
    然后你必须像这样查询它:

    GET http://couchdb.local:5984/personnel/_design/my_indexes/_view/by_supervisor?key=SOME_UUID
    
    在SQL中,您可以简单地说:

    SELECT * FROM personnel WHERE supervisor == ?
    
    那么CouchDB方式的优势是什么?在SQL中,如果在supervisor列上没有索引,那么这个查询可能会很慢。在CouchDB的例子中,你不可能真的意外地进行一个未优化的查询——你总是必须首先找到一个自定义视图

    (提供给CouchDB视图的“reduce”函数通常用于计算或平均多个文档。)

    如果你认为这是一个可疑的优势。就我个人而言,我发现通过定制的“映射函数”和有时的“缩减函数”来设计自己的索引是一个有趣的挑战,而且至少在了解查询的扩展成本(对于复制来说不是那么多…)时,它确实获得了回报

    因此,不要认为CouchDB视图是“MapReduce”(在样式化的意义上),而应该为跨一组数据运行
    [].map(…).reduce(…)
    的结果提供高效可访问的存储。因为“映射”功能一次只应用于一个文档,所以一次总的数据集可能会超过内存中的容量。由于“reduce”函数的大小,它进一步鼓励将大量数据高效地处理到一个高效访问的索引中

    如果您想进一步了解CouchDB中生成的索引是如何存储的,您可能会发现以下文章很有趣:


    您可能已经注意到,我很抱歉,我实际上没有一个明确/可靠的答案,说明实际的优势和原因是什么!我没有设计或实现CouchDB,多年来我只是一个狂热的用户


    也许更大的优势在于,在Couchbase和CouchDB 2.x这样的系统中,map/reduce思想的“并行友好性”可能会发挥更大的作用。因此,如果您设计了一个应用程序,可以在CouchDB 1.x中运行,那么它可以在较新版本中扩展,而无需您进一步干预。

    我认为您的问题是这样的:

  • “MapReduce是……集群上的并行分布式算法。”[从维基百科上缩短]
  • 但是CouchDB 1.x不是集群数据库
  • 那么CouchDB使用术语“map reduce”是什么意思呢
  • 这是一个合理的问题

    “MapReduce”的历史用法是使用该样式化术语,并且使用相同的样式意味着对数据集进行并行处理,该数据集可能太大,单台计算机无法处理

    但CouchDB 1.x不是这样工作的。视图索引“map”和“reduce”处理不仅发生在单个机器上,甚至发生在单个线程上!正如dch(核心CouchDB项目的长期贡献者)在回答以下问题时所解释的:

    问题是,最终,某些东西必须以串行方式进行操作,以构建B~树,从而使跨索引视图的范围查询高效…当你第一次意识到高度并行的map-reduce算法是按顺序运行的时候,这看起来真是太奇怪了,等等

    那么:map/reduce给单服务器CouchDB带来了什么好处?为什么要围绕它构建CouchDB 1.x视图索引

    好处是开发人员可以为每个索引提供两个函数