Chinaunix首页 | 论坛 | 博客
  • 博客访问: 89570
  • 博文数量: 19
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 158
  • 用 户 组: 普通用户
  • 注册时间: 2015-12-16 20:28
个人简介

Stay Hungry, Stay Foolish

文章分类

全部博文(19)

文章存档

2016年(9)

2015年(10)

我的朋友

分类: NOSQL

2015-12-19 22:23:19

(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,我想就是这个原因吧。没有一种解决方案是完美的,架构就是有所取舍,世界也因为多样才美丽。








阅读(1609) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~