TL;DR
有点旧,有些结论可能不适合现在的列存数据库了。
这篇文章讲的是,在面向读优化的数据库中,行存和列存的性能差异在什么地方,分别适合什么场景。
大概结论就是projection的列比例越低、selectivity越低、CPU相比于I/O的速度优势越大,列存的性能越有优势。
TL;DR
有点旧,有些结论可能不适合现在的列存数据库了。
这篇文章讲的是,在面向读优化的数据库中,行存和列存的性能差异在什么地方,分别适合什么场景。
大概结论就是projection的列比例越低、selectivity越低、CPU相比于I/O的速度优势越大,列存的性能越有优势。
原文:Integrating Compression and Execution in Column-Oriented Database Systems
可以与The design and implementation of modern column-oriented database systems对照阅读。
TL;DR
一篇略老(2006年)的paper,但很重要。
数据库中压缩算法的使用是非常影响性能的。这方面列存要比行存更有优势:每列排列在一起天然就适合压缩,而行存中相同列的值是被其它列隔开的。
这篇文章探讨的是,如何在列存数据库中使用压缩,以及不同压缩算法在不同场景中的比较。
TL;DR
TiDB是一个HTAP系统,目标是同时服务TP和AP服务,且能保证隔离性和数据新鲜度。它的架构受到了Spanner和F1的影响:计算层类似于F1,无状态;存储层类似于Spanner,支持分布式事务。
它的存储层分为了行存的TiKV和列存的TiFlash,其中TiKV各个replica之间通过Raft保持一致,TiFlash则作为Raft的learner保证看到最新的数据。相比Kudu,TiDB物理上分离了TP和AP,隔离性更好;相比F1-Lightning的基于CDC的replay,TiDB的新鲜度更好。
一些看法:
TL;DR
Snowflake是一个云原生的数据仓库。它的价值在于:
前2条参见最后一小节“Lessons Learnd and Outlook”。
第3条很有价值。(以下一堆马后炮)
之前做系统的startup的商业模式是做开源系统,然后卖license、技术支持。但云时代了,这条路不太好走,前途一眼可见。问题在哪:
国内做系统的startup很多也有这方面的问题,而且更严重,大客户要资质,小客户不花钱。估值上就能看出来,想达到独角兽要比做业务的公司难得多。
Snowflake选择了基于现成的云平台做第三方云服务商,做附加值。这个思路初看上去不太可行,云平台为什么不抄你的方案?但实际上云平台不是整体,它是由一个个独立的团队组成,互相有着说不清道不明的既合作又竞争的关系。而第三方相当于是每个团队的客户,是可以合作的。而且大公司人虽然多,但不养闲人,分摊到每个方向的人其实很少,尤其是这种要整合资源、探索新模式的工作,更是人嫌狗厌。这就是细分市场、垂直领域、小而精的团队的机会。
可以看到这几年各种startup都开始搞第三方服务了,这是Snowflake的最大的价值:让工程师先富起来。
这种模式国内的公司不太好学,因为国内的云平台通常没那么友善,有着足够多的焦虑的工程师,会抢走任何赚钱不赚钱的业务。那么要出海吗?问题在于出海的话你的优势在哪,国外的客户为什么要买一个中国公司的服务?甚至国内出海的客户也不见得更倾向中国公司提供的服务。
然而2020告诉我们的就是,一切都会变的。
TL;DR
Kudu是一种同时支持高效的随机读写与扫描的存储系统,是用来弥补Hadoop生态中HDFS与HBase的gap的。它的特点是:
Kudu应该也属于HTAP系统(或者更接近于HSAP),它的列存设计很棒。但这种使用Raft实现的多副本shard-nothing架构,计算和存储是耦合的,会给后面的扩展带来很多麻烦(比如怎么支持erasure coding)。
TL;DR
Impala是建立在Hadoop生态之上的MPP query engine,它有以下特点:
TL;DR
F1是Google用于替换分库分表的MySQL的RDBMS系统。它在Spanner之上建立了一套关系模型,拥有Spanner的跨datacenter的同步replication能力。F1还开发了新的ORM模型,从而将同步geo-replication导致的延时隐藏了起来,保证了E2E延时在替换后没有上升。
TL;DR
Spanner 是划时代的 OLTP 系统,它的创新点是:
Spanner 启发了很多后来者,但它的 TrueTime 是很难模仿的,后来者也通常使用 TSO 或 HLC 来代替,但这样就很难做到像 Spanner 一样跨越大洲部署仍然能提供合理的延时。
原文:Large-scale incremental processing using distributed transactions and notifications
TL;DR
Percolator是Google用于构建增量web索引的数据系统。它的价值在于提出了一种基于NoSQL(BigTable)的两阶段提交(2PC)实现。
Percolator的2PC实现有以下特点:
以上很多特点都是源于Percolator没有中心节点,也导致了它的2PC延时偏高(尤其是失败时),但优点是能适应巨大的规模。这也是Google系产品的一个特点,可以不那么快,但一定要支持巨大的规模。
Google系产品的第二个特点是很积极地使用已有产品来构建新系统,这里Percolator选择了基于BigTable来做,就体现了这一点。
这篇文章实际讲了Percolator的两块内容,一个是2PC,另一个是observer,一种可级联的触发器,但后者似乎没有太多关注。
原文:Dremel: a decade of interactive SQL analysis at web scale
TL;DR
这篇文章主要讲Dremel的核心思想和架构原则(参考2010年的paper),包括这些年Dremel的演进(作为BigQuery的后端),以及这些思想在同领域的其它系统中的异同。
在The Seattle Report on Database Research中提到了当前AP系统的若干发展趋势,其中本文重点提到的有: