oracle压缩和mysql压缩_几种主流数据库的压缩技术对比

压缩功能几乎是当前主流数据库的标配功能,除了能够节省存储空间外,在IO密集型的系统中, 可能也会带来性能的提升。由于我们的存储引擎也需要做记录级压缩的功能,所以很长的一段时间都在研究数据库压缩的技术,包括算法的选型及优化,当然这之前要对现有主流数据库的压缩功能做一些调研。 资料的来源比较分散,有手册,论文,也有其他的网络资料, 所以也未一一标出出处,如有疑问,欢迎提出。

DB2中行级压缩的特性

在DB2中引入了一种叫Venom的技术,是基于字典的压缩方法。其中字典存储在一个内部数据结构中,并缓存起来以提高查询的速度(Thedictionary for compression/decompression lookup is stored in hiddenobjects in the database, occupies little space, and is cached in memoryfor quick access)。

DB2会有算法检测如果对记录进行压缩是否会带来空间的节约,如果不节约就不进行压缩,估计是对部分数据进行采样获得(When compressinga large table, it may be useful to populate the table with a small setof "representative" or sample datafirst.)。对于新加入的记录,还是继续沿用老的采样获得的字典,但是提供REORG命令供重组字典并重新压缩。

DB2采用的是不同于Oracle的全局字典,而不是页内建字典(By building a compression dictionaryat the table rather than page level, patterns across the entire tableare analyzed, generally resulting in improved disk savings with DB2.)

DB2中缓存在Buffer中的数据也是压缩格式的(Furthermore, DB2 keeps the data compressed onboth disk and memory (DB2 buffer pools), thereby reducing the amount ofmemory consumed, and freeing it up for other database or systemoperations.),这样实现即使每次从内存中读取记录都要解压缩一次。

写入日志的记录数据也进行了压缩(Thesize of database logs can also be reduced since DB2 compresses userdata within logrecords.)。

Oracle 11g中行级压缩的特性:

Oracle 11g引入的行级压缩是发生在数据块内的,每一个数据块内建有一个symbol表,相当于压缩字典。 在缓存中数据是以压缩形式存在,这跟DB2是类似的, 可以增加缓存命中率, 减少IO从而提高性能。

发生更新,插入,删除操作的时候,通过一个阀值控制是否进行压缩。

使用ALTER TABLE在线更改表模式指定压缩时只对后面新插入的记录生效,原有记录不会被压缩(You can alter thecompression attribute for a table (or a partition or tablespace), andthe change only applies to new data going into thattable)。但是可以通过命令把原纪录也变成压缩格式(Existing data in the database can also becompressed by moving it into compressed form through ALTER TABLE andMOVE statements.)。

对读操作没有性能影响,但是对写操作应该有一些影响,Oracle通过批处理解决(Oracle compresses blocks in batch mode rather than compressing dataevery time a write operation takesplace.),即当新初始化的块中插入的记录达到一定阀值后才进行压缩,继续往这一个块中插入记录,那么都会进行重新压缩以达到更高的压缩比,这一步骤会重复直到检测到再进行重新压缩已经没什么好处了才会不再进行。

Oracle的段内压缩比较适合用于更新比较少的应用,更适合OLAP而不适合OLTP,频繁地更新可能会带来比不压缩更多的空间浪费,因为频繁地更新可能会导致记录的迁移。

falcon中压缩的特性:

如果某一列设了默认值,则不会在列中存储默认值。

buffer中缓存的是非压缩的完整记录;

记录压缩,准确地说应该是编码,是采用一种密集的自描述结构,Nulls, zero length strings, and numbers -10 to 31只用一个字节表示;其他整型,取决于大小,可能需要1-8位的类型描述,所有的整型统一编码;

using only as many bytes for integer as it requires, not storing column value if it is default

关于falcon中的数据压缩包括官方文档在内的资料中介绍得很少,事实上其功能应该相对比较简单,压缩比也不大,Jim Starkey本人称其为'encoding',而不是'compression'。

SQL Server 2008压缩特性

SQL Server似乎是2008之后才引入的压缩的功能,是采用行级压缩和页级压缩相结合的方法。其中行级压缩主要针对整型以及char类型。将对所有数据类型的 NULL 和 0 值进行优化,从而使它们不占用任何字节。

减少了与记录相关联的元数据开销。此元数据为有关列、列长度和偏移量的信息。在某些情况下,元数据开销可能大于旧的存储格式。

对于数值类型(例如,integer、decimal 和 float)和基于数值的类型(例如,datetime 和 money)使用可变长度存储格式。

通过使用不存储空字符的可变长度格式来存储定长字符串(删除尾随字符串)。

页级压缩是先采用前缀压缩,再采用字典压缩;在页中添加新纪录时不会马上进行页压缩,只有当页满且有新记录插入时才进行页压缩;

数据不是以固定大小的字节进行存储,而是用最小所需的字节,只需要启用行压缩功能就可以执行。但是,行压缩无法处理XML、BLOB和MAX数据类型;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件开发商及电信营运商共同研发改良。 Android操作系统的特点包括: 开放源代码:Android系统采用开放源代码模式,允许开发者自由访问、修改和定制操作系统,这促进了技术的创新和发展,使得Android系统具有高度的灵活性和可定制性。 多任务处理:Android允许用户同时运行多个应用程序,并且可以轻松地在不同应用程序之间切换,提高了效率和便利性。 丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板电脑、智能电视、汽车导航系统等。 此外,Android系统还有一些常见的问题,如应用崩溃、电池耗电过快、Wi-Fi连接问题、存储空间不足、更新问题等。针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也在不断提升。例如,最新的Android版本引入了更多的安全性和隐私保护功能,以及更流畅的用户界面和更强大的性能。此外,Android系统也在不断探索新的应用场景,如智能家居、虚拟现实、人工智能等领域。 总之,Android系统是一种功能强大、灵活可定制、拥有丰富应用生态系统的移动操作系统,在全球范围内拥有广泛的用户基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值