我們的應用程序根據客戶端配置的規則結構來處理數據。 在處理期間,每一步都會生成詳細的「日誌」,以便用戶能夠理解最終處理結果背後的邏輯原因......以及什麼限制(或規則或其他)發揮作用。壓縮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