关注大数据技术趋势的人,一定对NoSQL不陌生,NoSQL是一种分布式数据库。过去,数据存储一直以关系型数据库为主,对并发操作和事务功能的控制很好。尽管RDBMS很优秀,但随着时间的推移,出现了两个关系数据库无法解决的问题:快速增长的数据量和日益复杂的数据模型。结果,我们看到了NoSQL数据库的兴起。1.关系型数据库不足实际上,从1979年甲骨文发布第一个版本开始,这些数据库就被设计成运行在单台服务器上,而且越大越好。而增加这些数据库容量的唯一方法就是升级服务器处理器、内存和存储,而数据存储成本不断上升。随着互联网数据的指数级增长和Web应用的兴起,数据模型越来越复杂,关系型数据库难以支撑,NoSQL数据库也应运而生。谷歌在2006年发布了Bigtable研究论文,亚马逊在2007年发布了Dynamo研究论文,这些新的数据库旨在满足新一代企业的需求:敏捷开发和支持任意规模的运营。2、敏捷开发在以体验为中心的数字经济时代,企业如何保持竞争力必须创新。由于这项创新的核心是现代网络、移动和物联网应用程序的开发,因此开发人员必须以高频率交付应用程序和服务。速度和敏捷性都至关重要,因为这些应用程序的发展速度远远快于ERP等传统应用程序。而关系型数据库却不能满足于此,因为它们固定的数据模型不能很好地支持敏捷开发。敏捷开发的核心原则是适应不断变化的应用需求:当需求发生变化时,数据模型也会发生变化,这对于关系数据库来说是一个无法克服的问题,因为关系数据库的模型是固定的、预先定义好的。因此,当数据模型需要改变时,开发人员不得不修改原来设定的数据库结构来满足新的需求。这会减慢或停止开发,不仅因为这是一个耗时的手动过程,而且还会影响其他应用程序和服务。相比之下,NoSQL文档数据库完全支持这一点,因为它们是无模式的,并且没有强制定义必须建模的数据。相反,它遵循应用程序和服务。使用NoSQL,数据模型由应用程序模型定义。应用程序和服务将数据建模为对象。3.如何支持任何规模的运营为了支持用户和数据的指数级增长——数十万到数百万用户,以及千兆字节到千兆字节的数据操作——应用程序和服务必须扩展以保持性能,并且必须高效运行。这是扩展关系数据库的问题,例如,对于Oracle,使用RAC技术进行扩展是组件繁重、昂贵且不完全可靠的。因此,高效按需扩展的能力是一个挑战。随着必须购买更大、更强大的服务器来容纳更多用户和更多数据,它变得越来越昂贵。此外,如果必须使数据库脱机以执行硬件升级,则可能会导致停机。然而,分布式NoSQL数据库可通过廉价硬件扩展,只需添加更多服务器即可添加更多资源。扩展能力使企业可以通过以下方式更有效地进行扩展:1.无需购买对称的硬件来满足部署;2.使用更便宜的硬件进行扩展;3.无需停机即可按需扩展。4、NoSQL常用的存储方式NoSQL常用的存储方式有三种:key-value存储、面向文档的数据库和面向列的数据库。接下来对这些存储方式和数据库代表进行说明。key-value存储代表:Redis和memcachedkey-value存储是NoSQL最常用的存储方式,以key-value的形式存储数据,高速访问数据。并且根据保存的时间,还可以分为临时的、永久的和兼而有之。面向文档的数据库代表:MongoDB、CouchDB面向文档的数据库数据结构要求不是很严格,没有定义表结构,复杂的查询条件可以使用面向列的数据库代表:HBase面向列的数据库是以列为单位存储的,这里的Columnarstorage其实就是columnfamilystorage,将数据表存储为数据的列而不是行。列族存储的优点:查询速度快,易于扩展,但功能相对有限。5.NoSQL对事务的支持?这里有一个误区。由于分布式事务需要分布式协作,因此似乎必须在性能可扩展性和分布式事务支持之间做出权衡。耶鲁大学副教授丹尼尔·阿巴迪认为,这种想法是错误的,可扩展的分布式系统也可以实现事情。他提出了一种新的权衡策略,特别是公平性、隔离性和吞吐量(FIT)之间的权衡。也就是说,构建具有分布式事务吞吐量的可扩展系统有两种方式:1.放弃隔离放弃隔离时,一件事不会与其他事情发生冲突,无需等待合作即可完成。而且还有一类保证弱隔离下正确性的数据约束。2.放弃公平性通过设置分布式协作的顺序,最大限度地减少两者之间的时间重叠,从而减少两者之间的相互影响,并在这种公平性下寻找最合适的协作时间。6.小型结构构建和运行这些大型交互式应用程序产生了一组新的技术要求。新技术架构需要比以往任何时候都更加灵活,并且需要一种能够适应最大规模、速度和数据可变性的实时数据管理方法。关系型数据库无法满足这些新需求,使得NoSQL越来越受欢迎。
