键值存储
你可以通过这种数据库将键值对存储到持久化存储中,随后使用键来读取值。那么对于这种初看起来用途非常有限的解决方案来说有哪些好处呢?在根据键来保存/读取值时,系统是非常高效的,因为它没有SQL处理器、索引系统以及分析系统等诸多限制。这种解决方案提供了最高效的性能,代价最低的实现以及可伸缩性。
优点:
RDBMS太慢了,SQL游标的负担过于沉重。
采用RDBMS的解决方案来存储少量数据的代价有些大。
没必要使用SQL查询、索引、触发器、存储过程、临时表、表单以及视图等等。
由于其轻量级的设计,键值数据库可以很容易实现可伸缩性以及高性能。
缺点:
关系型数据库的限制可以从底层就确保数据的完整性,而键值存储就没有这些限制,数据的完整性是由应用来控制的。在这种情况下,数据的完整性可能会由于应用代码的错误而做一些妥协。
在RDBMS中,如果模型设计良好,那么数据库的逻辑结构就能完全反映出存储数据的结构,并且与应用的结构有所不同(数据是独立于应用的)。对于键值存储来说,要想取得这种效果是非常困难的事情。
典型代表:
Amazon DynamoDB
Riak
Redis
LevelDB
Scalaris
MemcacheDB
Kyoto Cabinet
文档存储
文档存储指的是用于存储、搜索与管理面向文档的信息(半结构化数据)的程序,其中心概念就是文档。具体的面向文档数据库的实现是不同的,不过总的来说,他们都会以各种标准化格式对数据(文档)进行封装与加密,主要格式有XML、YAML、JSON、BSON、PDF等等。
优点:
足够灵活的查询语言。
易于水平扩展。
缺点:
在很多时候原子性是得不到保障的。
典型代表:
MongoDB
Couchbase
CouchDB
RethinkDB