Products
GG网络技术分享 2026-01-18 14:55 1
在开始介绍系统设计之前,让我们先来kankan我们要解决的问题:数据系统的目的在于什么? 什么是数据? 在我们考虑CAP定理之前,我们必须给出一个可yi适用于suo有数据应用程序的定义来回答上述问题,我给跪了。。
本文将挑战你对数据系统如何构建这一问题的假设, tong过颠覆传统数据系统构建方法, 没耳听。 我会让大家kan到一个前所未见的优雅、 性强、健壮的数据系统。

这里只有hen少数的情况需要永久“删除”数据, 比方说规则要求你每隔一段时间清掉数据,这个情况在我将要展示的系统中有hen好的解决方案,suo以为了简洁,我们暂不考虑这些情况。
guan与“数据”有两个关键的性质。先说说数据是跟时间相关的,一个真实的数据一定是在某个时间点存在于那儿。比如 假如Sally在她的社交网络个人资料中写她住在芝加哥,你拿到的这个数据肯定是她某个时间在芝加哥填写的。 搞起来。 假如某天Sally把她资料里面居住地点geng新为亚特兰大, 那么她肯定在这个时候是住在亚特兰大的,但她住在亚特兰大的事实无法改变她曾经住在芝加哥这个事实——这两个数据dou是真实的。
如guo你选择一致性而不是可用性, 那么跟以前并没有多大的区别,主要原因是你放弃了可用性, 挽救一下。 suo以一些时候你将无法读取huo者写入数据。当然这只是针对对强一致性有要求的系统。
不堪入目。 一致性是指施行了一次成功的写操作之后未来的读操作一定可yi读到这个写入的值。可用性是指过 分区容错性是不Neng牺牲的,suo以呢只Neng在一致性和可用性上Zuo取舍,如何处理这种取舍正是目前NoSQL数据库的核心焦点。
我们先从“数据”开始。所谓数据就是一个不可分割的单位,它肯定存在就跟数学里面的公理一样,说到点子上了。。
其实吧, 还有一个办法:你并不Neng避开CAP定理,但可yi把复杂的问题独立出来免得你丧失对整个系统的掌控Neng力。CAP定理带来的复杂性,其实是我们如何构建数据系统这一根本问题的体现。 说起来... 其中有两点特bie重要:数据库中可变状态和geng新状态的增量算法。复杂性正是这两点和CAP定理之间的相互作用导致的。
本文将tong过一个数据库系统的设计,来说明如何解决CAP定理通常会造成的复杂性问题。但我要Zuo的不仅仅如此, CAP定理是一个针对机器发生错误时系统容错性的一个定理,而这里有比机器容错性geng加重要的容错性——人为操作容错性。在软件开发中一个确定的事实是 开发人员dou并非完人,产品中难免有一些Bug,我们的系统必须对有Bug的程序写入的错误数据有足够的适应Neng力,我要展示的系统将是这样一个可yi容忍人为错误的系统,拭目以待。。
栓Q了... 选择可用性放弃一致性。这种情况下Zui好的一致性保障是“到头来一致性”。当使用到头来一致性的系统时客户端有时会读到与刚刚写入数据不同的数据。有时候,同一时间同一个key的多个请求有可Neng返回不同的后来啊。数据geng新并不Neng及时在suo有的复制节点上生效,suo以不同的复制节点上可Neng读取到的是不同的值。当你检测到数据不一致性时 你需要进行修复操作,这就需要使用矢量时钟记录数据的版本历史并合并不同的数据geng新。
之前的复杂度主要来自增量geng新操作和CAP定理之间的矛盾,在到头来一致性系统中可变的值需要tong过读取修复来保证到头来一致性。tong过使用不可变数据,去掉增量geng新,使用不可变数据,每次从原始数据计算查询,你可yi规避那些复杂的问题。CAP定理就被打败了,也是没谁了。。
概括了数据库和数据系统的suo有领域。每一个领域——有50年历史的RDBMS、 索引、OLAP、OLTP、MapReduce、EFL、分布式文件系统、流处理器、NoSQL等——dou可yi被概括进这个方程,栓Q了...。
我去掉了“geng新”操作,主要原因是geng新dui与不可改变的数据没有ren何作用。比方说geng新Sally的位置信息本质上就是在她住的地方数据中新加一条Zui近的位置信息而Yi,ICU你。。
CAP定理指出, 一个数据库不可Neng一边满足一致性、可用性和分区容错性。
所谓数据系统就是要回答数据集问题的系统,这些问题我们称之为“查询”。上面的方程表明,查询就是数据上的一个函数,PTSD了...。
功力不足。 我相信在应用层维护到头来一致性对开发人员负担太重, 开发人员极易弄错读取修复的代码,而一旦开发人员犯错,有问题的读取修复将对数据库系统造成不可逆的损坏。
完善一下。 这里的关键一个数据只有存在huo者不存在两种情况。这里只有数据和在数据之上的函数。这里没有需要你为确保到头来一致性额外Zuo的事情,到头来一致性也不会suo以呢使你的系统变得复杂。
这个方程里面有两个关键概念:数据、查询。这两个wan全不同的概念经常被混为一谈,suo以下面来kankan这两个概念究竟是什么意思。
计算查询Zui简单的办法就是按照查询语义在整个数据集上运行一个函数。如guo这可yi满足你对延迟的要求,那么就没有其他需要构建的了。
我同样去掉了“删除”操作,主要原因是绝大部分删除操作可yigeng好地表述为新加一条数据。比如Bob在Twitter上不再关注Mary了这并不Neng改变他曾经关注过Mary这个事实。 你看啊... suo以与其删除Bob关注Mary这个数据,还不如新加一条Bob在某个时间点不再关注Mary这个数据。
由于查询是suo有数据的一个函数,让查询变快的Zui简单的方法就是预先计算好这些查询。只要这里有新的数据,你就重新计算这些查询。这是可Neng的,主要原因是我们放宽了条件使得我们的数据可yi滞后几个小时。图1展示了这个工作流程,这是可以说的吗?。
当然现在讲的只不过是想法而Yi,而且每次从原始数据计算查询大体上不可Neng。 杀疯了! 但我们从中可yi学到一些在实际解决方案中的关键点。
前面我Yi经定义查询是整个数据集合上的函数, 当然不是suo有的查询dou需要整个数据集,它们只需要数据集的一个子集。但我的定义是涵盖了suo有的查询类型,如guo想要“打败”CAP定理,我们需要Neng够处理suo有的查询。
数据应用程序种类hen多, 包括存入和提取数据对象、连接、聚合、流处理、机器学习等。似乎并不存在一个对数据系统的明确定义,数据处理的多样性使得我们hen难用一个定义来描述,太虐了。。
这玩意儿... “打败”CAP定理, 让数据系统既一致又可用,似乎是件不可Neng的事,但tong过以上的方案,我们可yikan到,tong过巧妙的设计,数据系统的设计可yi有新的突破。
标签:网站建设网站制作CAP定理
Demand feedback