数据库与hadoop的区别和联系
考虑到这一点,让我们从特定的视角将Hadoop与典型SQL 数据库做更详细的比较。 1. 用向外扩展代替向上扩展 扩展商用关系型数据库的代价是非常昂贵的。它们的设计更容易向上扩展。要运行一个更大的数据库,就需要买一个更大的机器。事实上,往往会看到服务器厂商在市场上将其昂贵的高端机标称为“数据库级的服务器”。不过有时可能需要处理更大的数据集,却找不到一个足够大的机器。更重要的是,
1. 用向外扩展代替向上扩展
扩展商用关系型数据库的代价是非常昂贵的。它们的设计更容易向上扩展。要运行一个更大
的数据库,就需要买一个更大的机器。事实上,往往会看到服务器厂商在市场上将其昂贵的高端机
标称为“数据库级的服务器”。不过有时可能需要处理更大的数据集,却找不到一个足够大的机器。
更重要的是,高端的机器对于许多应用并不经济。例如,性能4倍于标准PC的机器,其成本将大大
超过将同样的4台PC放在一个集群中。Hadoop的设计就是为了能够在商用PC集群上实现向外扩展
的架构。添加更多的资源,对于Hadoop集群就是增加更多的机器。一个Hadoop集群的标配是十至
数百台计算机。事实上,如果不是为了开发目的,没有理由在单个服务器上运行Hadoop。
2. 用键/值对代替关系表
关系数据库的一个基本原则是让数据按某种模式存放在具有关系型数据结构的表中。虽然关
系模型具有大量形式化的属性,但是许多当前的应用所处理的数据类型并不能很好地适合这个模
型。文本、图片和XML文件是最典型的例子。此外,大型数据集往往是非结构化或半结构化的。
Hadoop使用键/值对作为基本数据单元,可足够灵活地处理较少结构化的数据类型。在Hadoop中,
数据的来源可以有任何形式,但最终会转化为键/值对以供处理。
3. 用函数式编程(MapReduce)代替声明式查询(SQL )
SQL 从根本上说是一个高级声明式语言。查询数据的手段是,声明想要的查询结果并让数据库引擎
判定如何获取数据。在MapReduce中,实际的数据处理步骤是由你指定的,它很类似于SQL
引擎的一个执行计划。SQL 使用查询语句,而MapReduce则使用脚本和代码。利用MapReduce可
以用比SQL 查询更为一般化的数据处理方式。例如,你可以建立复杂的数据统计模型,或者改变
图像数据的格式。而SQL 就不能很好地适应这些任务。
另一方面,当数据处理非常适合于关系型数据结构时,有些人可能会发现使用MapReduce并
不自然。那些习惯于SQL 范式的人可能会发现用MapReduce来思考是一个挑战。我希望本书中的
练习和示例能帮你更轻松地掌握MapReduce编程。不过值得注意的是,这里还有很多扩展可用,
便于人们采用更熟悉的范式来编程,同时拥有Hadoop的可扩展性优势。事实上,使用某些扩展可
采用一种类似SQL 的查询语言,并自动将查询编译为可执行的MapReduce代码。我们将在第10 章
和第11 章介绍其中的一些工具。
4. 用离线批量处理代替在线处理
Hadoop是专为离线处理和大规模数据分析而设计的,它并不适合那种对几个记录随机读写的
在线事务处理模式。事实上,在本书写作时(以及在可预见的未来),Hadoop最适合一次写入、
多次读取的数据存储需求。在这方面它就像SQL 世界中的数据仓库。
更多推荐
所有评论(0)