键-值存储
键-值数据库(Key–value database),或键-值存储,是设计用来存储、检索和管理关联数组的数据存储范式,关联数组是现今更常称为“字典”或散列表的一种数据结构。字典包含对对象或记录的一个收集,依次、记录内有多个不同的“域”或称字段,再次、每个字段都包含数据。这些记录使用唯一标识这个记录的“键”来存储和检索,键还用来在数据库中快速的找到数据。
概述
同更知名的关系数据库相比,键-值数据库以与之非常不同的方式工作。关系数据库把数据库中数据结构预定义为一系列的表,它们包含有着明确定义的数据类型的字段。这些数据类型暴露于数据库程序,从而允许它们应用某些优化。与之相对,键-值系统把数据当作一个单一的不透明的收集,对于每个记录都可以有不同的多个字段。这提供了可观的灵活性并更加紧密的遵循了现代概念如面向对象编程。不同于多数的关系数据库,由于不使用占位符或输入参数来表示可选值,键-值数据库经常比同等的关系数据库使用更少的内存。
多年以来性能问题、缺乏标准化和其他一些问题限制了键-值系统的市场份额,然而2010年后向云计算的快速转移,导致它作为更广阔的NoSQL运动的一部分而复兴了。一些图数据库内部使用了键-值数据库,增加了在记录之间联系(指针)的概念,并把它作为一等数据类型。
类型和著名例子
键-值数据库可以使用的一致性模型,范围包括从结果一致性到可序列化。有的支持有序的键。有的在内存内维持数据,而另一些采用固态硬盘或旋转硬盘。
依据数据库引擎排名[1],在2019年5月时,Redis是最流行的键-值数据库实现。
另一个键-值数据库的例子是Oracle NoSQL Database。Oracle NoSQL 数据库向应用开发者提供了键-值范式。每个实体(记录)都是键-值对的一个集合。键有多个成员,并指定为有序列表。主键标识了这个实体,并构成了这个键的前导成员。后续成员叫做次键。这种组织类似于在文件系统中的目录路径规定(例如:/Major/minor1/minor2/)。键-值对的“值”部分简单的就是不加解释的任意长度的字符串[2]。
Unix系统提供了dbm(数据库管理器),它是最初由Ken Thompson写的一个库。它的Windows操作系统平台移植,是通过了编程语言比如Perl for Win32而提供的。dbm通过单一的键(主键)来管理任意数据的关联数组。现代实现包括sdbm和GNU dbm。
提供者 | 许可证 | 结果一致性 | 有序 | RAM |
---|---|---|---|---|
Aerospike | AGPL | 是 | ||
Apache Ignite | AL2 | 是 | ||
ArangoDB | AL2 | 是 | ||
Berkeley DB | AGPL, 专有软件 | 是 | ||
CDB | free | |||
Clusterpoint Database Server | 专有 | |||
Couchbase Server | 专有 | |||
Dynamo | 专有 | 是 | ||
etcd | AL2 | |||
FoundationDB | AL2 | 是 | ||
XAP | 专有 | 是 | ||
GridGain Systems | 专有 | 是 | ||
GT.M[3] | AGPL, 专有软件 | |||
Hazelcast | AL2, 专有软件 | 是 | ||
Hibari | AL2 | |||
IBM Informix C-ISAM | 专有 | 是 | ||
InfinityDB | 专有 | 是 | ||
Keyspace | 专有 | |||
LevelDB | BSD3 | |||
LMDB | free (页面存档备份,存于互联网档案馆) | 是 | ||
memcached | BSD3 | 是 | ||
MemcacheDB | BSD | 是 | ||
NoSQLz | free | |||
Coherence | 专有 | 是 | ||
Oracle NoSQL Database | AL2, 专有软件 | 是 | ||
Pika | BSD-3 | 是 | ||
Project Voldemort | AL2 | 是 | ||
Redis | BSD3 | 是 | ||
Riak[4] | AL2 | 是 | ||
RocksDB | AL2 or GPL 2 | |||
Tarantool | BSD | 是 | ||
Tokyo Cabinet and Kyoto Cabinet | GPL | |||
OpenLink Virtuoso | GPLv2, 专有软件 | 是 | 是 |
引用
- ^ DB-Engines Ranking. DB-Engines. [2019-05-14]. (原始内容存档于2018-12-20).
- ^ "Oracle NoSQL Database" (PDF). [2019-05-14]. (原始内容 (PDF)存档于2017-08-09).
- ^ Tweed, Rob; James, George. A Universal NoSQL Engine, Using a Tried and Tested Technology (PDF): 25. 2010 [2019-05-14]. (原始内容 (PDF)存档于2021-02-25).
Without exception, the most successful and well-known of the NoSQL databases have been developed from scratch, all within just the last few years. Strangely, it seems that nobody looked around to see whether there were any existing, successfully implemented database technologies that could have provided a sound foundation for meeting Web-scale demands. Had they done so, they might have discovered two products, GT.M and Caché.....*
- ^ Riak: An Open Source Scalable Data Store. 28 November 2010 [28 November 2010]. (原始内容存档于31 December 2010).