2009-01-27 70 views
-1

我需要想法來實現(真正)高性能的內存數據庫/存儲機制。在存儲20,000多個對象的範圍內,每個對象每5秒鐘更新一次。 我想要一個FOSS解決方案最高性能的數據庫存儲機制

我最好的選擇是什麼?你有什麼經驗?

我主要在Java中工作,但我需要數據存儲具有良好的性能,因此數據存儲解決方案不需要以Java爲中心。

我還需要能夠查詢這些對象,我需要能夠恢復程序啓動時的所有對象。

回答

3

SQLite是一個支持內存數據庫(僅連接到:memory:)的開源自包含數據庫。它具有許多流行編程語言的綁定。這是一個傳統的基於SQL的關係數據庫,但是您不需要運行單獨的服務器 - 只需將其用作程序中的庫即可。這很快。不管它足夠快,我不知道,但它可能是值得一試的。

Java driver

1

你每5秒更新20K個對象還是每5秒更新一個20K?

什麼樣的物體?爲什麼傳統的RDBMS不足夠?

+0

每5秒更新所有20,000個對象。傳統的RDBMS似乎沒有能力跟上這一點(我可能錯了) – systemoutprintln 2009-01-27 21:32:25

+0

這些對象是專有的。大約20個左右有兩個1-Many關係的字段。 – systemoutprintln 2009-01-27 21:33:05

1

結賬HSQLDBPrevayler。 Prevayler是一個從傳統的關係數據庫(RDBMS)轉變而來的模式 - 我在一些項目中使用過這種模式(即不是Prevayler),並發現它具有真正的優點。

0

你需要什麼水平的耐用性?如果您將數據寫回到每張光盤,則每5秒鐘20,000次更新對於大多數IO硬件而言可能會很難實現交易次數。

如果你可以承受失去一些更新,如果你的數據庫和操作系統支持這樣做,你也許可以每100ms將其刷新到光盤上,而且相當便宜的硬件沒有問題。

如果它確實是一個內存數據庫,您不想經常刷新光盤,那聽起來很瑣碎。我聽說H2很好,但SQLite也可以。一個適當調整的MySQL實例也可以做到這一點(但可能更復雜)

0

Chronicle Map純Java key-value存儲

  • 它具有非常高的性能,維持1 million writes/second from a single thread。這是一個神話,一個快速的數據庫不能用Java編寫。
  • 無縫存儲和加載任何可序列化的Java對象,提供了一個簡單Map接口
  • LGPLv3

既然你沒有太多的「表」一個全面的SQL數據庫可能是矯枉過正的解決方案,索引&查詢可以通過由vanilla Java代碼手動更新的一些不同的鍵值存儲來實現。 Chronicle Map provides mechanisms可以使這種更新同時彼此隔離,如果你需要的話。