解剖SQLSERVER 第十二篇 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 行压缩支持(译)的更多相关文章
- 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)
解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译) http://improve.dk/orcamdf-rawdatabase-a-swiss-a ...
- 解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译)
解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译) http://improve.dk/how-are-vardecimals-stored/ 在这篇文章,我将深入研究 ...
- 解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译)
解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译) http://improve.dk/where-does-sql-server-store-the-sourc ...
- 解剖SQLSERVER 第十篇 OrcaMDF Studio 发布+ 特性重温(译)
解剖SQLSERVER 第十篇 OrcaMDF Studio 发布+ 特性重温(译) http://improve.dk/orcamdf-studio-release-feature-recap/ ...
- 解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译)
解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译) http://improve.dk/orcamdf-feature-recap/ 时间过得真快,这已经过了大概四个月了自从我最初介绍我 ...
- Python开发【第二十二篇】:Web框架之Django【进阶】
Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...
- 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探
SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...
- Spring Cloud第十二篇 | 消息总线Bus
本文是Spring Cloud专栏的第十二篇文章,了解前十一篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring ...
- Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇)
Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇) 目录 Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇) 1 Internal Locking Methods Row-Leve ...
随机推荐
- Apache htpasswd命令用法详解
一. 基础 htpasswd建立和更新存储用户名.密码的文本文件, 用于对HTTP用户的basic认证. # /usr/local/apache/bin/htpasswd –help Usage: h ...
- 第四章 springboot + swagger(转载)
此篇博客转发自:http://www.cnblogs.com/java-zhao/p/5348113.html swagger用于定义API文档. 好处: 前后端分离开发 API文档非常明确 测试的时 ...
- 我所理解的SoC
前阵子出去找工作,有的人不太理解,你们SoC有什么可做的,不就是找几个IP来搭积木嘛.你那个FPGA prototyping有什么可做的,不就是编一个镜像嘛. 正好,新项目,重新开始做一颗SoC.接下 ...
- LXD 2.0 系列(四):资源控制
LXD 提供了各种资源限制.其中一些与容器本身相关,如内存配额.CPU 限制和 I/O 优先级.而另外一些则与特定设备相关,如 I/O 带宽或磁盘用量限制.-- Stéphane Graber 本文导 ...
- MFC字符串转化成16进制
//CString m_str = _T("11"); //USES_CONVERSION; //char *m_cc = T2A(m_str); //BYTE m_bb; //s ...
- java-关于浏览器的判断
一.判断是手机还是电脑浏览器 public final static String[] agent = { "Android", "iPhone", " ...
- 判断Window在哪个屏幕
最近在做窗口最大化时需要一个功能,如果是多个显示器的话,需要在当前显示器最大化,由于是根据屏幕长宽进行设置Window大小,没有使用WindowState.Maximized,window.Left不 ...
- com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败。
com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败. at com.microsoft.sqlserver.jdbc.SQLSe ...
- Unity3D安卓打包参数配置与兼容性的关系分析
前言 在使用Unity3D工程导出安卓安装包的时候,往往会遇到兼容性的问题,针对某些机型,要么无法打开游戏,要么会出现卡机的现象.面对这种情况,我们可以调节相关的参数来提高兼容性. 为了了解在打包时候 ...
- TIS100入门向攻略
前几天某QQ群有人推荐这个游戏,百度了下找到了贴吧下载,但是攻略好像没找到,B站到是有个入门视频介绍还满有用的. 入门的话强烈推荐先看完了解个大概 http://www.bilibili.com/vi ...