2012-05-28 62 views
0

如果我有一個表,每行代表一個記錄,並有幾列。我想對任何列進行快速查詢和排序。我可以使用哪些數據結構?表的數據結構

我想要節省空間。否則,我可以緩存每列的排序結果進行查詢和排序。但如何消耗更少的空間,而不是桌子本身?

+1

我懷疑這將需要更多的上下文?這是SQL嗎?程序擴展?哪個RDBMS? Java的? PHP?蟒蛇? C#? ...? – Ben

+0

@Ben:讓我們說只要用任何編程語言,例如Java的。 –

回答

0

根據數據的複雜性,您可能正在尋找relational algebra的實現。那就是,unordered set of tuples

通常的實現方式是B-tree的某種形式。

+0

對,我知道B樹可以用來保存磁盤訪問。但是,如果有'm'列需要排序和查詢,那麼你是否還需要製作'm'輔助索引數組? –

0

這本質上是一個數據庫編程問題。你需要索引,每列一列(這個答案的其餘部分會假裝我們正在談論單個索引;想象一下,如果你需要的話,多做幾次)。通常的解決方案包括散列表和搜索樹(例如B-樹),但當然一個簡單的解決方案只包含所有的列條目,並不是特別節省空間。

對此的回答使得稀疏索引:將您的記錄按塊分組,並僅存儲索引中每個塊的搜索關鍵字最低的記錄。除非你有病態(一直都會增加非常低的值),否則這將在低空間需求下給你體面的表現。

要處理病理情況,您可以查看以不同方式將記錄分組爲塊,例如,通過保留一大堆尚未索引的至今的記錄,並且只要將一大堆這樣的記錄提交到一個組中(並對其進行索引),只要您可以找到一個不在搜索關鍵字上的子集。

(這些只是想法。我更數據庫比他們的程序員的用戶,嘗試了一些研究,看看有什麼已經知道誰比我更要做人在實踐中完成的。)