元数据
七周七数据库
- 书名: 七周七数据库
- 作者: Eric Redmond Jim R.Wilson
- 简介: 如今,我们要面对和使用的数据正在变得越来越庞大和复杂。如果说数据是新的石油。那么数据库就是油田、炼油厂、钻井和油泵。作为一名现代的软件开发者,我们需要了解数据管理的新领域,既包括RDBMS,也包括NoSQL。 《七周七数据库》遵循《七周七语言》的写作风格和体例,带领你学习和了解当令最热门的开源数据库。在简单的介绍之后,《七周七数据库》分章介绍了7种数据库。这些数据库分别属于5种不同的数据库风格,但每种数据库都有自己保存数据和看待世界的方式。它们依次是PostgreSQL、Riak、Apache HBase、MongoDB、Apache CouchDB、Neo4J和Redis。《七周七数据库》将深入每一种数据库,介绍它们的优势和不足,以及如何选取一种最符合你的应用需求的数据库。 《七周七数据库》适合数据库架构师、数据库管理员,以及想要了解和学习各种NoSQL数据库技术的程序员阅读。《七周七数据库》将帮助读者了解、选择和应用这些数据库,从而更好地发挥日益增长的大数据的能力。
- 出版时间: 2013-07-01 00:00:00
- ISBN: 9787115312242
- 分类: 计算机-数据库
- 出版社: 人民邮电出版社
- PC地址:https://weread.qq.com/web/reader/2f2321f05b263b2f2ac6b91
高亮划线
第1章 概述
📌 关系数据库管理系统(Relational DataBase Management System,RDBMS)是以集合理论为基础的系统,实现为具有行和列的二维表。 ⏱ 2022-01-29 10:00:02
📌 文档就像是哈希,具有一个独一无二的标识符(ID)字段和值,值可能是任何类型,包括更多的哈希。文档可以包含嵌套的结构,因此,它们表现出了高度的灵活性,允许有可变域。 ⏱ 2022-01-29 10:03:15
📌 图数据库经常用在社交网络应用中,它们因灵活性而受到关注,Neo4j是其中的佼佼者。 ⏱ 2022-01-29 10:04:36
第2章 PostgreSQL
📌 称关系为表(TABLE),属性为列(COLUMN),元组为行(ROW) ⏱ 2022-01-29 10:27:21
📌 外联接是合并两张表的一种方式,不论另一张表中是否存在匹配的列值,第一张表的结果总是必须返回。 ⏱ 2022-01-29 10:43:12
📌 索引是一个特殊的数据结构,目的是避免执行查询时进行全表扫描。 ⏱ 2022-01-29 10:46:38
📌 窗口函数与GROUP BY查询是类似的,它们允许你对多行执行聚合函数。 ⏱ 2022-01-29 10:53:58
📌 我们倾向于认为PARTITION BY和GROUP BY类似,但它不会在SELECT属性列表之后,再对结果分组(从而将结果合并成较少的行),而是像其他所有字段一样返回分组的值(根据分组变量进行计算,但其他方面就是另一个属性) ⏱ 2022-01-29 10:55:29
📌 PostgreSQL的事务遵循ACID,它代表原子性(Atomic,所有的操作都成功或都没有做),一致性(Consistent,数据将始终处于完整的状态,没有不一致的状态),隔离性(Isolated,事务互相之间不干扰),以及持久性(Durable,即使在服务器崩溃以后,提交的事务都是安全的)。 ⏱ 2022-01-29 10:56:22
📌 存储过程可以通过巨大的架构代价来取得巨大的性能优势。使用存储过程可以避免将数千行数据发送到客户端应用程序,但也让应用程序代码与该数据库绑定,因此,不应该轻易决定使用存储过程。 ⏱ 2022-01-29 10:59:11
📌 除了PL/pgSQL,PostgreSQL还支持三种更核心的语言编写程序:Tcl、Perl和Python。 ⏱ 2022-01-29 11:02:37
📌 levenshtein是一个字符串比较算法,它能够计算一个字符串需要经过多少步才能变成另一个字符串,从而可以比较两个字符串的相似程度 ⏱ 2022-01-29 11:20:49
📌 EXPLAIN很重要,它可以确保按你希望方式使用索引。 ⏱ 2022-01-29 11:49:42
第3章 Riak
📌 Riak是一种分布式的键-值(key-value)数据库。 ⏱ 2022-01-29 11:57:05
📌 Riak的灵感正是来自于Amazon Dynamo的论文 ⏱ 2022-01-29 12:01:05
📌 CAP定理(一致性,可用性,分区容错性,Consistency,Availability,Partition tolerance) ⏱ 2022-01-29 18:20:11
📌 为法定数(quorum) ⏱ 2022-01-29 18:29:30
📌 向量时钟[插图]是像Riak这样的分布式系统所使用的令牌,用以理顺发生冲突的键值更新顺序,确保服务器上的数据正确有效。 ⏱ 2022-01-29 18:33:58
📌 向量时钟通过这种方式发挥作用——对每个键值事件(创建、更新或者删除)做标记,标记包含两项内容:哪个客户端更新了数据与以哪种顺序更新。在此基础上,客户端或者应用开发者,得以决定谁在冲突中胜出。 ⏱ 2022-01-29 18:34:38
📌 它利用了Amazon Dynamo论文的深刻观点——CAP可以在每个桶或者每个请求的基础上改变。 ⏱ 2022-01-29 19:27:31
第4章 HBase
📌 列按照列族(column family)进行分组,所以列的完全名称包含两个部分:列族名称和列限定符(column qualifier)。 ⏱ 2022-01-30 12:33:15
📌 。每个列族的性能选项是独立配置的。这些设置影响到读和写的速度,以及磁盘空间的占用。 ⏱ 2022-01-30 12:59:17
📌 HBase有一个值得一提的特点,即除了行键之外,它不提供任何索引功能。行是按行键排序来保存的,但其他字段没有这样的排序,如列名和值。所以,如果你希望不按行键来查找行,就需要扫描表,或自己维护索引。 ⏱ 2022-01-31 09:31:46
第5章 MongoDB
📌 MongoDB的长处在于多功能、强大、易于使用,而且既能完成大任务,也能完成小任务。 ⏱ 2022-01-31 09:32:47
📌 Mongo是一个JSON文档数据库(虽然在技术上数据是以二进制JSON的形式保存的,即所谓的BSON) ⏱ 2022-01-31 09:33:30
📌 与关系数据库不同,Mongo不支持服务器端的连接(Join)操作。 ⏱ 2022-01-31 09:36:28
📌 ObjectId总是12字节,由时间戳、客户端机器ID、客户端进程ID和3字节的增量计数器组成。图5-2展示了这些字节的布局。[插图]图5-2 ObjectId布局示例 ⏱ 2022-01-31 09:36:40
📌 这种自动计数设计的好处在于,每台机器上的每个进程都能够处理自己的ID生成,而不会与其他mongod实例发生冲突。这个设计选择提示了Mongo的分布式特征。 ⏱ 2022-01-31 09:40:19
📌 ,Mongo开发团队建议使用{ id : “reference_id” }这样的结构 ⏱ 2022-01-31 12:39:44
📌 Mongo有一个有用的内置特征 ⏱ 2022-01-31 12:50:42
📌 eval()在执行时会阻塞mongod,所以它主要适用于快速执行的命令和测试,而不是常见的产品过程。 ⏱ 2022-01-31 14:45:14
📌 文档数据库的独特之处在于,它们能够有效地处理任意嵌套的、无模式的数据文档。 ⏱ 2022-01-31 15:04:00
📌 Mongo在文档存储领域的独特之处在于,它能够在多台服务器上实现伸缩,对集合进行复制(复制数据到其他服务器)或分片(将一个集合分成几片),并行执行查询。复制和分片都提高了可用性。 ⏱ 2022-01-31 15:04:05
📌 地理空间查询的秘诀就在于索引。这是一种特殊形式的索引地理数据,名为geohash,不仅能在任意的查询中快速找到具体的值或范围,而且能快速找到附近的值。 ⏱ 2022-01-31 17:26:23
📌 Mongo的主要优势在于,它能够通过复制和横向伸缩,处理大量的数据(以及大量的请求)。但它还有另一项好处,即非常灵活的数据模型,因为不需要遵从某个模式,可以简单地嵌套任何值,而这在RDBMS中通常需要使用SQL进行联接。 ⏱ 2022-01-31 17:27:22
📌 Mongo鼓励反规范化的模式(没有任何模式) ⏱ 2022-01-31 17:27:50
📌 如果你习惯于ORM,目前正使用关系数据库来保存数据,Mongo是很好的选择。 ⏱ 2022-01-31 17:30:06
第6章 CouchDB
📌 CouchDB是基于JSON与REST的面向文档的数据库,且堪称该类型数据库的经典。 ⏱ 2022-01-31 17:30:41
📌 CouchDB是面向文档的,使用JSON作为其存储与通信的语言 ⏱ 2022-01-31 17:40:42
📌 CouchDB的调用都运行于REST接口之上 ⏱ 2022-01-31 17:40:47
📌 CouchDB会立刻给它分配另一个名为_rev的域。这个域会在每次文档变化时,获得新值。这个表示版本的字符串,格式为:整数 + ‘-’ + 唯一的伪随机数字符串。开头的整数就是版本——在此为1 ⏱ 2022-01-31 19:13:17
📌 为了修改已有记录,必须先将它读出,留意其_id与_rev。然后,提供完整的文档(包括_id与_rev),以此请求更新。 ⏱ 2022-01-31 19:13:44
📌 CouchDB,任何改动,无论多小,都会导致原本的整个文档被重写。 ⏱ 2022-01-31 20:29:38
📌 视图包含映射与规约函数,它们用于生成有序的键-值对列表。键或者值都可以是任何合法的JSON。 ⏱ 2022-01-31 20:30:56
📌 “rows”:[{ “id”:“74c7a8d2a8548c8b97da748f43000ac4”, “key”:“Help!”, “value”:{ “by”:“The Beatles”, “album”:{“title”:“Help!”,“year”:1965} } }] } 注意响应中的total_rows与offset域。total_rows域表示视图中记录的总数,不只是这个请求所返回的子集。offset域则告诉我们,在全部记录中,第一条记录出现位置。基于这两个数字,以及rows的长度,我们能够计算在视图中在该位置前后还有多少记录。 请求视图可以分为基于key参数的若干种方式,但要在实际操作中演示,我们需要更多数据。 ⏱ 2022-01-31 21:53:44
📌 CouchDB会增量地运行映射器与规约器,为更新的数据更正映射规约的中间结果。于是,CouchDB不会每次从头开始,重复每项计算 ⏱ 2022-01-31 22:42:09
第7章 Neo4j
📌 Neo4j是一种新型的NoSQL数据存储,称为图数据库。顾名思义,Neo4j将数据另存为图(数学意义上的图形)。 ⏱ 2022-01-31 22:44:54
📌 Neo4j的重点是数据间的关系,而非数据集合间的共性(比如,文档集合或者数据行组成的表) ⏱ 2022-01-31 22:45:04
📌 在Neo4j中,节点的概念与之类似;作为边之间的顶点,能够以键值(key-value)集合的形式存放数据。 ⏱ 2022-02-01 08:24:08
第8章 Redis
📌 Redis能存储列表、哈希表、集合和有序集合,这自然解释了它的受欢迎程度。 ⏱ 2022-02-01 12:52:26
📌 到期功能有助于避免总的键集无限增长,做法是安排Redis经过一定的时间就删除一个键-值对。 ⏱ 2022-02-01 14:10:46
📌 Redis提供了一个仅追加的文件(appendonly.aof),它保留了所有写命令的记录。这类似于我们在第4章中看到的预写入日志。如果值还未保存之前服务器崩溃,重新启动时会执行这些命令,恢复其状态;必须在redis.conf文件中将appendonly设置为yes来启用它。 ⏱ 2022-02-01 14:29:42
读书笔记
本书评论
书评 No.1
^15826765-7wKqd4RuA ⏱ 2022-02-01 17:53:50