红色有角F叔对《Designing Data-Intensive Applications》的笔记(4)

Designing Data-Intensive Applications
  • 书名: Designing Data-Intensive Applications
  • 作者: Martin Kleppmann
  • 副标题: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
  • 页数: 614
  • 出版社: O'Reilly Media
  • 出版年: 2017-4-2
  • Chapter 5: Replication
    The major difference between a thing that might go wrong and a thing that cannot possiblly go wrong is that when a thing that cannot possibly go wrong goes wrong it ususally turns out to be impossible to get at or repair. - Douglas Adams, Mostly Harmless(1992)
    2018-05-13 10:27:28 回应
  • Chapter 7: Transactions
    Lost update: Two clients concurrently perform a read-modify-write cycle. One overwrites the other's write without incorporating its changes, so data is lost. Some implementations of snapshot isolation prevent this anomaly automatically, while others require a manual lock(SELECT FOR UPDATE).
    Write skew: A transaction reads something, makes a decision based on the value it saw, and writes the decision to the database. However, by the time the write is made, the premise of the decision is no longer true. Only Serializable isolation prevents this anomaly.

    2018-05-13 10:33:34 回应
  • Chapter 7: Transactions - Two Phase Locking
    Preducate locks
    It works similarity to the shared/exclusive lock described earlier, but rather than belonging to a particular object (.e.g one row in), it belongs to all objects that match some search condition, such as:
    SELECT * FROM bookings WHERE room_id = 123 AND end_time > '2018-01-01 12:00' AND start_time < '2018-01-01 13:00'
    ..
    If transaction A wants to insert, update,or delete any object, it must check whether either the old or the new value matches any existing predicate lock.

    事务 A 想插入、更新、删除对象时,必须遍历所有活跃 predicate lock 检查是不是匹配这些 predicate,如果存在,则等待对应的锁。

    遍历所有活跃 predicate lock 并做检查的开销巨大。应该没人真的用它。

    Index-range locks
    Unfortunately, predicate locks do not perform well: if there are many locks by active transaction, checking for matching locks becoms time-consuming. For that reason, most databases with 2PL actually implement index-range locking (also known as next-key locking), which is a simplified approximation of predicate locking.
    an approxinmation of the search condition is attached to one of the indexes. Now, if anohter transaction wants to insert, update, or delete a booking for the same room and/or an overlapping time period, it will have to update the same part of the index. In the process of doing so, it will encounter the shared lock, and it will be forced to wait until the lock is released.

    之前一直没弄明白 next-key lock 为什么上在索引上,如果换一个索引访问数据不就没有保护到了吗?这里的 point 是,在更新、插入、删除复合查询条件的数据时,必须要更新这条数据 *全部* 的索引,要更新索引就得拿到索引上的 next-key lock。next-key lock 保护一个查询条件在事务中不发生 phantom。

    next key lock 上锁到索引上的坑是:SELECT .. FOR UPDATE / UPDATE / DELETE 要是写出来一个全表扫描的查询条件,会怎么办?

    2018-05-13 10:51:20 回应
  • Chapter 7: Transactions - Serializable Snapshot Isolation (SSI)
    SSI is fairly new: it was first described in 2008 [40] and is the subject of Michael Cahill's PhD thesis. ... it has the possibility of being fast enough to become the enw default in the future.

    Detecting writes that affect prior reads (the write occurs after the read).

    SI 只跟踪活跃的写集合,而 SSI 需要跟踪活跃的读集合。commit 时冲突探测,判断事务的写操作是否影响到其他事务的读集合,如果影响到,那些事务的 premise 就认为已经不再成立了,那些事务如果只读便没问题,但是如果有写操作就会 abort。只是这时你仍不知道那些事务是不是只读的。

    In the context of two-phased locking we discussed index-range locks. .. Wee can use a similar technique here, except that SSI don't block other transactions.
    When a transaction writes to the database, it must look in the indexes for any other transactions that have recently read the affected data. This process is similar to acquiring a write lock on the affected key range, but rather than blocking until the readers have committed, the lock acts s a tripwire: it simply notifies the transactions that the data they read may no longer be up to date.

    冲突探测的原理与 next-key lock 相似。

    2018-05-13 11:11:48 1人喜欢 回应

红色有角F叔的其他笔记  · · · · · ·  ( 全部654条 )

