2011-11-04 44 views
3

我想用一個數據結構是這樣的:用於存儲緩存的SQL查詢的數據結構是什麼?

building string (indexed) 
    date  TDate (indexed) 
    room_id integer (indexed) 
    measurement_data -> various fields 

若要更改數據庫的查詢中這是在遠程SQL服務器。

這樣我只需要爲給定的建築物查詢一次數據庫,並且我可以使用Delphi中間件應用程序將單個數據項目交付給後端。

你會推薦什麼樣的數據結構來存儲這些東西,以便我可以快速檢索數據項。

我正在考慮把它放在一個上面的項目類中,並將對象放入一個TStringList,但後來我只有一個數據索引。
因爲我主要檢索單個項目,所以我不想使用客戶端數據庫。
有沒有更好的TList變體,可以讓我快速找回物品。

換句話說,TStringlist(帶附件)對象只允許一個索引。 (字符串)是否有更好的列表,將允許多個索引?

編輯
TCollection聽起來像一個更好的匹配,是一個好主意?

+2

TClientDataSet在這種情況下不是一個過度工程 –

+0

TClientDataset的工作方式就像一個魅力,並做我所需要的東西。因爲它已經找到最近的。它在記錄時間內填充了插入缺失值的Excel表格。在擴展應用程序時將會看到速度問題。 – Johan

+0

KbMemTable應該也是一個不錯的選擇... – RBA

回答

8

在我的一箇舊項目中(圍繞Delphi 7),我通過多個TList來存儲指向記錄的指針。其中一個列表擁有這些項目並負責清理,其他項目指向相同的項目,但每個列表的排序方式不同,作爲二進制搜索查找的索引。除了它們的順序外,這些列表是相同的並且保持同步 - 添加項目將添加到所有列表,刪除項目會從所有列表中刪除。

另一種選擇是使用TClientDataSet或其他帶有索引支持的內存數據集。

+2

+1對於TClientDataSet – RRUZ

+0

決定使用TClientDataset。看起來像問題的正確解決方案。 – Johan

1

可能是:SynBigTable a'in Memory'快速表中有字段,索引和搜索。

+0

當我有時間的時候會回顧一下,現在我要使用TClientDataset。只是因爲這是delphi的標準。 – Johan

+0

@Johan:不錯的選擇,我用SynBigTable替代性能需求,但它似乎不會成爲你的應用程序的問題。 – philnext

+0

結果ClientDataset不支持超過200.000條記錄,所以我回到了繪圖板:-)。我們來看看SynBigTable的具體情況。 – Johan

相關問題