NoSQL与关系型数据库

NoSQL意为Not Only SQL,是区别于传统关系型数据库的数据库管理系统的统称。由于其与传统关系型数据库最大的不同是不使用SQL作为查询语言,其数据存储可以不依照固定的表格范式,通常具备水平可扩展的特征。

其实NoSQL这个词最早于1998年出现的时候并非如此野心勃勃。Carlo Strozzi当时开发了一个轻量级、开源且不提供SQL功能的关系数据库。后来NoSQL并未按Strozzi当初所设想的那样发展,因为我们需要的并非“No SQL”,而是“No Relational”,也就是非关系型数据库技术。

2009年NoSQL的特性被进一步明确为指代那些非关系型、分布式(无法支持联接Join运算)、且通常不遵循ACID原则的数据库管理系统。所谓ACID意味着数据库管理系统中,事务(Transaction)所具备的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

NoSQL强调的是与“关系型”相对应的“非关系型”特性,着重突出其键值存储和文档数据库等优点,它与传统的关系型数据库越来越呈现一种互补的关系。随着NoSQL技术的发展,一些NoSQL数据库也开始提供ACID的保证。以BerkeleyDB为基础的Oracle NoSQL数据库就针对ACID遵从性进行了相应的开发,虽然目前就其能否提供真正的ACID遵从还存在争议,但Oracle NoSQL数据库确实正在这条道路上前进。

相较于NoSQL,关系数据库的缺点还是很严重的,特别是面对基于Web的应用,关系数据库的优势发挥不出来的时候。通常有如下一些:

* 需要海量数据的写入处理
* 做索引的同时表还需要更新
*表结构需要不定期产生变化
*数据结构的一致性较差(无Schema)
*查询语言不支持跨数据库或跨域查询(在网络时代这很重要)
……
 



留下评论