NoSQL 和关系数据库之间有什么区别?
Azure Cosmos DB 的特征是非关系型且可水平缩放。
横向缩放与纵向缩放
关系数据库通常通过增加承载它的虚拟机 (VM) 或计算的大小来增加大小。 可以通过添加更多服务器或节点来扩展 Azure Cosmos DB 等 NoSQL 数据库。 这称为横向扩展。这些节点也称为 Cosmos DB 中的物理分区。 需要对存储在这些物理分区上的数据进行组织,以便后续可以对其进行高效访问。
通过使用每个文档上所需属性的值,将数据路由到不同的物理分区。 此属性称为容器的分区键,创建容器时需要指定此分区键。 在向容器写入或读取数据时传送分区键可确保仅将请求定向到存储数据的分区,从而确保操作高效。
尽管对分区键的需求似乎是一种约束,但它具有一些巨大的优势。 通常,关系数据库最多可能会增长到 100 TB 以下。 NoSQL 数据库可以增长到无限大小,并且在从任何单个分区访问数据时不会对响应时间产生任何影响。
此外,随着分区的增加,计算量也会增加,并且数据库支持的处理量也会同时增加。 这意味着它也可以支持更多并发用户。 并且对性能没有影响。
无关系数据库与关系数据库
NoSQL 数据库的第二个定义特征是数据段之间没有外键、约束或任何类型的强制关系。 由于 NoSQL 数据库中的数据存储在不同的物理服务器上,因此强制约束或关系或对数据设置锁定会对性能产生负面影响或不可预测的影响。
但是,没有强制关系并不意味着无法管理 NoSQL 数据库中具有关系的实体,它只是意味着需要以不同方式执行。
为什么这些数据库类型的差异如此大?
了解自首次引入关系数据库以来计算的成本变化有助于说明这两类数据库的差异如此大的原因。
1970 年发明关系数据库时,存储和内存的成本相对于计算而言较高。 规范化数据库模型旨在减少重复数据,从而降低数据库内产生的成本。 数据库引擎将应用锁和闩锁来强制执行严格的 ACID(原子性、一致性、隔离性、持久性)语义,因为它同时对所有需要的数据片段执行操作。 数据锁定确保了数据一致,但需要在并发性、延迟和可用性方面进行权衡。
如今,与计算相比,存储和内存的成本相对较低,因此,为了经济高效,我们不再需要优化存储效率。 由于工作负载需要更高级别的并发性和可用性以及更低的延迟,因此需要一种针对这些需求进行优化的新型数据库,NoSQL 数据库应运而生。
也正是出于这些原因,为 NoSQL 数据库建模数据的目标之一是以确保读取或写入数据具有计算效率的方式进行建模。 部分原因是 NoSQL 数据库中不存在跨文档联接等关系运算符,因此在应用程序使用数据时必须存储该数据,这样数据才能最高效。 通常需要对数据进行非规范化、复制或以其他方式存储,该方式会破坏用于关系数据建模的许多关系规范化规则。
是否可以将 NoSQL 用于关系工作负载?
此时,你可能想知道 NoSQL 数据库是否适合用于关系工作负载。 答案是肯定的! NoSQL 数据库绝对可以用于不同实体之间存在关系的工作负载。
当关系数据库无法满足应用程序所需的性能、规模或可用性需求时,通常会使用 NoSQL 数据库。
NoSQL 数据库的设计方法不同于关系数据库数据的建模方法。 对于具有关系数据库设计背景的人来说,这些技术也不直观。 设计 NoSQL 数据库时,你了解的用于构建关系数据库的最佳做法通常是反模式。
对于本模块的其余部分和高级建模模块,我们将逐步介绍用于以生成高性能 NoSQL 数据库的方式对数据进行建模的技术。