MapReduce 与 关系型数据库的区别: 1 数据访问模式受限于磁盘寻址
磁盘寻址时间提高速度远远小于数据传输速率提高速度。对于超大规模数据(以PB为单位)必须考虑使用其他方式。关系型数据库使用B树结构进行数据的更新查询操作,对于最大到GB的数据量,一般相对数据量较小,效果很好。但是大数据量时,B树使用排序/合并方式重建数据库以更新数据的效率远远低于MapReduce。 2 MapReduce是关系型数据库的补充。
MapReduce更适合批量更新大批量的数据集,一次写入多次读取。RDBMS更适合点查询和更新,这时的数据集已经被索引以提供低延迟的检索和短时间的少量数据更新,适合多次读写。 3 数据结构不同。
关系型数据使用的是结构化数据,在数据库阶段按具体类型处理数据。MapReduce数据模式半结构化或非结构化,数据处理是在Mapreduce操作中由用户实现。
关系型数据的规范性非常重要,网站空间,保持数据的完整性,一致性。这样的规范限制了数据必须在非本地操作。而MapReduce最终要是让数据在靠近数据的地方处理。 结构化数据
(structured data):是具体既定格式的实体化数据,如XML文档或满足特定预定义格式的数据库表。这是RDBMS包括的内容。 半结构化数据
(semi-structured data):比较松散,虽然可能有格式,但是经常被忽略,所以他只能作为对数据结构的一般指导。如:一张电子表格,其结构是由单元格组成的网格,但是每个单元格自身可保存任何形式的数据。 非结构化数据
(unstructured data):没有什么特别的内部结构,如纯文本或图像数据。 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 将数据传输到算法所在容器执行。而这个的根本原因是数据规范性。
数据规范性,为了保证约束(完整性、一致性)正常,数据就需要传输到数据库容器外执行,数据处理逻辑完成后,由事务提交到数据库,从而严格保证数据的规范。
比较项
MapReduce
RDBMS
数据访问模式
不受磁盘寻址的限制,磁盘寻址时间提高速度远远小于数据传输速率提高速度。
受限于磁盘寻址,关系型数据库使用B树结构进行数据的更新查询操作,对于最大到GB的数据量,一般相对数据量较小,效果很好。
增删改查
更适合批量更新大批量的数据集,一次写入多次读取
更适合点查询和更新,这时的数据集已经被索引以提供低延迟的检索和短时间的少量数据更新,适合多次读写。
数据结构
MapReduce数据模式半结构化或非结构化,数据处理是在Mapreduce操作中由用户实现,MapReduce最终要是让数据在靠近数据的地方处理
关系型数据使用的是结构化数据,在数据库阶段按具体类型处理数据。关系型数据的规范性非常重要,保持数据的完整性,一致性。这样的规范限制了数据必须在非本地操作。
伸缩性
线性
非线性
还是先来比较下传统关系型数据库与MapReduce两种方式的区别吧,如下表所示:
比较项 传统关系数据库 MapReduce
数据大小 GB PB
访问 交互式批处理批处理 批处理
更新 多次读写 一次写入多次读取
结构 静态模式 动态模式
完整性 高 低
横向扩展 非线性 线性
,服务器空间赚钱之道很多,但是找不到赚钱的种子,便成不了事业家。