2011-07-10 72 views
1

我有一個數據庫中有數百萬條記錄。哪個是最好的無損數據庫壓縮技術

表具有兩個屬性1]名稱2]位置

有多條記錄,其具有不同的名稱,但相同的位置,這樣是有可以在位置屬性被應用於任何壓縮技術?

您可以使用支持的數據庫名稱來推薦各種無損壓縮技術。

+0

剛剛[正常化數據庫](http://en.wikipedia.org/wiki/Database_normalization)怎麼樣? – hammar

+0

爲什麼要壓縮數據?你真的有空間問題,或者你只是試圖過早地優化大小?你應該考慮如果你成功了會發生什麼,你將如何查詢數據庫的位置?無論如何,是否有可能擁有一個位置表,並且只是存儲一個參考?據推測(但你必須檢查)如果有很多位置被重用,int類型的引用總共佔用的空間會更少。 –

+0

看起來像功課。 – Bytemain

回答

4

Normalise your database。有一個LOCATIONS表,並給你的第一個表的外鍵。

不到65535個不同的位置?這是原始表中每個記錄的兩個字節。如果你問我,相當不錯的壓縮。也使索引和比較更快。

數據比代碼更重要。首先獲取數據。 儘可能標準化默認。只有在您發現(特定的,測量的和完全歸因的)性能問題或某些重要原因後才能進行非規範化。

+0

你會寫請查詢來規範我的數據庫嗎 – Vivek

+0

這不是一個查詢,它是你如何創建數據庫的第一個地方。在遷移過程中可能會涉及到一些查詢,例如「INSERT INTO locations SELECT FROM ...」(我忘記了確切的語法),然後是「UPDATE addresses SET SET location_id =(SELECT id FROM locations ...」,然後刪除多餘的舊列 – spraff

+0

@sam:你總是可以在你的表格中添加一個緯度/經度對,並使用一個空間索引 – Bytemain

0

你想尋找一個空間索引。 Si將複雜度降低到1d。一個si用於地圖和treemaps。它看起來像一棵四叉樹。

+0

呵呵,首先我以爲你完全錯過了這一點,然後我意識到**我有** !是的,如果地址是地址這樣的字符串,那麼請閱讀我的答案 - 如果地點是緯度/經度或其他東西,那麼你需要離散數據。 – spraff

+0

對不起,先生,請你詳細說明你的意思嗎?一個離散函數的例子嗎?或者是一個空間索引離散函數?我有一個糟糕的一天 – Bytemain

+0

是的,它可能是連續的值,但如果你把宇宙分成一半並說「(x1,y1)在左邊,(x2,y2)在右邊「,那麼你有一個1位離散值來區分這些點。其他示例有[矢量量化](http://www.gamasutra.com/view/feature/3090/image_compression_with_vector_.php),八叉樹尋址等。關係數據庫不會自然處理,但它們可以存儲BSP「路徑「作爲一個普通的整數。 – spraff