很长一段时间都是用有道云笔记,没有进行分享,才发现原来回头看看过去的笔记有时可以少走错误,最近会将笔记中的内容逐渐整理处理出来。
最近借了很多书,就从书摘总结开始吧。
今天介绍的这本书是《七周七数据库》
它们分别是关系数据库 Postgres
两个键-值 存储数据库 Riak和Redis
一个面向列数据库 HBase
两个面向文档的数据库 MongoDB和CouchDB
一个图数据库Neo4j
一、关系型数据库
Relational DataBase Management System, RDBMS
这部分的代表是 MySQL、H2、HSQLDB、SQLite、PostgreSQL
以集合理论为基础,实现具有行和列的二维表,与RDBMS交互的标准方法是使用结构化查询语言(Structured Query Language,SQL)编写查询,
它的数据值类型有:
数字、字符串、日期、未解释的二进制对象或其它类型
表可以联接并转化为新的更复杂的表。
数据的基础是集合理论。
二、键值数据库
Key-Value KV
顾名思义,KV存储库将键与值配对,类似于所有流行编程语言中的映射,或哈希表,如果你将文件的路径视为键而将文件内容视为值,文件系统也可以看成是键-值存储库。
比如Riak,不仅仅是一个键-值 存储库,它从一开始就支持HTTP和REST等Web方式,实现亚马逊Dynamo原理。关于Dynamo是什么,读者可以见:
Amazon的架构是一个完全的分布式去中心化的,存储也做到了分布式:
http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf
Dynamo: Amazon’s Highly Available Key-value Store
Riak
Riak的值可以是任何内容,从纯文本到XML到图像数据,键之间的关系由link命名结构处理,它是第一个通过mapreduce支持高级查询的数据库。
Redis
Redis提供复杂的数据类型,如有序集合和哈希,以及基本消息模式,它是查询机制最健壮的KV存储库之一。在写入磁盘之前先写入内存缓存,因此性能惊人,
代价是在出现硬件故障的情况下,增加了数据丢失的风险,因此适用于缓存非关键数据,或作为消息代理。
三、列型数据库
三种最流行的是HBase、Casandra、Hypertable
列型数据库将给定的列放在一起,添加列很简单,并且是逐行完成的,每一行可以有不同的列或完全没有。
允许表是稀疏的,不会产生空值得存储成本
HBase
在所有非关系数据库中,这个面向列的数据库与关系模型最为相似,简历在Hadoop上,其设计目标是在常用硬件的集群上横向伸缩,支持版本控制盒压缩,
在“大数据”世界上,显得与众不同。
四、文档型数据库
它存储的就是文档,文档如同哈希,具有独一无二的标识符ID字段和值,值可以是任何类型,包括更多的哈希,文档可以包含嵌套的结构。
MongoDB
Mongo是从单词Humongous中提取的,Humongous就是巨大无比的意思。它的设计目标是支持巨大的数据,提供一些原子读写操作(如递增一个值)
利用JavaScript作为查询语言,支持简单的查询和复杂的mapreduce工作。
CouchDB
目标是各种部署场景,从数据中心到桌面到智能手机,用Erlang编写(可见《七周七语言》),它的数据文件几乎不可摧毁,原生查询语言为JavaScript,
视图包括mapreduce函数。
五、图数据库
目前最流行的图数据库Neo4j
图数据库善于处理高度互联的数据,包含节点及节点之间的关系,节点和关系可以有一些属性,用来存储数据,图数据库真正实力是按照关系遍历节点,
图数据库经常用在社交网络应用中,它们应灵活性而受到关注
总结,目前使用单一的数据库仍然很常见,但是随着时间推移,流失的做法是同时使用几种数据库,利用它们各自的长处。
任何一种特定策略的数据库都不可能大获全胜,在未来,我们将看到越来越多的专用数据库