好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

解剖SQLSERVER第十二篇OrcaMDF行压缩支持(译)

解剖 SQLSERVER 第十二篇 OrcaMDF 行 压缩 支持 (译) http://improve.dk/orcamdf-row-compression-support/ 在这两个月的断断续续的开发工作中,我终于将OrcaMDF 压缩 功能分支合并到主分支 这意味着OrcaMDF 现在正式 支持 数据行 压缩 功能 支持 的数据类

解剖 SQLSERVER 第十二篇 OrcaMDF 行 压缩 支持 (译)

http://improve.dk/orcamdf-row-compression-support/


在这两个月的断断续续的开发工作中,我终于将OrcaMDF 压缩 功能分支合并到主分支
这意味着OrcaMDF 现在正式 支持 数据行 压缩 功能


支持 的数据类型
实现行 压缩 需要我修改几乎所有已实现的数据类型以将他们作为 压缩 存储。integer类型被 压缩 了,decimal类型
变成可变长度,而可变长度类型基本上都被截断了进而用0来填补。所有先前OrcaMDF已经实现的数据类型都 支持 行 压缩 ,并且在先前已经 支持 的数据类型的基础上又添加了一些新 支持 的数据类型
当前的数据类型 支持 列表如下:

 bigint 
 binary 
 bit 
 char  
date
  datetime  
mal  / numeric (including vardecimal, both  with   and   without row compression)
  image 
 int 
 money 
 nchar 
 ntext 
 nvarchar 
 smallint 
 smallmoney 
 text  
time
  uniqueidentifier 
 varbinary 
 varchar  

Unicode 压缩
Nchar和nvarchar被证明是比其他类型还要棘手,因为他们使用SCSU unicode 压缩 格式。
我发现了在.NET里有一个对SCSU的实现,但是当我将他的代码嵌入到OrcaMDF里面他弹出了一个license 窗口
需要我购买license。
另外 有很多开源的java工具实现但是都不是我想要的。我选择自己实现SCSU 解 压缩 根据Unicode.Inc给出的参考实现。

我只实现解 压缩 并最终完成了一个非常苗条和简单的SCSU解 压缩 器。

我将会单独写一篇博客来介绍decompressor 并且从OrcaMDF里独立出来作为一个单独的类并带有一些默认值

体系结构更改
我想我应该可以在一到两周时间内完成解 压缩 功能,毕竟,解 压缩 有很好的文档记录。我需要想一下
为了实现 压缩 需要改多少东西。行记录解析器必需要知道页面是否被 压缩 。但是行记录解析器从哪里可以知道
页面被 压缩 过的?先前获得的都是页面指针,现在我必须查询元数据(partition表)确保所有的数据传递路径是从DataScanner 传到page parser再传到 record parser最后到data type parsers


我不得不在规则解析器上实现多种抽象以对 压缩 的记录和非 压缩 的记录进行抽象。
整体而言,这会是一个更好的体系结构,但是可能比预期需要多花更多时间。事实上解析被 压缩 的数据格式只是磨难的一小部分 --因为有文档而且格式比较简单。然后数据类型 在我把他们研究出来为止需要更多的工作量


预览
像往常一样,代码放在Github上,你可以下载下来进行研究!如果你不是程序员,我也上传了可执行的OrcaMDF Studio二进制文件(日期为2012-02-06)


统计数据
作为一个数字情人,我喜欢看统计数据。这里有一组数据是对OrcaMDF的随机统计:

123提交 第一个在2011年4月15日——这几乎是一年前!
11700行 C#代码(不含空格)。
1000行注释。
35%的代码是用于测试的,使用测试套件包含超过200个测试。
Ohloh估计OrcaMDF开发成本为144090美元

第十二篇完

查看更多关于解剖SQLSERVER第十二篇OrcaMDF行压缩支持(译)的详细内容...

  阅读:47次