数据系统读写权衡的一知半解

在计算机领域,有一个有趣的趋势,往系统中写入数据需要做更多的工作。我们需要对数据进行重新组织、合并、重新建立数据库索引等操作,才能使写入的内容更加有用。如果不这样做,必须实现内容搜索或其他工作来支持未来的数据读取。

数据库中的索引

我关系数据库的索引是个有趣而令人困惑的概念,索引如何在对应用程序透明的情况下优化访问的呢?当然,更新索引意味着另外的磁盘访问,因为 b + 树的索引不适合放在内存中。如果以后读取数据,那么对数据库进行更改的额外工作是值得的。

下一个令人困惑的问题是,应该编制多少索引?是否应该对每一列都建立索引?什么时候应该把一列数据编入索引?我索引越多,读取查询就会变得越快。同时,索引越多,数据更新的速度就越慢。

这是一个常见的权衡方案,快速读意味着慢速写。

行存储与列存储

将高性能更新与行存储联系起来是很自然的,如果按列组织数据的话,因为具有相同值的许多逻辑行在物理上彼此相近,柱状数据库执行查询的速度非常快。但是,更新列存储就不那么容易了。

通常,行存储中的更新单独保存,因为每一行的数据较小,查询会以相对快速的方式检查行。这些查询与更快的列存储的结果相结合,以提供统一的准确结果。新的行存储更新会定期与列存储合并,以创建新的列存储,这可以以类似于 LSM 树中合并的级联方式完成。

当插入到一个列存储区中时,这种重写和整合新数据的负担是一种写入数据放大的形式,在这种形式下,一次写入之后会变成更多的写入。

LSM树的应用

LSM树最早是在1996年提出的,这个想法是将对键值存储的更改作为事务跟踪,并在内存中保留新的值。事务提交时,可以将最近键值对的排序集合写入磁盘中唯一命名的文件。此文件包含已排序的键值对以及文件中键的索引。一旦写入磁盘,新提交的更改不需要保存在内存中。

逐键查找值看起来就像在随机地点找东西时的样子。在一个小房间里线性搜索自己的钱包可能是易于处理,但是当搜索空间在大型酒店里就不那么容易了。为了减少数据读取时的烦琐,LSM 树组织数据的方法是边读边重写。

当从存储引擎新写入一个新文件时,它有一堆键值对。为了便于查找键,这些键与前面编写的文件合并。每个 LSM 树都具有某种形式的扇出,其中较低级别的树保存在更多的文件中。LSM 树的深度取决于扇出、每个文件的大小以及树中键值对的数量。一般来说,大部分存储都位于树的最底层。

因此,在越来越受欢迎的 LSM 结构中,有各种各样的实现选择:

平衡合并

当一个新文件被添加到一个级别时,在循环遍历中选择下一个文件,并将其与下一个级别的文件合并。假设从10个文件中选择一个扇出,会发现文件中的键范围通常涵盖了下面级别中大约10个文件中的键范围。把11个文件合并在一起,一个下降到下个级别,进而得到11个文件。现在,下一级已经被一个文件增加了,所以需要重复并再次合并。

分层合并

在进行合并之前,让一堆文件在每个级别上堆叠起来。假设在每个级别合并之前堆积了10个文件,大大减少了所需的合并数量。

平衡合并有着很大的写入放大, 每次将一个新的键值对写入到级别0,在每个级别上都要重写10到11次,但是读取数据的成本较少。分层合并的写入放大要低得多,因为新文件在合并之前会在每个级别上堆叠起来,所以合并的次数会减少,写入的内容也会减少,但是数据读取所付出的努力要多得多。

索引和搜索

搜索在许多方面都是数据库索引的变体。在数据库中,索引标识一般以行 id 或主键的形式隐藏在数据库中。在关系型数据库系统中,索引更新是通过事务集成的,我们能够看到性能差异。

搜索系统在处理文档方面有些不同。大多数搜索系统在文档发生变更后异步更新搜索索引, 这是与某种形式的ID交织在一起。搜索使得读取文档更加容易。它极大地降低了数据读取时的成本,而创建和合并搜索索引是一项复杂的工作,也是数据写入放大的一种形式。

