(1)数据库和NoSQL
能否用数据库实现NoSQL类似的应用?事实上就有人这样做,Friendfeed就用MySQL数据库来实现的。但是用关系型数据库来实现,存在几个问题:1.性能问题;2.schema无法灵活定义;3.扩展性的问题。
-
性能问题。所有的数据库都基于存储优化,而不是基于内存优化的,也就是说数据库的最佳应用场景是具有少量内存,而具有大量外部IO的情况。就算你有足够大的cache,把所有的数据都cache到内存中,与专门设计的内存数据库或者Key-Value cache相比,依然要慢几个数量级。这是数据库内部的算法决定的,所以不要指望把数据库当cache来用,当然专门的内存数据库除外,比如Oracle timesten.
-
schema不够灵活。关系型数据库中schema是无法灵活定义的,而Cassandra这类NoSQL数据库,You can add and remove arbitrary fields on the fly。其中最根本的原因是数据库是关系型的,新增或删除列都必须影响到每个表中的每一行。而NoSQL则不需要,每一行的column都可以不同,可以说根本就不存在schema的概念。根据Bigtable的定义:A Bigtable is a sparse, distributed, persistent multidimensional sorted map。相对于Bigtable“稀疏”的概念,我们认为关系型数据库中的表是“密集”的,也可以把Bigtable理解为一张满是空洞的table。
-
扩展性问题。数据库基于ACID模型设计,保证了强一致性,必然牺牲了扩展性,虽然可以用sharding或功能分区做横向扩展,但是也让数据库退化成为一个简单的key value store。
(2)NoSQL会取代数据库吗?
未来NoSQL会取代数据库吗?传统的关系型数据库还有优势吗?我个人认为关系型数据库至少在相当长的一段时间内,依然是主流,而且还有很大的发展空间。
首先,NoSQL的应用场景非常局限,某个类型的NoSQL仅仅针对特定类型的应用场景而设计,Cassandra在facebook用来承担inbox的搜索功能,而关系型数据库则要通用的多,也就是说NoSQL很难拿来就用,首先你必须搞清楚自己的应用场景,所以说NoSQL对于很多人来说是此之蜜糖,彼之砒霜。
第二,利用关系型数据库一样可以搭建出可以灵活扩展的架构,根据CAP原理,只要有所取舍,利用关系型数据库同样可以做到。
第三,关系型数据库厂家依然很强大,全世界有大量的用户。同时,硬件的发展更是日新月异,比如SSD的出现,就可以作为内存和磁盘之间的一层cache,甚至在不远的将来,完全替换磁盘。随着IO能力的巨大提升,数据库的性能也随着得到了更大的提升,很多现在面临的IO问题都不再是问题。而且,针对数据库的扩展性,厂家也提出了很多解决的方案,在一定程度上说,关系型数据库依然是最好的解决方案之一。
作为一名DBA,我并不担心数据库的未来,但我也不忽视NoSQL的巨大力量。有人将NoSQL解释成为Not only SQL,我想就是这个原因吧。没有一种解决方案是完美的,架构就是有所取舍,世界也因为多样才美丽。
阅读(1660) | 评论(0) | 转发(0) |