数据库存储技术基础 字典编码
Posted 张英杰的个人博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库存储技术基础 字典编码相关的知识,希望对你有一定的参考价值。
说到数据库存储技术的基础,就要了解企业应用的数据特性以及面临的瓶颈。
1.企业应用的数据特性
- 事件产生数据
以快递追踪为例,信息读取过程包括当前读取操作的地点、时间戳、当前所处的业务流程(如收件、打包、运送)以及其他详细信息。当然,对网络游戏活动数据的分析就更为复杂。每个事件数据的数据集较小(Byte/KB)而每个实体可产生多个事件。
- 结构化/非结构化数据的结合
结构化数据有标准的格式存储即可被计算机自动处理。非结构化数据是不具有特定的数据解析模型,不能被计算机自动处理的数据,例如视频、图片与任何非结构化的文本信息。以患者数据为例,性别、年龄是结构化的,而病史、诊断数据是非结构化的。企业要对非结构化数据进行专项处理,以达到高效的搜索。
2.数据库的瓶颈
现代的企业偏向“数据导向”。企业要处理人与机器时时刻刻产生的大量数据来支撑决策,为此要将不同数据源的数据整合;企业要进行交互式决策,为此要对数据实时分析。数据传输的效率受限于CPU总线,而通过并行处理可超越总线速率。磁盘用于数据的备份和归档,不是线上服务性能的关注点。因此,内存的访问成为数据库的新瓶颈。
3.瓶颈的改善方法
当然,分库可以改善内存瓶颈,但改善瓶颈的本质是减少对内存的访问。我们应该尽可能减少数据的表示位数,这样既能减少内存占用又能减少内存的访问。同时,在执行访问时也要精打细算,只访问被用到的列。
减少数据表示位数的最基本思路就是字典编码,既简单又好用,也是编码列压缩技术的基础。
4.字典编码
字典编码以列为单元进行操作,通过简单的转换将不同的值替换为不同的整数值(短整数优先),将长文本值压缩为短整数值,因此并没有改变表的规模。通常情况下,企业数据的熵较低,即数据的重复度大,因此压缩效果较为理想。以性别列压缩为例:性别列仅包含两个值,若通过"m", "f"表示,那么需要1byte.假设全世界有70亿人口,那么需要70亿*1byte约为6.52GB. 如果使用字典压缩,1位足够表达相同信息,需要70亿)1bit=0.81GB, 其中字典需要2*1字节=2字节。压缩比例=未压缩大小/压缩大小约为8.
通常情况下,姓名、国家、生日等文本数据均可通过字典编码获得10~20倍的压缩比例。
5.排序字典
上述字典编码的全量扫描时间为O(n), 如过将字典加以排序,利用二分法的字典检索时间仅为O(lon(n)). 一般情况下,我们希望字典既精炼又冗余,因为这样的优化要付出代价:新字的加入导致字典重排序,若新字不在字典末尾,数据表也要更新,即新字后面的字所对应的值均要向后位移。因此,对于国家、生日等“可数可列”(可穷举)的列采用字典编码即可获得更好的查找速度,又几乎不会担心字典产生变动。
参考书籍
[1]. A Course in In-Memory Data Management: The Inner Mechanics of In-Memory Databases. Hasso Plattner. 2012
以上是关于数据库存储技术基础 字典编码的主要内容,如果未能解决你的问题,请参考以下文章