搜索的索引需要语料库,以找到最近写入或更新的文档。其中每一个都需要有一个标识符,然后需要对其进行处理以定位搜索条件(有时称为 n-grams,https://en.wikipedia.org/wiki/n-gram)。在一个典型的文档中找到这些 n-gram 中的每一个元素都需要发送到包含许多索引元素的索引器。因此,文档标识符与可搜索文档中的每个术语(或 n-gram)相关联,所有这一切都是因为用户进行了写操作或创建了文档。每个文档都需要做大量的工作,而且还有很多很多的文档。

数据的规范化

在关系数据库的世界里,一般要在数据库中保存规范化数据,努力避免更新异常被认为是极其重要的。大多数系统的分布式趋势在增强,其中大多数都有包含其数据的键值对,这些键值对是为了扩展分片使用的。通过将相关数据分组为一个键值对,很容易获取这个值 ,然后发出请求到远程系统。

如果规范化这个大型分片系统中的数据,规范化的值将可能不会在同一个分片上,执行分布式联接比执行集中式联接更加烦人。

为了解决这个问题,一般在数据上加上版本号,方案虽然并不完美,但比起分布式通信或者跨非规范化数据进行大规模更新,它的挑战性要小得多。大规模的分布式系统对一致读的语义施加了很大的压力,这反过来可以被看作是写入放大和读读成本之间的紧张关系。

一句话小结

随着分布式系统的普遍化,数据系统的读写权衡越来越关键,辨认系统中数据读写的使用模式,才能进行设计上的权衡和优化。

(0)

相关推荐

  • MySQL数据库的事务及存储引擎

    一.关系型数据库与非关系型数据库 1.关系型数据库的特点: 1)数据以表格的形式出现 2)每行为各种记录名称 3)每列为记录名称所对应的数据域 4)许多的行和列组成一张表单 5)若干的表单组成数据库 ...

  • 从0开始:500行代码实现 LSM 数据库

    前言 LSM-Tree 是很多 NoSQL 数据库引擎的底层实现,例如 LevelDB,Hbase 等.本文基于<数据密集型应用系统设计>中对 LSM-Tree 数据库的设计思路,结合代码 ...

  • MySQL高级部分理论知识细讲

    文章目录 一.数据库分区.分表.分库.分片 YesOk ,大家好 ,我是小刘,许久不见,甚是想念 ,小刘今天来带大家学习 分库分表的基础知识 1.1 单机数据库的瓶颈 单个表数据量越大,读写锁,插入操 ...

  • 什么是MongoDB?简介、架构、功能和示例 | MongoDB中文社区

    什么是MongoDB? 什么是MongoDB?MongoDB是一个面向文档的NoSQL数据库,用于大容量数据存储.MongoDB是2000年代中期出现的一个数据库,属于NoSQL数据库. 在这个教学大 ...

  • 数据库有哪些类型?如何根据应用场景选择?终于有人讲明白了

    引言 如今,数据作为生产要素重要性已不言而喻,数据能力成为企业必不可少的核心能力之一,作为企业数字化转型重要的一环,我们依然迫切需要数据库来帮助存储和操作这些数据,充分有效地管理和利用各类数据资产.数 ...

  • 【中大放射住培系列讲座】乳腺X线影像报告和数据系统(第五版)BI-RADS

    编辑/校对 查俊豪 ---科室介绍--- 东南大学附属中大医院放射科现已成为国家重点临床专科.国家临床教学培训示范中心.国家级住院医师规范化培训基地.科技部重点领域创新团队.江苏省重点学科.江苏省医学 ...

  • 【读写吧】怀念吃过“派饭”的人

    继承传统  阅读写作 编辑书签 在新中国的建设史上,曾经有过这么一批人,他们代表党和政府,以工作队的方式,进驻农村乡镇,一边参加劳动,一边指导当地党建工作.由于当时的条件限制,他们总是一家一户地吃&q ...

  • 【读写吧】这样给孩子改作文(1)

    批改手记 原文:<最美逆行者>(附后) 作者:王梓鉴(5年级) 修改后:<2020年的爷爷>(附后) ◎为什么把题目改成了<2020年的爷爷>? 答:原文题目是&l ...

  • 【读写吧】和妈妈要蛋糕的孩子

    本期语录 控制与被控制是和谐共存的自然法则,而由于能力不足导致的方向性控制错误是危险的.它不亚于一场肆意蔓延的新冠病毒,侵蚀肌体,危及民生. --七月 ◎本期语录 ◎如此作文 ◎初中生作文欣赏 如此作 ...

  • 【读写吧】一篇和你有关的演讲稿

    ◎本期语录 ◎批改手记 ◎作家作品 ◎本期语录 投机取巧,欺世盗名,自以为高人一筹的攫取,这些都与几千年的优秀传统格格不入,其占有的利益也好,光环也罢,仅仅是一时满足的低级趣味,留下的是一块永不开封的 ...

  • 【读写吧】你欺骗了谁的善良

    ◎本期语录 ◎作家作品 ◎中学生作文 ◎小学生作文 ◎本期语录 勤学如春起之苗,不见其增,日有所长:辍学如磨刀之石,不见其损,日有所亏. --陶渊明 ◎作家作品 你欺骗了谁的善良 你很厉害 轻而易举地 ...

  • 【读写吧】一个数学老师和N个人的对话

    ◎本期语录 思考作用于学习.生活与工作,也作用于视野与修行. --七月 ◎本期语录 ◎数学老师和家长的对话 ◎数学老师和学生的对话 ◎数学老师和语文老师的对话 ◎小学生作文 ◎中学生作文 ◎作家作品 ...

  • 【读写吧·专刊】清明时节雨纷纷

    泪水不仅仅是伤痛,是缅怀,是纪念,是一场分割幸运的哭诉. --七月 在雨纷纷的时节,尽情地哭诉吧 七月 一觉醒来,宝宝不见了,床榻上还洋溢着庚子年春晚的温馨. 我问厨房,宝宝去哪儿了?绿色的葱花告诉我 ...

  • 【读写吧】教育需要一个知足的家长

    知足了,就有了赞赏的基础,而赞赏绝对是进步的动力. --七月 ◎版本:部编版语文3年级下册第一单元 ◎内容:以"我的植物朋友"为题的小练笔 洋绣球 迁安/魏瑶(3年级) 春天暖和了 ...