数据库存储技术基础(一) 字典编码
2016-04-03 15:12
239 查看
说到数据库存储技术的基础,就要了解企业应用的数据特性以及面临的瓶颈。
[b]1.企业应用的数据特性[/b]
事件产生数据
以快递追踪为例,信息读取过程包括当前读取操作的地点、时间戳、当前所处的业务流程(如收件、打包、运送)以及其他详细信息。当然,对网络游戏活动数据的分析就更为复杂。每个事件数据的数据集较小(Byte/KB)而每个实体可产生多个事件。
结构化/非结构化数据的结合
结构化数据有标准的格式存储即可被计算机自动处理。非结构化数据是不具有特定的数据解析模型,不能被计算机自动处理的数据,例如视频、图片与任何非结构化的文本信息。以患者数据为例,性别、年龄是结构化的,而病史、诊断数据是非结构化的。企业要对非结构化数据进行专项处理,以达到高效的搜索。
2.数据库的瓶颈
现代的企业偏向“数据导向”。企业要处理人与机器时时刻刻产生的大量数据来支撑决策,为此要将不同数据源的数据整合;企业要进行交互式决策,为此要对数据实时分析。数据传输的效率受限于CPU总线,而通过并行处理可超越总线速率。磁盘用于数据的备份和归档,不是线上服务性能的关注点。因此,内存的访问成为数据库的新瓶颈。
[b]3.瓶颈的改善方法[/b]
当然,分库可以改善内存瓶颈,但改善瓶颈的本质是减少对内存的访问。我们应该尽可能减少数据的表示位数,这样既能减少内存占用又能减少内存的访问。同时,在执行访问时也要精打细算,只访问被用到的列。
减少数据表示位数的最基本思路就是字典编码,既简单又好用,也是编码列压缩技术的基础。
[b]4.字典编码[/b]
字典编码以列为单元进行操作,通过简单的转换将不同的值替换为不同的整数值(短整数优先),将长文本值压缩为短整数值,因此并没有改变表的规模。通常情况下,企业数据的熵较低,即数据的重复度大,因此压缩效果较为理想。以性别列压缩为例:性别列仅包含两个值,若通过"m", "f"表示,那么需要1byte.假设全世界有70亿人口,那么需要70亿*1byte约为6.52GB. 如果使用字典压缩,1位足够表达相同信息,需要70亿)1bit=0.81GB, 其中字典需要2*1字节=2字节。压缩比例=未压缩大小/压缩大小约为8.
通常情况下,姓名、国家、生日等文本数据均可通过字典编码获得10~20倍的压缩比例。
[b]5.排序字典[/b]
上述字典编码的全量扫描时间为O(n), 如过将字典加以排序,利用二分法的字典检索时间仅为O(lon(n)). 一般情况下,我们希望字典既精炼又冗余,因为这样的优化要付出代价:新字的加入导致字典重排序,若新字不在字典末尾,数据表也要更新,即新字后面的字所对应的值均要向后位移。因此,对于国家、生日等“可数可列”(可穷举)的列采用字典编码即可获得更好的查找速度,又几乎不会担心字典产生变动。
参考书籍
[1]. A Course in In-Memory Data Management: The Inner Mechanics of In-Memory Databases. Hasso Plattner. 2012
[b]1.企业应用的数据特性[/b]
事件产生数据
以快递追踪为例,信息读取过程包括当前读取操作的地点、时间戳、当前所处的业务流程(如收件、打包、运送)以及其他详细信息。当然,对网络游戏活动数据的分析就更为复杂。每个事件数据的数据集较小(Byte/KB)而每个实体可产生多个事件。
结构化/非结构化数据的结合
结构化数据有标准的格式存储即可被计算机自动处理。非结构化数据是不具有特定的数据解析模型,不能被计算机自动处理的数据,例如视频、图片与任何非结构化的文本信息。以患者数据为例,性别、年龄是结构化的,而病史、诊断数据是非结构化的。企业要对非结构化数据进行专项处理,以达到高效的搜索。
2.数据库的瓶颈
现代的企业偏向“数据导向”。企业要处理人与机器时时刻刻产生的大量数据来支撑决策,为此要将不同数据源的数据整合;企业要进行交互式决策,为此要对数据实时分析。数据传输的效率受限于CPU总线,而通过并行处理可超越总线速率。磁盘用于数据的备份和归档,不是线上服务性能的关注点。因此,内存的访问成为数据库的新瓶颈。
[b]3.瓶颈的改善方法[/b]
当然,分库可以改善内存瓶颈,但改善瓶颈的本质是减少对内存的访问。我们应该尽可能减少数据的表示位数,这样既能减少内存占用又能减少内存的访问。同时,在执行访问时也要精打细算,只访问被用到的列。
减少数据表示位数的最基本思路就是字典编码,既简单又好用,也是编码列压缩技术的基础。
[b]4.字典编码[/b]
字典编码以列为单元进行操作,通过简单的转换将不同的值替换为不同的整数值(短整数优先),将长文本值压缩为短整数值,因此并没有改变表的规模。通常情况下,企业数据的熵较低,即数据的重复度大,因此压缩效果较为理想。以性别列压缩为例:性别列仅包含两个值,若通过"m", "f"表示,那么需要1byte.假设全世界有70亿人口,那么需要70亿*1byte约为6.52GB. 如果使用字典压缩,1位足够表达相同信息,需要70亿)1bit=0.81GB, 其中字典需要2*1字节=2字节。压缩比例=未压缩大小/压缩大小约为8.
通常情况下,姓名、国家、生日等文本数据均可通过字典编码获得10~20倍的压缩比例。
[b]5.排序字典[/b]
上述字典编码的全量扫描时间为O(n), 如过将字典加以排序,利用二分法的字典检索时间仅为O(lon(n)). 一般情况下,我们希望字典既精炼又冗余,因为这样的优化要付出代价:新字的加入导致字典重排序,若新字不在字典末尾,数据表也要更新,即新字后面的字所对应的值均要向后位移。因此,对于国家、生日等“可数可列”(可穷举)的列采用字典编码即可获得更好的查找速度,又几乎不会担心字典产生变动。
参考书籍
[1]. A Course in In-Memory Data Management: The Inner Mechanics of In-Memory Databases. Hasso Plattner. 2012
相关文章推荐
- wordpress-4.4.1 数据库表结构解析
- mysql_insert_id
- 3、plsql程序相关笔记
- sqlPlus命令相关
- Mysql载入大量数据(load data infile)的优化过程
- 2、SQL语句笔记
- 使用datagrateview控件时,显示数据库中表的信息
- 系统重装后恢复MySQL数据库文件
- Oracle Outline总结
- 理解MySQL——索引与优化
- java中使用MongoDB
- ORACLE导出存储过程SQL至文件
- 从关系型数据库到非关系型数据库
- mysql 新增用户并设置权限
- SQL SERVER 2008 R2数据库出现“远程过程调用失败”(0x800706be)错误,怎么办!!
- 使用Oracle11g自带的SQL Developer报错:Unable to find a Java Virtual Machine
- mysql的key和index
- 2. SQL 语句本身的优化(慢查询)
- mysql-5.7.11-winx64.zip安装
- 监控redis进程,如果没有自动重启