我需要想法來實現(真正)高性能的內存數據庫/存儲機制。在存儲20,000多個對象的範圍內,每個對象每5秒鐘更新一次。 我想要一個FOSS解決方案。最高性能的數據庫存儲機制
我最好的選擇是什麼?你有什麼經驗?
我主要在Java中工作,但我需要數據存儲具有良好的性能,因此數據存儲解決方案不需要以Java爲中心。
我還需要能夠查詢這些對象,我需要能夠恢復程序啓動時的所有對象。
我需要想法來實現(真正)高性能的內存數據庫/存儲機制。在存儲20,000多個對象的範圍內,每個對象每5秒鐘更新一次。 我想要一個FOSS解決方案。最高性能的數據庫存儲機制
我最好的選擇是什麼?你有什麼經驗?
我主要在Java中工作,但我需要數據存儲具有良好的性能,因此數據存儲解決方案不需要以Java爲中心。
我還需要能夠查詢這些對象,我需要能夠恢復程序啓動時的所有對象。
SQLite是一個支持內存數據庫(僅連接到:memory:
)的開源自包含數據庫。它具有許多流行編程語言的綁定。這是一個傳統的基於SQL的關係數據庫,但是您不需要運行單獨的服務器 - 只需將其用作程序中的庫即可。這很快。不管它足夠快,我不知道,但它可能是值得一試的。
你每5秒更新20K個對象還是每5秒更新一個20K?
什麼樣的物體?爲什麼傳統的RDBMS不足夠?
取決於您需要查詢的方式,但是您是否看過memcached?
http://www.danga.com/memcached/
其他選項可以,如果你正在使用PHP包括MySQL MEMORY Tables,該APC Cache。
有關該項目/需求的更多細節將會有所幫助。
內存中的存儲? 1)一個簡單的C'malloc'數組,其中所有的結構都將被索引。
2)berkeleyDB:http://www.oracle.com/technology/products/berkeley-db/index.html。它的速度很快,因爲您可以構建自己的索引(輔助數據庫),並且不需要評估SQL表達式。
你需要什麼水平的耐用性?如果您將數據寫回到每張光盤,則每5秒鐘20,000次更新對於大多數IO硬件而言可能會很難實現交易次數。
如果你可以承受失去一些更新,如果你的數據庫和操作系統支持這樣做,你也許可以每100ms將其刷新到光盤上,而且相當便宜的硬件沒有問題。
如果它確實是一個內存數據庫,您不想經常刷新光盤,那聽起來很瑣碎。我聽說H2很好,但SQLite也可以。一個適當調整的MySQL實例也可以做到這一點(但可能更復雜)
看看這裏列出的一些產品:http://en.wikipedia.org/wiki/In-memory_database
Chronicle Map是純Java key-value存儲
Map
接口既然你沒有太多的「表」一個全面的SQL數據庫可能是矯枉過正的解決方案,索引&查詢可以通過由vanilla Java代碼手動更新的一些不同的鍵值存儲來實現。 Chronicle Map provides mechanisms可以使這種更新同時彼此隔離,如果你需要的話。
每5秒更新所有20,000個對象。傳統的RDBMS似乎沒有能力跟上這一點(我可能錯了) – systemoutprintln 2009-01-27 21:32:25
這些對象是專有的。大約20個左右有兩個1-Many關係的字段。 – systemoutprintln 2009-01-27 21:33:05