diff --git a/log-what-every-software-engineer-should-know-about-real-time-datas-unifying/README.md b/log-what-every-software-engineer-should-know-about-real-time-datas-unifying/README.md index 03d07a7..a6c1ccc 100644 --- a/log-what-every-software-engineer-should-know-about-real-time-datas-unifying/README.md +++ b/log-what-every-software-engineer-should-know-about-real-time-datas-unifying/README.md @@ -53,7 +53,7 @@ PS: - [第一部分:日志是什么?](part1-what-is-a-log.md) 1. [数据库中的日志](part1-what-is-a-log.md#数据库中的日志) 1. [分布式系统中的日志](part1-what-is-a-log.md#分布式系统中的日志) - 1. [变更日志101:表与事件的二相性(`duality`)](part1-what-is-a-log.md#变更日志101表与事件的二相性duality) + 1. [变更日志101:表与事件的二象性(`duality`)](part1-what-is-a-log.md#变更日志101表与事件的二象性duality) 1. [接下来的内容](part1-what-is-a-log.md#接下来的内容) - [第二部分:数据集成](part2-data-integration.md) 1. [数据集成:两个难题](part2-data-integration.md#数据集成两个难题) diff --git a/log-what-every-software-engineer-should-know-about-real-time-datas-unifying/part1-what-is-a-log.md b/log-what-every-software-engineer-should-know-about-real-time-datas-unifying/part1-what-is-a-log.md index 2137c73..f01d76f 100644 --- a/log-what-every-software-engineer-should-know-about-real-time-datas-unifying/part1-what-is-a-log.md +++ b/log-what-every-software-engineer-should-know-about-real-time-datas-unifying/part1-what-is-a-log.md @@ -3,7 +3,7 @@ 1. [数据库中的日志](#数据库中的日志) 1. [分布式系统中的日志](#分布式系统中的日志) -1. [变更日志101:表与事件的二相性(`duality`)](#变更日志101表与事件的二相性duality) +1. [变更日志101:表与事件的二象性(`duality`)](#变更日志101表与事件的二象性duality) 1. [接下来的内容](#接下来的内容) 日志可能是一种最简单的不能再简单的存储抽象,只能追加、按照时间完全有序(`totally-ordered`)的记录序列。日志看起来的样子: @@ -113,10 +113,10 @@ 比如使用线性探测的杂音哈希(`the murmur hash with linear probing`)还是某个变种。 日志将成为一种大众化的接口,可以有多种竞争的算法和实现,以提供最好的保证和最佳的性能。 -变更日志101:表与事件的二相性(`duality`) +变更日志101:表与事件的二象性(`duality`) ------------------------- -让我们继续聊一下数据库。变更日志 和 表之间有着迷人的二相性。 +让我们继续聊一下数据库。变更日志 和 表之间有着迷人的二象性。 日志类似借贷清单和银行处理流水,而数据库表则是当前账户的余额。如果有变更日志,你就可以应用这些变更生成数据表并得到当前状态。 表记录的是每条数据的最后状态(日志的一个特定时间点)。 可以认识到日志是更基本的数据结构:日志除了可用来创建原表,也可以用来创建各类衍生表。 @@ -126,7 +126,7 @@ 这个过程也是可逆的:如果你对一张表进行更新,你可以记录这些变更,并把所有更新的『变更日志(`changelog`)』发布到表的状态信息中。 这些变更日志正是你所需要的支持准实时的复制。 -基于此,你就可以清楚的理解表与事件的二相性: 表支持了静态数据,而日志记录了变更。日志的魅力就在于它是变更的_完整_记录,它不仅仅包含了表的最终版本的内容, +基于此,你就可以清楚的理解表与事件的二象性: 表支持了静态数据,而日志记录了变更。日志的魅力就在于它是变更的_完整_记录,它不仅仅包含了表的最终版本的内容, 而且可以用于重建任何存在过其它版本。事实上,日志可以看作是表**_每个_**历史状态的一系列备份。 这可能会让你想到源代码的版本控制(`source code version control`)。源码控制和数据库之间有着密切的关系。 diff --git a/log-what-every-software-engineer-should-know-about-real-time-datas-unifying/part3-logs-and-real-time-stream-processing.md b/log-what-every-software-engineer-should-know-about-real-time-datas-unifying/part3-logs-and-real-time-stream-processing.md index 3415345..f3965b3 100644 --- a/log-what-every-software-engineer-should-know-about-real-time-datas-unifying/part3-logs-and-real-time-stream-processing.md +++ b/log-what-every-software-engineer-should-know-about-real-time-datas-unifying/part3-logs-and-real-time-stream-processing.md @@ -131,7 +131,7 @@ 如何才能即支持像处理流程一样分片又支持像『表』一样的存储呢? -回顾一下关于表和日志二相性的讨论。它正好提供了把流转换成与这里我们处理中所需的表的工具,同时也是一个解决表的容错的处理机制。 +回顾一下关于表和日志二象性的讨论。它正好提供了把流转换成与这里我们处理中所需的表的工具,同时也是一个解决表的容错的处理机制。 流处理器可以把它的状态保存在本地的『表』或『索引』中 —— [`bdb`](http://www.oracle.com/technetwork/products/berkeleydb)、[`leveldb`](https://code.google.com/p/leveldb) 甚至是些更不常见的组件,如[`Lucene`](http://lucene.apache.org/) 或[`fastbit`](https://sdm.lbl.gov/fastbit)索引。