发布日期:2023-03-31来源:武汉北大青鸟武汉校区作者:027hpit
武汉北大青鸟光谷校区:数据库技术的前世今生
近读到一些关于数据库技术发展的文章,基本都是围绕着SQL与NoSQL的讨论来展开的。记得当初在NoSQL运动刚刚起步的时候,“say no to SQL”的口号不绝于耳,当然口号并没有成为现实,人们终普遍接受了Not-Only SQL的说法。但真的要给NoSQL下一个定义,还真不是件容易的事,人们习惯把MongoDB、Redis这样的产品作为NoSQL普遍定义,可以归结为那“四大类”。但对于我来说,上次采访某大数据架构师的说法则更加中肯,凡是没有用到SQL的都算是NoSQL,即便是在传统的关系型数据库里。
也就是说,你可以把它们看作是一对好基友,你中有我,我中有你。用软件工程师Martin Fowler的一篇文章其中提到的词来形容就非常贴切:Polyglot Persistence。它翻译成中文可以叫做混合持久化或者多语言持久化,所以说在未来的数据库技术领域,将很有可能打破所谓的关系型和NoSQL之间的界限,用不同的工具达到不同的目的,将各种数据库技术杂糅在一套系统中,各司其职。因此,就像Fowler所说的,无论怎样定义NoSQL都是无用功。
关系型数据库(SQL)成为主流技术已经超过20年,这是有它的道理的。它把数据存储在磁盘中,人们可以通过标准化的语言SQL来对数据进行各种操作。它的事务性(transactional)能够为有效地提供用户并发访问控制,并为应用程序的数据调用提供一致性。而且由于关系型数据库主要存储结构化数据,它的数据模型和标准化更加适用于报表(Report)的生成。
但是关系型数据库的更大问题在于,它的设计初衷是要运行在单一的服务器上,因此在进行Scale-out的时候很可能会遭遇巨大的瓶颈。Scale-up就是你买更大的机器来跑数据库,Scale-out就是用多个普通服务器组成集群,让数据库分布在这个集群的节点当中。而集群(Cluster)的概念就是用更多的机器来做一件事,这其中如果一个机器宕掉,其他的机器还可以继续运行,因此整个集群也能够正常的工作。在这方面,一些大型的互联网公司走在了前面,像Google和Amazon都运行了非常大型的集群,在逐渐就衍生出了云计算的概念。他们都意识到,SQL数据库在应对集群方面出现了比较大的性能瓶颈,因此纷纷放弃SQL,自己开始研发出像BigTable和Dynamo这样的存储平台,它们应该算是早的NoSQL数据库。
于是,人们开始注意到这个问题,各种各样的NoSQL产品也涌现出来。Adewale把这类数据库的特点归结为:不使用关系数据模型,不使用结构化查询语言;往往针对大型集群设计;没有固定的模式(Schema),一条记录中可以存储任意数据;往往是开源的。它主要解决的一个问题就是大数据集存储,使用NoSQL数据库的大型集群可以存储PB级别的数据,并处理大量的分析数据。而多种多样的数据模型,可以用来应对不同类型的数据,比如文档、图片、视频等非结构化数据。
当然这并不是说要放弃关系型数据库,在应对特定类型的数据时它依旧是高效的。而像ACID和第三方工具支持等方面,NoSQL数据库还远远比不上传统关系型数据库。所以Fowler建议人们考虑所谓的混合持久化原则,即根据不同应用对数据的需求,而使用多种数据存储技术。举例来说,快速的读写访问,无需持久性的应用可以使用Redis;财务和报表系统,可以使用关系型数据库;集群的大规模分析数据,可以使用Cassandra;而读操作很多,写操作很少的,则可以使用MongoDB。人们可以自行选择合适的数据库技术,而无需一股脑部使用SQL数据库。
Copyright (c) 2006-2023 武汉宏鹏教育咨询有限公司 版权所有 All Rights Reserved.