虽然关系型数据库系统RDBMS在安装和使用上仍然占有主要地位,但毋庸置疑,非关系型数据库NoSQL技术已经成为今天发展最快的数据库技术。
NoSQL是对数据库系统的总称,在某种程度上,它的性能和用途可能完全不同。NoSQL一词最早产生于上世纪九十年代,意思是No SQL(没有SQL语言),后来随着时间和技术的发展,SQL界面仍然作为处理数据的方式存在,所以NoSQL又有了新的诠释,即Not Only SQL(不只是SQL语言)。今天,NoSQL数据库凭借着其非关系型、分布式、开源和横向扩展等优势,被认为是下一代数据库产品。
四种主要的NoSQL数据库和它们主要的应用场景
键值数据库:当数据以键的形式访问时,比如通过国际标准书号ISBN找一本书,键值数据库是最理想的。在这里,ISBN是键,书籍的其他信息就是值。必须知道键才能查询,不过值是一堆无意义的数据,读取之后必须经过翻译。
文档存储数据库:该数据库以文档的形式管理和存储数据。有点类似于键值数据库,但文档数据库中的数据有结构。与键值数据库中值是一堆无意义的数据不同,文档数据库中数据以文档的结构被描述,典型的是JavaScript Object Notation (JSON)或XML.文档存储数据库中的数据可以通过定义的任何模式进行查询,但键值数据库只能通过它的键进行查询。
列式数据库:也被称为列式存储或宽列存储,一改之前行式存储的方式,对数据进行列式存储。在传统关系型数据库中,数据经常以行来访问。以列式管理记录的NoSQL数据库可以管理大规模的动态列。因为没有固定的模式,所以列名和键可以变换。列式数据库适用于不经常写的情况,要满足ACID(原子性、一致性、隔离性和持久性)的要求并不难,而且模式是变化的。
图型数据库:图型数据库关注值与值之间的关系,用图型的数学概念存储数据。图型数据库用带有点、边缘和属性的图的结构表示和存储数据。在图型数据库中,每一个元素都包含一个直接的指向它毗邻元素的点,所以也就不需要索引查找。
NoSQL数据库在网页扩展、大数据和分析部署等方面越来越流行。每一个种类的NoSQL数据库都有适用的不同类型的应用程序和用例,这就涉及到一个NoSQL社区常用的一个话题,即多样持久性,或者说根据数据库处理应用程序需求的不同,使用不同的数据库系统,用于不同的应用程序和用例。
因此,使用NoSQL最重要的是使用正确的数据库,满足具体的需求,哪怕是要引入一种新的数据库系统。
NoSQL的优势和劣势
那么,为什么考虑用NoSQL数据库替代传统数据库呢?也许,前者最大的有点在于它的去中心化、可扩展、容错能力等属性。很多公司应用NoSQL数据库技术是考虑了它的可扩展能力。
用NoSQL数据库,你可以为每一个特殊的用例定制化你的数据管理解决方案。关系型数据库可以通过不同的用例广泛地应用于实践。通过考虑多样持久性,组织可以选择最能适应特殊应用场景的数据库技术。
另外,大多数NoSQL产品都是轻量级的,因此花费比较少。自从NoSQL产品被设计用来满足特殊的用例和解决特殊的问题,它的功能也就比大多数关系型数据库少,因为后者要应用于更广泛的领域。因此,NoSQL数据库需要的代码更少,这也是和复杂的关系型数据库相比具备的一项优势。
当然,NoSQL也有它的缺点。ACID协议是关系型数据库的标准,但很多NoSQL数据库做不到。如果ACID支持很关键,你必须要确定你选的NoSQL数据库是否提供ACID。
NoSQL数据库的另一个缺点是不支持SQL语言。经过40多年的发展,SQL已经成为访问数据的通用语言。一套数据库系统不支持SQL语言就意味着要求开发者学习不同的访问数据的语言。不过,像有的NoSQL支持ACID一样,有的NoSQL数据库也支持SQL语言,但不像传统关系型数据库那样全面。总之,想要不做重大更改就在NoSQL数据库中运行SQL查询是不可能的。
今天的NoSQL市场依然很混乱。严格来讲,有上百种不同的NoSQL数据库可供选择。而且没有像关系型数据库一样正规的数据模型,因此NoSQL数据库之间也是各不相同的,即便是同一种类也有所不同。这种混乱给NoSQL的广泛应用带来了阻碍,如果没有深度的投资和研发,它很难成功。
NoSQL 数据库用例
让我们分别看一下不同NoSQL数据库的用例: