Hadoop couchdb 1.6作为单服务器数据库时如何固有地利用Map reduce
我是couchdb的新手,在阅读couchdb1.6的文档时,我知道它是单服务器数据库,所以我想知道map reduce如何利用它。 如果我需要扩展这个数据库,那么我需要投入更多的RAID硬件吗?当然,它会在HDFS这样的商品硬件上工作吗 我知道Coach db 2.0计划引入集群功能,但无法获得关于这方面的适当文档 你能帮我理解文件是如何被存储和访问的吗。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
非常感谢您的帮助。我想您的问题是这样的:
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中运行,那么它可以在较新版本中扩展,而无需您进一步干预。我认为您的问题是这样的: