Database-Design

Cassandra 可以用來提高數據庫寫入率嗎?

  • February 7, 2017

我正在為需要將 TB 級資訊解析到數據庫中的分析工作開發數據庫。我的工作是創建和填充數據庫並使用它來回答分析師的問題。在這些問題的過程中,我們確定了數據在數據庫中表示方式的缺陷。然後我必須更改數據庫結構,這通常涉及重新解析並將所有內容重新讀取到數據庫中。

解析很耗時,但可以直接並行化;因為我有一個 48 節點的集群,所以不再需要很長時間。然而,我使用 MariaDB 開始了這個項目(坦率地說,沒有人知道數據集會變得如此之大)。現在最大的問題是寫入數據庫:每次我修改數據庫時都會有數十億次寫入,需要 24 小時以上的時間以及 2 個月的收集數據。由於我們將在更多月和數年內收集數據,我可以看到寫入要求很快就會變得令人望而卻步。

我必須就將來如何/是否擴展數據庫提出建議。但是,我對分佈式數據庫幾乎一無所知。我想知道:切換到分佈式數據庫是否會通過增加我可以寫入的節點數量來減少寫入時間。

關於數據本身,它設計有一個索引主表(截至目前約 10 ^ 7 行)和幾個設計為與主表連接的未索引子表(約 10 ^ 9 行),如果相關的話。

如您所知,由於數據庫支持戰略分析和報告生成,而不是實時資訊,因此沒有那麼多動力來加快數據庫讀取時間。讓數據不被索引並接受較長的連接時間就可以了;報告生成在一夜之間執行。但是數據庫重建的時間很長,開始消耗整個工作日,這不是很好。

…預計通過增加我可以寫入的節點數量來減少寫入時間。

是的。雖然文章已過時,但 Netflix 早在 2011 年就進行了可擴展性實驗,詳情如下:

在 AWS 上對 Cassandra 可擴展性進行基準測試 - 每秒超過一百萬次寫入

從本質上講,他們發現 Cassandra 確實是線性可擴展的。也就是說,您的集群可以維持的每秒操作數與集群中的節點數量成正比。

數據庫支持戰略分析和報告生成,而不是實時資訊

這是讓我停下來的部分。Cassandra 通常不適合作為分析後端。這樣做的原因是(由於其分佈式特性)您的表結構必鬚根據您的讀取查詢進行建模。

本質上,這意味著一張表服務一個查詢。在 WHERE 子句中需要不同列的附加查詢通常必須由託管重複數據的不同表提供服務。這在 OLAP 環境中很快就會變得很麻煩。

因此,儘管 Cassandra 的無主分佈式架構可以幫助擴展您的寫入,但您的讀取很快就會失去靈活性。

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