Mysql

在 MariaDB / MySQL 中儲存實時時間序列的最佳解決方案是什麼?

  • March 11, 2021

案例:測量創建給定數量的圖像。對於每個圖像,我們需要儲存一小組質量指標(浮點數、雙精度數)以及圖像整數

$$ 1 …N $$,一個時間戳和一個或兩個外鍵值。然後應該在 Web 應用程序 (PHP) 中“實時”繪製,供使用者評估。 每個 Web 客戶端每 5 秒輪詢一次數據庫。理想情況下,每組質量指標的儲存 + 檢索時間應小於 2 秒(大約)。在最壞的情況下,可能有大約 30 個同時 Web 客戶端輪詢,並且可能同時寫入大約 10 個測量值,導致大約 10 個寫入突發。每秒1000組質量指標。

在程式語言中,這種數據可能儲存在數組或列表中。由於我不知道 MariaDB / MySQL 世界中有任何類似的東西,我只是使用一個正常的 InnoDB 表,上面提到的每個值都有一個列。這已經有 90+ 百萬行,預計在未來幾個月內增長更快。

InnoDB 總體上是最好的儲存引擎,還是我應該考慮其他?最好的做法是在一段時間後存檔數據,也許是在處理完所有測量圖像後?是否有助於啟用壓縮,或者這會對性能產生非常負面的影響?

僅使用 MySQL/MariaDB,我將採用:

你的最後一段拋出了問題的廚房水槽(Toku、MyRocks、存檔、壓縮、歷史表)。我很驚訝這個文章沒有因為“太寬泛”而被殺。請詳細說明您的數據和查詢是什麼樣的;否則,我們所能做的就是扔一個裝滿解決方案的廚房水槽。

你說“實時”,但你需要“千/秒”。你能允許實時延遲 1 分鐘嗎?1秒?你不能得到 1ms;1s將很難實現。爆發持續多長時間?什麼是每分鐘爆發?1K/sec 可能會在接下來的幾秒鐘內溢出。6K/分鐘也不是很麻煩。

有多少客戶端正在儲存數據?一些解決方案適用於單個客戶端;多個客戶需要不同的解決方案。

請記住,基準測試是為了炫耀一件事而調整的,很少與現實生活相匹配。

引用自:https://dba.stackexchange.com/questions/190756