根据Hadoop权威指南一书,总结了
MapReduce 与 关系型数据库的区别:
1 数据访问模式受限于磁盘寻址,磁盘寻址时间提高速度远远小于数据传输速率提高速度。对于超大规模数据(以PB为单位)必须考虑使用其他方式。关系型数据库使用B树结构进行数据的更新查询操作,对于最大到GB的数据量,一般相对数据量较小,效果很好。但是大数据量时,B树使用排序/合并方式重建数据库以更新数据的效率远远低于MapReduce。
2 MapReduce是关系型数据库的补充。MapReduce更适合批量更新大批量的数据集,一次写入多次读取。RDBMS更适合点查询和更新,这时的数据集已经被索引以提供低延迟的检索和短时间的少量数据更新,适合多次读写。
3 数据结构不同。关系型数据使用的是结构化数据,在数据库阶段按具体类型处理数据。MapReduce数据模式半结构化或非结构化,数据处理是在Map reduce操作中由用户实现。
关系型数据的规范性非常重要,保持数据的完整性,一致性。这样的规范限制了数据必须在非本地操作。而MapReduce最终要是让数据在靠近数据的地方处理。
4 伸缩性。关系型数据库 对数据处理是非线性。MapReduce线性。
其中有一句话难以理解,涉及到了关系型数据和MapReduce处理数据方式不同的根本原因。
原文:
Relational data is often normalized to retain its integrity, and remove redundancy.
Normalization poses problems for MapReduce, since it makes reading a record a nonlocal
operation, and one of the central assumptions that MapReduce makes is that it
is possible to perform (high-speed) streaming reads and writes
翻译后:
关系型数据往往是规范的,以保持其完整性和删除冗余。规范化为MapReduce带来
问题,因为它使读取记录成为一个非本地操作,并且MapReduce的核心假设之一就是,
它可以进行(高速)流的读写。
这段话难以理解是在 为什么规范化使得读取操作必须是非本地操作。这句话怎么理解呢?
我的理解:
这个本地操作 应该是指的 数据传输 还是算法传输, mapreduce是将算法传输到hdfs datanode上以便数据在本地执行。而关系型数据库必须要通过 connection 将数据传输到算法所在容器执行。而这个的根本原因是数据规范性。
数据规范性,为了保证约束(完整性、一致性)正常,数据就需要传输到数据库容器外执行,数据处理逻辑完成后,由事务提交到数据库,从而严格保证数据的规范。
请教各位大牛,这样理解是否正确?