03.NoSQL

NoSQL

NoSQL 的爆发与 Web 2.0 时代互联网数据的爆炸式增长密切相关,传统的关系数据库无法处理如此大量的数据,基于传统的关系数据模型实现高可用性和可扩展的分布式数据库非常具有挑战性,因此需要具有高可伸缩性的分布式数据库。并且互联网上大多数数据的数据模型很简单,不需要关系模型进行建模,因此可以削弱事务和约束,并以高可用性和可伸缩性为目标,从而更好地满足业务需求。NoSQL 提出初期有人称为 No SQL,即完全去 SQL 化;而随着实践的深入,更多的人将其称为 Not only SQL,也有很多的 NoSQL 数据库同样支持 ACID 事务。

采用 NoSQL 数据库的背后有几个驱动因素,其中包括:

  • 需要比关系数据库更好的可扩展性,包括非常大的数据集或非常高的写入吞吐量
  • 相比商业数据库产品,免费和开源软件更受偏爱。
  • 关系模型不能很好地支持一些特殊的查询操作。
  • 受挫于关系模型的限制性,渴望一种更具多动态性与表现力的数据模型。

NoSQL 家族主要分为键值(Key-Value)存储数据库、列存储数据库、文档型数据库和图数据库四大类,其产生就是为了解决大规模数据集合多重数据种类带来的挑战,故场景化也格外明显。键值存储数据库适用于内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等;列存储数据库适用于分布式的文件系统;文档型数据库适用于 Web 应用中的非结构化存储;图数据库适用于社交网络、推荐系统等,专注于构建关系图谱。

schema-less

文档数据库有时称为无模式(schema-less)这是不正确的,因为存在隐式架构更好的方式是写模式(schema-on-write,数据库在存储值时强制执行模式)和读模式(schema-on-read,模式是隐式的,仅在读取数据时才解释)这类似于编程语言中的静态类型和动态类型。

NoSQL

近年来随着互联网的迅猛发展,产生了庞大的数据,也催生了 NoSQL、NewSQL 等新一代数据库的出现。2009 年 MongoDB 开源,掀开了 NoSQL 的序幕,一时之间 NoSQL 的概念受人追捧,MongoDB 也因为其易用性迅速在社区普及。NoSQL 抛弃了传统关系数据库中的事务和数据一致性,从而在性能上取得了极大提升,并且天然支持分布式集群。

然而,不支持事务始终是 NoSQL 的痛点,让它无法在关键系统中使用。2012 年,Google 发布了 Spanner 论文,从此既支持分布式又支持事务的数据库逐渐诞生,。以 TiDB、蟑螂数据库等为代表的 NewSQL 身兼传统关系数据库和 NoSQL 的优点,开始崭露头角。2014 年亚马逊推出了基于新型 NVME SSD 虚拟存储层的 Aurora,它实现了完全兼容 MySQL 的超大单机数据库,于单点写多点读的主从架构做了进一步的发展,使得事务和存储引擎分离,为数据库架构的发展提供了具有实战意义的已实践用例。另外,各种不同用途的数据库也纷纷诞生并取得了较大的发展,比如用于 LBS 的地理信息数据库,用于监控和物联网的时序数据库,用于知识图谱的图数据库等。

与数据库技术的历史发展类似,数据库的托管方式在过去几十年中也发生了很大变化。在网络发展的早期,每个人都必须在自己的物理服务器上运行数据库,EC2 和 Digital Ocean 使这变得更容易,但仍需要深入的技术理解来手动操作数据库。诸如 Heroku 的 Postgres 服务,AWS RDS 和 Mongo Atlas 等托管服务抽象出了许多复杂的细节,数据库管理变得更加简单,但底层模型仍然相同,需要开发人员提前配置计算容量。最新开发的无服务器数据库使开发人员无需担心基础架构,因为他们的数据库只需根据实际使用情况进行扩展和缩小以匹配当前负载,其中 Aurora Serverless 和 CosmosDB 就是一个突出的例子。

上一页
下一页