转自:http://blog.jobbole.com/86269/
尽管层次数据库如今在大型机上依然被广泛使用,但关系数据库(RDBMS)(SQL)已经占领了数据库市场,并且表现的相当优异。我们存的钱不会跑到别人的账户,我们预定机票可以确保我们在飞机上有一个专属的座位,而且我们也不会因为没有做过的事而受到责备等等。关系数据库的数据完整性是因为它遵循了ACID(原子性,一致性,独立性以及持久性)原则。关系数据库技术可追溯到上世纪70年代。
那么,现在有什么变化呢?Web 技术开启了这次变革。如今,许多人在亚马逊上买东西。但关系数据库并不是设计用来处理亚马逊上每秒大规模的交易的。其主要的制约因素是关系数据库的机制问题。
NoSql 数据库提供了另一种机制,但这种机制却削弱了ACID原则。一些 NoSql 供应商在解决这些问题上取得了长足的进步;他们的解决方案称作最终一致性。至于 NewSql,为什么不利用现代的编程语言和技术来新建一个没有缺点的关系数据库呢?这就是很多 NewSql 供应商起家的方法。其他的 NewSql 公司创建了增强的 MySql 解决方案。
Hadoop 是一个完全不同的物种。它实际上是一个文件系统而非数据库。Hadoop 的根是基于互联网搜索引擎的。虽然 Hadoop 和 伙伴(Hbase,Mapreduce,Hive,Pig,Zookeeper)已经使它变成一个很强大的数据库,但 Hadoop 依旧是一个可容错、可扩展、廉价的分布式文件系统。Hadoop 当下的特点在于它的批量处理适用于数据分析。
现在,我们开始举例说明:我设想,视频游戏公司在营业了十年后,最近上线了我们最火热的游戏,并把货发给世界各地的零售商。我们的客户信息目前存储在一个 Sql Server 数据库中,我们对此一直很乐观。然而,由于玩家开始在线玩游戏,我们的数据库不能够跟上数据更新速度,导致玩家体验有延迟。随着用户群的快速增长,我们花了大笔的钱来买更多的硬件和软件也无济于事。我们最不希望的就是损失客户。我们现在该何去何从?
我们决定分割我们的线上用户群,同时在 NoSql 和 NewSql 上运行我们的线上游戏。我们的目标就是要找到最佳的解决方案。IT 部门于是选择了 NoSql CouchBase (类似于 MongoDB 的面向文档型)和 NewSql VoltDB。
Couchbase 是开源的,它有一个集成的缓存机制,并且可以自动地在多个节点之间传播数据。VoltDB 是一个遵循 ACID 原则的关系数据库,能够容错,横向扩展,并拥有无共享 & 内存中的架构。最后,这两个系统都能够运作。我不会详述各个方案的复杂细节,因为这只是一个例子,而且实际上比较这些技术需要测试,标杆管理以及深入分析。
既然线上操作可以顺利进行,我们想要分析我们的数据来找到我们应该开拓的市场。那么最适合推销我们的产品是哪个国家呢?为此,我们需要把 Sql Server 数据仓库的用户数据和线上游戏数据库的数据合并起来,然后运行分析报告。这就轮到 Hadoop 登场了。我们构建一个 Hadoop 系统并将这两个数据源的数据合并起来。最后,我们利用开源的 R 语言与其 MapReduce 模块连接起来,以生成分析报告。