2008-11-04 111 views
2

我需要開發一個用於存儲大數目(10到100的數千個)對象的系統。每個對象都像電子郵件一樣 - 有一個主體文本體,以及幾個尺寸有限的輔助文本字段。一個主體將從幾個字節到幾KB的大小。在磁盤上存儲大量不同大小的對象

每個項目都有一個唯一的ID(可能是一個GUID)來標識它。

只有當對象添加到商店時纔會寫入商店。它會經常閱讀。刪除將很少。這些數據幾乎都是人類可讀的文本,因此它可以很容易被壓縮。

的系統,讓我發出I/O和系統的存儲和緩存將是理想的。

我要保存在內存中的索引,用它來映射指數爲對象的單一(和初級)鍵。一旦我有了密鑰,我就會從磁盤或緩存中加載它。

數據管理系統需要我的應用程序的一部分 - 我不希望依賴於OS的服務。或單獨安裝的軟件包。本機(C++)將是最好的,但一個管理(C#)的事情會好的。

我相信,一個數據庫是一個顯而易見的選擇,但是這必須是超快速的查找和加載到一個對象的內存。我對數據庫技術沒有經驗,我擔心一般的關係系統不會有效地處理所有這些可變大小的數據。

(注意,這無關我的工作 - 它的一個個人項目。)

在你的經驗,有什麼可行的替代傳統的關係型數據庫?或者數據庫會爲此工作好嗎?

回答

2

看看SQLite,它具有許多可用編程語言和環境的綁定,就像Berkeley DB一樣,磁盤上的數據庫不需要安裝數據庫引擎。

如果你只需要添加正確的索引,查找會非常快,並且由於它是在心臟基於集合的數據庫,你仍然可以做批量查詢和類似。

1

你並沒有真正指出你將如何搜索這些數據。我已經對一些文本挖掘應用程序做了一些類似的工作,其中主要數據存儲在MySQL中,但我在Ferret中維護一個文本搜索索引(項目位於Ruby中),以根據關鍵字搜索在郵件表中找到相應的行。我認爲這種混合方法也適用於你。 SQLServer和Lucene.Net可能在C#環境中適合您。我相信,如果你環顧四周,你可以在C++空間找到類似的解決方案。

我不推薦使用SQLServer的全文搜索 - Lucene和它的派生似乎是一個更好的選擇。

我認爲你將有更好的運氣與幾乎任何數據庫解決方案在基於文件的解決方案。幾乎任何現代數據庫都應該能夠處理您的數據需求,至少在空間方面。在大型領域構建索引是另一回事,因此如果您需要搜索文本挖掘方法,我會推薦它。

+0

嗨Tvanfosson,我會保存在內存中的索引,用它來索引映射爲對象的單一(和初級)鍵。一旦我有了密鑰,我就會從磁盤或緩存中加載它。 感謝您的意見:) – Foredecker 2008-11-04 04:57:42

0

聽起來就像伯克利DB的設計。但是,我沒有用過它。

0

也許你應該考慮一下像Apache + mod-dav這樣的WebDav-Server。這會將內容和元數據存儲在磁盤上。 對於搜索,您可以將現有的搜索引擎放置在此WebDav服務器的頂部,例如Lucene的。

通過這種方式,您可以保持自己的發展最低限度,並擁有一系列強大功能。

-1

看看Glimpse

+0

奇怪的人......如果您沒有得到或喜歡這個想法,爲什麼投票呢?至少這應該解釋我錯了。 – Thevs 2008-11-05 21:55:04

相關問題