北京--西三旗,雨天。。。在周末休息之余也不要忘记学习呀,嘻嘻~
冲冲冲
--关系数据库--
关系数据库管理系统是以集合理论为基础的系统,,实现为具有行和列的二维表。与RDBMS交互的标准方法,是用结构化查询语句编写查询,数据值具有类型,可以是数字、字符串/日期/未解释的二进制大对象,或其他类型。系统强制使用类型。重要的是,表可以联接并转化为新的、更复杂的表,因为它们的数学基础是关系(集合)理论。
--键-值数据库--
KV存储库将键与值配对,类似与所有流行编程语言种的映射(或哈希表)。某些KV实现允许复杂的值类型,如哈希或列表,但这不是必需。一些KV实现提供了一种迭代遍历键的方式,但这也是额外的好处。如果你将文件的路径视为键而将文件内容作为值,文件系统也可以看成是键-值存储库。因为KV存储库对资源的要求非常少,所以这种数据库类型在一些场景中有令人难以置信的高性能。,但是当你有复杂的查询和聚合需求,它一般不会有帮助。
KV的开源存储库有:memcached、Voldemort,以及我们在本书中介绍的两个产品:Redis 和 Riak。
1、Raik
支持HTTP和REST等Web方式。它严格实现了亚马逊的Dynamo的原理,具有一些高级功能,如解决冲突的向量时钟。Riak中的值可以是任何内容,从纯文本到XML到图像数据,而键之键的关系由称为链接(link) 的命名结构处理。Riak是本书中知名度较小的数据库,但它越来越受欢迎,在我们将要讨论的数据库中,它是第一个通过mapreduce支持高级查询的数据库。
2、Redis
Redis提供复杂的数据库类型,如有序集合和哈希,以及基本消息模式,如发布-订阅和阻塞队列。它是查询机制最健壮的KV存储库之一。再写入磁盘之前先写入内存缓存,Redis因此获得了惊人的性能,代价是在出现硬件故障的情况下,增加了数据丢失的风险。这一特性使得它适合用于缓存非关键字,或作为消息代理。(第8章介绍),以便可以用Redis与其他数据库配合,构建多数据应用。
--列型数据库--
又名:面向列的数据库,即来自一个给定的列(在二维表的意义上)的数据存放在一起。相比之下,面向行的数据库(如RDBMS),将一行的信息保存在一起。这种差异看起来似乎无关紧要,但实际上这种设计决策的影响很深。在面向列的数据库中,添加列是相当简易的,而且是逐行完成的。每一行可以有一组不同的列,或完全没有,允许表保持稀疏(sparse),而不会产生空值的存储成本。在结构方面,列表数据库大约介于关系数据库和键-值数据库之间。
--文档型数据库--
面向文档的数据库存储的就是文档,简而言之,文档就像哈希,具有一个独一无二的标识符(ID)字段和值,值可能是任何类型,包括更多的哈希。文档可以包含嵌套的结构,因此,它们表现出了高度的灵活性,允许有可变域。该系统对输入的数据很少有限制,只要它满足基本要求,可以表示为一个文档。在建索引、自由定义的查询,复制、一致性及其他设计决策等方面,不同的文档数据库采取了不同方法,需要了解这些差异,及其对特定使用场景的影响,才能在它们之间做出明智地选择。
--图数据库-- Neo4j
《《混合使用多种数据
在实际环境中,各种数据库经常一起使用。使用单一的关系数据库仍然很常见,但随着时间的推移,流行的做法是同时使用几种数据库,利用它们各自的长处,创建一个生态系统,比其各部分的功能总和更强大、更全面、更健壮。这种做法叫做多持久并存(PolyglotPersistence).
第一天//关系、CRUD和联接
Postgres:::
服务进程默认监听5432端口,可以用psql这个命令行工具连接。
关系代数和SQL
元组关系演算和SQL
》使用表
标识符成为主键(PRIMARY KEY)。
创建 countries 表的SQL语句如下所示:
CREATE TAABLE countries (
country_code char(2) PRIMARY KEY,
country_name text UNIQUE
);
这张新表将存储一些行,其中每一行由两个字节的国家代码作为标识,国家名也是唯一的。这两列都有约束,主键约束country_code 列不允许有重复的国家代码,所以只有一个us和一个gb 可以存在表中,尽管counttry_name不是主键,但是明确地给予country_name类似的唯一性约束。可以用如下语句插入几行来填充这张counties表。
让我们来测试一下唯一性约束,如果尝试添加包含重复的country_name 的行,就会因为唯一性约束而不允许插入,约束是PostgreSQL这样的关系数据库用来确保数据完整的方法。