key-valuedatabases通常,检索应用程序数据只需要主键甚至部分键。键/值数据库可以被认为是一个非常大的哈希表,它在唯一键下存储一些值。存储的值可以通过键或部分键高效地检索。因为值对数据库是不透明的,如果需要按值查找记录,需要一条一条扫描。键/值数据库中的键可以包含多个元素,甚至可以进行排序以提高查询效率。一些键/值数据库允许使用键前缀进行查找,从而允许使用复合键。如果可以通过一些简单的键嵌套来查询数据,那么键/值数据库将是一个不错的选择。例如,如果我们将客户xyz的订单存储在一个key/value数据库中,我们可以将客户ID作为key的前缀,与订单号组合成key“xyz-1001”来存储订单。您可以使用整个键来检索特定订单,也可以使用“xyz”前缀来检索客户xyz的所有订单。说明:键/值数据库通常是廉价且高度可扩展的数据存储。键/值数据库能够根据键对数据进行分区甚至重新分区。在使用键/值数据库时,键的选择很重要,因为它会对数据存储的大小和读写性能产生重大影响。02文档数据库文档数据库类似于键/值数据库,它也是按主键存储文档(值)。与键/值数据库不同,在键/值数据库中,文档需要符合一些明确定义的结构,键/值数据库几乎可以存储任意值。这使文档数据库能够启用维护二级索引和基于文档查询数据等功能。通常存储在文档数据库中的值是哈希图(JSON对象)和列表(JSON数组)的组合。JSON格式通常用于文档数据库,尽管许多数据库引擎使用更高效的内部存储格式,例如MongoDB的BSON。建议:当您从关系数据库切换到基于文档的数据库时,您需要考虑如何组织您的数据。许多人需要时间来过渡到这种不同的数据建模方法。大多数存储在传统关系数据库(如PostgreSQL)中的数据也可以存储在文档数据库中。它们变得越来越流行,并且与关系数据库不同,这些存储的文档可以很好地映射到编程语言中的对象,并且不需要对象关系映射(ORM)工具。这些数据库通常不强制定义数据模式,这对于需要在软件持续交付(CD)过程中更新数据模式的情况具有一些优势。说明:不要求定义模式的数据库通常称为“读取时模式”,因为尽管数据库不强制执行模式,但在使用数据的应用程序中有一个固有模式,并且需要知道如何翻译阅读。到数据。03关系数据库关系数据库将数据组织成称为表的二维结构,表由列和行组成。一个表中的数据可以与另一个表中的数据相关联,数据库系统可以保证这种关联。关系数据库通常执行严格的模式,也称为“写入模式”,其中写入数据库的数据必须符合数据库中定义的结构。关系数据库已经存在很长时间了,许多开发人员都有使用它们的经验。到目前为止,最流行和最常用的数据库仍然是关系数据库。这些数据库已经足够成熟,可以处理具有大量关系的数据,并且拥有一个知道如何使用它们的工具和应用程序的大型生态系统。多对多关系在文档数据库中很难使用,但在关系数据库中却很容易。如果应用程序的数据有很多关系,尤其是需要事务处理时,这些数据库可能是合适的。04图数据库图数据库存储两类信息:边和节点。边定义节点之间的关系,您可以将节点视为实体。节点和边都具有属性,这些属性存储有关节点或边的一些信息。边通常定义关系的方向或性质。图数据库擅长分析实体之间的关系。图数据也可以存储在任何其他数据库中,但是当图的遍历越来越复杂时,其他类型的存储可能难以满足图数据的性能和可扩展性要求。05列族数据库列族数据库将数据组织成行和列,乍一看与关系数据库非常相似。您可以将列族数据库视为由行和列组成的表格数据,但列被分组为称为列族的组。每个列族都包含一组逻辑相关的列,这些列通常作为一个单元进行检索或操作。可以单独访问的数据可以存储在单独的列族中。在一个列族内,可以动态添加新的列,行可以是稀疏的(即行不需要在每一列下都有值)。06时间序列数据库时间序列数据库是时间优化的数据库,它存储基于时间的值。这些数据库通常需要支持大量的写操作。它们通常用于从大量数据源实时收集大量数据。这些数据很少更新,删除操作通常是批量进行的。写入时序数据库的记录通常很少,但记录量很大。时间序列数据库非常适合存储遥测数据。流行的用途包括物联网(IoT)传感器或应用程序/系统的计数器。时间序列数据库通常提供数据保留、下采样以及根据数据使用模式将数据保存到其他存储的配置等功能。07搜索引擎搜索引擎数据库通常用于搜索保存在其他存储和服务中的数据。搜索引擎数据库可以索引大量数据并提供接近实时的索引查询。除了搜索网页等非结构化数据外,许多应用程序还使用它为其他数据库中的数据提供结构化和即时搜索功能。一些数据库还提供全文索引,但搜索数据库也有能力通过词干提取和泛化将词归结为词根。
