2011-12-23 53 views
4

我們的服務器(幾個Java應用程序在Debian)的處理輸入數據(GNSS觀測值)應該是:存儲引擎大量不斷插入的數據應該是可以立即

    立即
  1. (延遲< 200毫秒)交付到其他應用程序,
  2. 保存以供進一步使用。

有時(一天幾次)可能會從數據庫中提取大約百萬個存檔記錄。記錄大小約爲12個雙精度字段+時間戳和一些ID。沒有更新;刪除非常罕見,但非常龐大。流入流量高達每秒百條記錄。所以我不得不爲這個數據選擇存儲引擎。

我試過使用MySQL(InnoDB)。一個應用程序插入,其他人不斷檢查最後一個記錄ID,如果更新,則獲取新記錄。這部分工作正常。但我遇到以下問題:

  1. 記錄非常大(每個記錄約200-240字節)。
  2. 獲取數百萬個存檔記錄的速度太慢(幾十分鐘或更長),令人無法接受。

基於文件的存儲工作得很好(因爲有在DB和選擇的中間沒有插入大多是像「WHERE ID = 1與2000年和3000 TIME」,但也有其他的問題:

  1. 尋找新的數據可能是不那麼容易。
  2. 像日誌和CONFIGS其他數據存儲在同一個數據庫中,我更喜歡對這些東西有一個數據庫。

你能不能指點一些合適的數據B ase引擎(SQL首選,但不是必需的)?也許可以微調MySQL以減少記錄大小併爲連續的數據提取時間?

由於DB大小在32位機器上有限,所以MongoDB不可接受。任何不能爲最近插入的數據提供快速訪問的引擎也是不可接受的。

+0

確定數據是否爲「最近插入」是您實施的任何邏輯的功能,而不是您實施它的平臺的功能。 – MatBailie 2011-12-23 09:31:56

+0

在MongoDB中,您可以使用分片將數據大小擴展到4 GB以上。而且爲什麼你仍然使用32位機器呢? – fge 2011-12-23 09:32:06

+0

@Dems我聽說一些NoSQL引擎提供的一致性較弱;我很擔心這一點。如果單個機器上的兩個應用程序連接到DB,一個插入並提交,那麼第二個應該注意到這些更改ASF – aimozg 2011-12-23 09:35:03

回答

2

真的沒有得到從磁盤加載數百萬條記錄需要多長時間。您的32位需求意味着您可以使用多少RAM來限制基於內存的數據結構。但是,如果你想使用MySQL,你可以使用多種表類型獲得良好的性能。

如果您需要非常快速的非阻塞插入。您可以使用黑洞表類型和複製。發生插入的服務器具有黑洞表類型,該表類型可複製到其他表中Innodb或MyISAM的服務器。

既然你不做更新,我認爲在這種情況下MyISAM會比Innodb更好。您可以使用MyISAM的MERGE表類型(不適用於Innodb)。不確定你的數據集是什麼樣的,但是你每天可以有一張表(小時,星期?),你的MERGE表就會成爲這些表的超集。假設您想要白天刪除舊數據,只需重新聲明MERGE表以不包含舊錶。這個動作是即時的。丟棄舊桌子也非常快。

要檢查新數據,可以直接查看「今日」表格,而不是直接查看MERGE表格。

+0

我認爲這可能是我需要的。我決定不使用MyISAM,因爲它是非事務性的,但錯過了不同表引擎的想法。對於日誌和配置表,我會離開InnoDB,因爲它們沒有被主動使用,我會嘗試使用MyISAM觀察表。合併可能也會有所幫助:數據是從不同來源同時收集的,所以如果我將它插入一張表中,它可能會變成交叉存取,因此爲一個數據源選擇條帶可能會很慢。但是,如果我爲每個來源創建子表併合並它們,這可能會解決問題。謝謝! – aimozg 2011-12-23 11:57:22

3

我建議使用TokuDB存儲引擎的MySQL。它可以免費使用高達50GB的用戶數據,而且定價模式並不可怕,因此它是存儲大量數據的絕佳選擇。

與InnoDB和MyISAM相比,它具有更高的插入速度,並且隨着數據集的增長而擴展得更好(一旦工作數據集不適合內存使得其性能取決於HDD子系統的I/O,InnoDB會趨於惡化) 。

它也符合ACID標準,並支持多個聚集索引(這對於您計劃執行的大規模DELETE來說是一個很好的選擇)。另外,支持熱模式更改(ALTER TABLE不會鎖定表,並且在巨大的表上更改速度很快 - 我說的是千兆字節大小的表在幾秒鐘內就會被更改)。

從我個人的使用來看,由於TokuDB的壓縮,我的磁盤使用量減少了5-10倍,而且比MyISAM或InnoDB快得多。 儘管聽起來我試圖宣傳這個產品 - 我不是,它只是簡直令人驚歎,因爲您可以使用單片數據存儲而不需要昂貴的擴展計劃,如跨節點分區來擴展寫入。

+0

這是非常有趣的選項!我一定會檢查它。 – aimozg 2011-12-23 11:27:50

+0

這是關於TokuDB如何執行vs InnoDB的一些信息。 [鏈接](http://www.mysqlperformanceblog.com/2013/05/07/benchmarking-percona-server-tokudb-vs-innodb/) – Firze 2014-02-07 10:22:15

相關問題