2014-06-21 64 views
2

我從here得到了一個定義壓縮文本字段的代碼。我需要這樣做,因爲我存儲的文本太多,而且數據庫太大。問題是代碼沒有任何文檔,而且很混亂。壓縮文本存儲在mysql數據庫中,它必須是base64

特別,我已經修改了代碼一點,在這裏:

def get_prep_value(self,value): 
    if not value: 
     return value 
    try: 
     tmp = value.encode('utf-8').encode('bz2') 
    except Exception: 
     return value 
    else: 
     if len(tmp) > len(value): 
      return value 
     return tmp 

在原代碼,它們編碼到的base64 BZ2,它顯示未優化後,但我不知道是否有可能是另一個原因呢?順便說一句。我正在使用MySql後端

我也刪除了對我沒有意義的行11-15 ..你爲什麼要在這裏解碼?

回答

0

對數據進行Base64編碼可確保生成的數據安全地插入純文本列(同時犧牲bzip2提供的某些壓縮)。作者必須要求將數據插入到文本列中。如果你使用的是BLOB類型的列,你不需要擔心base64部分(並且你會得到更多的壓縮)。

鑑於MySQL本身支持gzip壓縮的事實,鏈接的示例似乎有點迂迴。 See the MySQL documentation regarding compression and encryption functions,特別是COMPRESS()UNCOMPRESS()。如果您有可以存儲二進制數據的BLOB列,這些將很高興地存儲您的壓縮數據。

這種方法的缺點是,未壓縮的數據需要到壓縮的服務器(或在通過網絡傳回客戶端之前解壓縮)。這可能提供了作者原始片段背後的動機。

相關問題