注定一战
1
美国反对美国
1
哲学·科学·常识
1
计算机组成(第 6 版)
2
图解TCP/IP(第5版)
1
沸腾十五年
2
重新理解创业
8
雄性衰落
3
股市真规则
1
资本和收入的性质
2
存在主义是一种人道主义
3
程序员的职业素养
1
何为良好生活
1
活出生命的意义
3
货币的教训
3
Docker——容器与容器云(第2版)
2
政治的人生
4
中国巨债
3
深入浅出React和Redux
5
历史的教训
4
聪明的投资者
8
投资中最简单的事
5
供给的逻辑
1
逃不开的经济周期
1
图解服务器端网络架构
1
斯坦福极简经济学
3
政治的逻辑
4
原则
5
大数据之路
1
在苍茫中传灯
4
巴菲特传(纪念版)
1
中产阶级如何保护自己的财富
1
指数基金投资指南
4
模式分类
2
深度学习
1
我看电商
2
数据挖掘导论
1
中国国家治理的制度逻辑
2
漫步华尔街
2
尽在双11:阿里巴巴技术演进与超越
2
共同基金常识
3
企业IT架构转型之道:阿里巴巴中台战略思想与架构实战
6
未来简史
2
MySQL DBA修炼之道
1
大国大城
2
计算广告
4
机器学习
1
集体智慧编程
1
重新定义公司
1
Hadoop应用架构
1
第二性
6
硅谷钢铁侠
1
大数据
5
经营的本质
1
人人都是产品经理
7
你凭什么做好互联网
4
Spark机器学习
2
聊聊架构
8
游戏引擎架构
1
美国大城市的死与生(纪念版)
5
给大家看的Photoshop讲座
1
技术的本质
5
我们房地产这些年
2
行动的勇气
2
合作的进化
5
马克斯·韦伯与德国政治:1890—1920
6
数据库索引设计与优化
1
精益企业
7
高可用MySQL
2
发布!软件的设计与部署
2
项目管理艺术
2
右派国家
5
现实感
4
领域驱动设计
11
从0到1
1
高效程序员的45个习惯
1
可扩展的艺术
3
空之境界 上
1
成为技术领导者
1
改革的逻辑
3
修改代码的艺术
9
恰如其分的软件架构
7
软件开发者路线图
3
实现领域驱动设计
1
21世纪资本论
9
持续交付
16
构建之法
6
黑格尔导论
19
极端的年代
1
微服务设计
10
Site Reliability Engineering
5
测试驱动的面向对象软件开发
3
城市的胜利
2
对知识的恐惧
5
ZeroMQ
6
现代经济学主要流派
7
数学之美
2
程序员的思维修炼
1
大教堂与集市
1
一切坚固的东西都烟消云散了
5
兜售繁荣
1
数据科学与工程技术丛书
1
政治的细节(第10版)
8
发展研究指南(第二版)
2
代码大全(第2版)
2
企业应用架构模式
9
The Datacenter as a Computer
3
无情的革命
6
新教伦理与资本主义精神
3
人类简史
7
Understanding MySQL Internals
2
他改变了中国
1
态度改变与社会影响
4
复杂
2
民主新论
19
人件
2
国家的常识
4
乌合之众
3
Web Operations
2
个人印象
4
湖上闲思录
2
自由及其背叛
7
C++语言的设计与演化
8
百年中国经济史笔记
1
改变
4
创新与企业家精神
5
Cassandra
3
不敢止步
4
意志力
2
通向财务自由之路
1
制造同意
6
美国种族简史
4
NoSQL Distilled
4
理解专业程序员
2
一个自由主义者的良知
4
政治经济学要义
2
施瓦辛格健身全书
2
房地产的繁荣与萧条
5
为学十六法
2
Akka in Action
1
Java虚拟机并发编程
3
软件工艺
3
面向模式的软件架构,卷3
1
动物精神
4
非理性繁荣
10
MongoDB权威指南
2
海量数据库解决方案
1
Erlang/OTP并发编程实战
1
学术与政治
12
Java并发编程实战
16
论中国
3
金融炼金术
4
多处理器编程的艺术
1
Effective java 中文版(第2版)
1
中國近代史(下冊)
6
系统之美
6
压力下的角逐
2
古代东方史
1
Go 语言程序设计
1
Remote
1
深入Linux内核架构
2
中國近代史(上冊)
3
隐秩序
1
空之境界(上下集合售)
1
开放社会
4
中国近代史八种
5
喀提林阴谋 朱古达战争
1
政治秩序的起源
5
现代性的后果
2
失去的胜利
9
了不起的盖茨比
5
许倬云说历史:台湾四百年
2
大规模分布式存储系统
1
C++网络编程(卷1)
2
在约定的场所
1
中国的宗教
2
了不起的盖茨比
1
希腊罗马名人传(全三册)
2
自私的基因
2
学龠
1
中国政治思想史
4
列克星敦的幽灵
1
人月神话
2
现代体系结构上的UNIX系统
1
虚拟机
2
朱熹的历史世界
1