1.问题:
为什么不能配有大量硬盘的数据库来进行大规模的数据分析?我们为什么需要hadoop?
2.说明:
这两个问题的答案来自计算机硬盘的另一个发展趋势:寻址的时间提升远远不敌于传输速率的提升。寻址是将磁头移动到特定的硬盘位置进行读/写的过程。
它是导致硬盘操作延迟的主要原因,而传输速率取决于硬盘的宽带。
如果数据访问中含有大量的硬盘寻址,那么读取大量数据集就必然花费更长的时间(相对于;流数据读取模式,流读取主要取决于传输速率)。另一方面,如果数据库系统只是更新一小部分记录,那么传统的B树(关系数据库中的使用的一种数据结构,受限于寻址的速率)就更有优势。但如果数据库系统有大量的数据更新,B树的效率就更明显落后于MapReduce,因为它需要使用”排序||合并”(sort/merge)来重建数据库。
在许多情况下,可以将MapReduce视为关系数据库管理系统的补充。两个系统之间的差异如下图所示:
传统的关系数据库跟MapReduce比较 | ||||||
传统的关系数据库 | MapReduce | |||||
数据大小 | GB | PB | ||||
数据存取 | 交互式和批处理 | 批处理 | ||||
更新 | 多次读/写 | 一次写入,多次读取 | ||||
事务 | ACID | 无 | ||||
结构 | 写时模式 | 读时模式 | ||||
完整性 | 搞 | 低 | ||||
横向扩展 | 非线性 | 线性的 |
MapReduce比较适合解决需要以批处理方式分析整个数据集的问题,尤其是一些特定目的的分析。RDBMS适用于索引后数据集的点查询和更新,建立索引的数据库系统能够提供对小规模数据的低延迟数据检索和快速更新。MapReduce适合一次写入,多次读取数据的应用,关系数据库则更合适持续更新的数据集。