知识卡片
Unix与关系数据库的两种哲学,及CREATE INDEX与流处理的相似性
内容
数据库、Hadoop和操作系统在最抽象的层面做的是同一件事——存储数据、允许处理和查询它——但Unix和关系数据库走的是两条相反的哲学路线:Unix把自己定位为给程序员的一层相当低级的硬件逻辑抽象,管道和文件不过是字节序列;关系数据库则希望给应用开发者一层高级抽象,隐藏磁盘数据结构、并发、崩溃恢复的复杂性,靠SQL和事务来实现。哪种更好取决于你要什么:Unix”简单”是因为它是对硬件资源相当薄的一层包装;关系数据库”更简单”是因为一句简短的声明式查询就能调用一整套强大基础设施(查询优化、索引、连接算法、并发控制、复制),调用者无需理解实现细节——这两种哲学从70年代初诞生起就一直在博弈,作者把NoSQL运动解读为”把Unix式的低层抽象搬进分布式OLTP存储领域”的尝试。运行CREATE INDEX时数据库要做的事情——扫描表的一致性快照、挑出索引字段值排序、写出索引,再补上快照之后发生的写入、并持续保持更新——其实和[[MapReduce与HDFS无共享架构及计算贴近数据原则]]所属的设置新从库、以及流处理系统里CDC的初始快照引导过程高度相似:CREATE INDEX本质是数据库在重新处理现有数据集、把索引作为一个新视图导出到既有数据之上。
参考来源
- 位置:《数据密集型应用系统设计》第十二章《数据系统的未来》"分拆数据库""创建索引"(源文件:_epub-src/ch12_split_001.html)
- 结论依据:原文对比Unix低层硬件抽象哲学与关系数据库高层声明式抽象哲学的分歧,并说明CREATE INDEX的实现过程(扫描快照+补齐后续写入+持续维护)与设置新从库、CDC初始快照高度类似,直接支撑本卡片结论。
- 原始内容:Unix认为它的目的是为程序员提供一种相当低层次的硬件的逻辑抽象,而关系数据库则希望为应用程序员提供一种高层次的抽象……此过程非常类似于设置新的从库副本,也非常类似于流处理系统中的引导变更数据捕获。