Cassandra
數據庫延遲與吞吐量
在數據庫的情況下,我對術語延遲和吞吐量感到有些困惑。
我的理解是延遲表示執行單個請求(例如插入或選擇)所需的時間,而吞吐量表示在一定時間內此類操作的數量(例如每秒插入多少次)。
如果我的理解是正確的,那麼這兩者不應該總是相關的嗎?如果延遲降低吞吐量應該增加,反之亦然?那麼具有低延遲的數據庫應該具有高吞吐量嗎?
我想到的是可以並行執行許多請求,因此可能導致即使單個請求也很慢(延遲高),通常數據庫可以很好地執行(可以並行處理大量請求,特別是如果我們談論的是可擴展的分佈式數據庫)。這是重點嗎?
我通過閱讀 Cassandra 開始思考這個問題:
Cassandra 還非常重視性能。2012 年,多倫多大學研究 NoSQL 系統的研究人員得出結論:“在可擴展性方面,我們的實驗中顯然是贏家。Cassandra 在所有實驗中實現了最大節點數的最高吞吐量”,儘管“這是以高寫入和讀取延遲。”
是不是讀寫慢,但是因為是分佈式的,所以實現了高吞吐?
您的直覺很接近,但忽略了並發性。
您可以擁有中/高延遲、高吞吐量、大規模並發系統 - Cassandra 上的任何單個請求都可能比其他一些系統花費更長的時間,但您可以並行執行更多請求,從而使總吞吐量更高。在 Cassandra 的案例中,SEDA 架構允許每台機器有很多並發請求(通常每台機器大約為 ~128 或 ~256 個讀寫執行緒),而分佈式特性允許您在多台機器上進行擴展(訂單上的單個集群數千台機器)。