2012-06-15 52 views
0

我的問題是:有沒有什麼辦法可以用java.util.collections(ArrayList/HashMap/3rd party LIB等等)實現數據庫類型的功能(內存數據庫提供)。 )讓我稍微描述一下。IMDB(內存數據庫)與Java集合

我有模型類帳戶具有不同的25個屬性,我可以在ArrayList上存儲可以說5000個帳戶的數據。我可以通過創建表t_Account將數據保存在內存數據庫中。現在,我要實現一些基本操作如下面提到

  1. 升序排序/降序基於每個屬性的順序。 (例如,按SQL操作排序)

  2. 根據每個屬性的不同篩選條件篩選出特定的模型帳戶? (在SQL中使用表中的WHERE/AND條件)

  3. 根據特定屬性搜索特定帳戶? (在SQL表上應用LIKE操作)

總之我的主要目標是使用Java,這應該是作爲內存數據庫運營良好,實現了內存數據庫相關的功能?

預先感謝您的寶貴時間,並建議...

回答

0

當然,只要你不

  • 要實現你可以做一個什麼樣的數據庫在內存中做部分複雜的查詢

  • 找對大數據集的演出:複雜的索引(包括其維護)不是一件容易的事情

但是5000條記錄是一個非常小的集合,所以你可以在內存中用自定義函數和索引毫無困難地管理它們。排序,過濾,搜索很容易在任何語言的小集上實現。

你似乎使用java(「ArrayList」),請看Collections.sort()。只要您的比較功能快速,就可以對小集合進行排序。

另一方面,使用像sqlite這樣的小型數據庫也很容易。如果你不確定,你可以從java解決方案入手,稍後如果分析顯示你無法有效處理內存數據庫以滿足您的需要,那麼稍後可以集成外部工具。如果它很容易適用於RAM,並且不需要保存數據,請嘗試在內存中執行此操作。使用數據庫的第一個原因是持久性。相反,如果您必須在程序的啓動 - 停止(或崩潰)之間保留記錄,請使用數據庫。

+0

感謝您的快速建議,我只是把5000例如它可能會高達20k-25k。以下是更多詳細信息 – javakid1212

+0

如果它很容易放入RAM中,並且不必保存數據,請嘗試在內存中執行此操作。使用數據庫的第一個原因是持久性。 –

+0

感謝您的快速回復,我只是把5000例如它可能會高達20k-25k。下面是更詳細 1.取我可能需要APLY的基於不同的標準過濾器cple,所以在這種情況下,我必須通過整個列表,以迭代的數據。 2.我可以使用sort()方法,但我可能需要爲每個屬性實現。 3.是否有申請名單上的任何行動,而不是通過每個元素進行迭代的任何更好的方法?像例如Account類的一個屬性是「類型」,所以當我想通過傳遞「檢查/保存」而不是遍歷所有元素應該給結果的所有帳戶的子列表 – javakid1212

0

HSQLDBH2純Java SQL DB可以完全在內存中運行(儘管它們不是本機的,它們仍然很快)。

連接字符串,HSQLDB:jdbc:hsqldb:mem:,H2:jdbc:h2:mem:。您可以在其後添加標識符來創建支持同一VM中的多個連接的內存數據庫。

本機嵌入式SQL數據庫SQLite也可以完全在內存中運行,並且Xerial SQLite驅動程序使用連接字符串jdbc:sqlite::memory:。請注意,SQLite在:memory:之後不允許標識符,並且如果您在同一虛擬機中打開兩個連接到:memory,則會得到兩個不同的內存數據庫。

我沒有看到一個真正需要使用名爲內存連接,因爲你可以重複使用相同的連接對象,如果你需要從不同的線程使用它,以上三種數據庫是線程安全的。

Firebird嵌入式數據庫不提供內存數據庫。