我們的服務器(幾個Java應用程序在Debian)的處理輸入數據(GNSS觀測值)應該是:存儲引擎大量不斷插入的數據應該是可以立即
-
立即
- (延遲< 200毫秒)交付到其他應用程序,
- 保存以供進一步使用。
有時(一天幾次)可能會從數據庫中提取大約百萬個存檔記錄。記錄大小約爲12個雙精度字段+時間戳和一些ID。沒有更新;刪除非常罕見,但非常龐大。流入流量高達每秒百條記錄。所以我不得不爲這個數據選擇存儲引擎。
我試過使用MySQL(InnoDB)。一個應用程序插入,其他人不斷檢查最後一個記錄ID,如果更新,則獲取新記錄。這部分工作正常。但我遇到以下問題:
- 記錄非常大(每個記錄約200-240字節)。
- 獲取數百萬個存檔記錄的速度太慢(幾十分鐘或更長),令人無法接受。
基於文件的存儲工作得很好(因爲有在DB和選擇的中間沒有插入大多是像「WHERE ID = 1與2000年和3000 TIME」,但也有其他的問題:
- 尋找新的數據可能是不那麼容易。
- 像日誌和CONFIGS其他數據存儲在同一個數據庫中,我更喜歡對這些東西有一個數據庫。
你能不能指點一些合適的數據B ase引擎(SQL首選,但不是必需的)?也許可以微調MySQL以減少記錄大小併爲連續的數據提取時間?
由於DB大小在32位機器上有限,所以MongoDB不可接受。任何不能爲最近插入的數據提供快速訪問的引擎也是不可接受的。
確定數據是否爲「最近插入」是您實施的任何邏輯的功能,而不是您實施它的平臺的功能。 – MatBailie 2011-12-23 09:31:56
在MongoDB中,您可以使用分片將數據大小擴展到4 GB以上。而且爲什麼你仍然使用32位機器呢? – fge 2011-12-23 09:32:06
@Dems我聽說一些NoSQL引擎提供的一致性較弱;我很擔心這一點。如果單個機器上的兩個應用程序連接到DB,一個插入並提交,那麼第二個應該注意到這些更改ASF – aimozg 2011-12-23 09:35:03