我们的应用程序根据客户端配置的规则结构来处理数据。 在处理期间,每一步都会生成详细的“日志”,以便用户能够理解最终处理结果背后的逻辑原因......以及什么限制(或规则或其他)发挥作用。压缩SQL的冗余文本数据。一个固定字典?
如何将这些数据存储在数据库中?
我敢打赌,95%以上的数据从一个日志记录到下一个日志记录是多余的。我在100条记录的合并文本上运行了LZMA,输出大小为2%。
仅通过主键检索文本。从不查询过滤或搜索目的。 每条记录的文本平均值大约为25k。
如果我压缩每条记录的文本,我将处于〜10%的压缩率...对比2%的压缩率(对于组合的100条记录)。
理想情况下,我想使用某种从大量现有数据生成的固定字典。
我们正在使用SQL 2005.我知道SQL 2008有行&页面级压缩选项..但是让我们的整个客户端升级是不可行的。
想法? 谢谢!
更新:这是我所做的。 经过一个星期的阅读实验后,我编写了一个程序,在1000条记录的组合文本上生成一个LZW样式的字符串字典。然后,我以各种方式优先处理字典,包括: - 总体预期节省(以字节为单位,通过替换) - 预期节省,仅包含字典条目,每条记录的出现次数为1次或更少。
我在示例Record上运行了最高优先级X(100 & 1000之间)字典条目的简单替换。然后使用LZMA alg。压缩编码输出。
通过播放字典的不同配置...我发现充其量,我可以将LZMA压缩提高约1%。在大多数情况下,我引入比我拉出来的更多的熵,因此编码的LZMA压缩数据比原始数据压缩w/LZMA大大。
我已经确定每个记录的文本中有更多的可以被LZMA利用的冗余,而不是行之间的冗余。
所以很有可能,我只需要LZMA所有的文本,并称它为一天。
+1很好的问题! – 2011-03-11 02:29:49
是重新使用的日志的整个行?或者是否有大致相同的细微差别?换句话说,是否有机会重复使用从一个日志条目到另一个日志条目的相同确切文本? – Randy 2011-03-11 02:33:25
大部分相同的文字..有一些差异。例如,每个记录可能有如下行:“计算2008年的年限:$ xx.xx找到”或“每月最低<300美元。处理中止”。日期,美元,中止/继续会改变。 – 2011-03-11 02:58:40