Cassandra中的同步和異步寫入/刪除有什麼區別?Cassandra中的同步和異步寫入/刪除
如果我使用executeAsynchronously()
而不是方法CqlOperation
類(datastax驅動程序)它會提高吞吐量(TPS)方面的性能嗎?在我的應用程序中,我正在做單插入/刪除以及批量插入。 到目前爲止,我只使用execute
方法(同步),我正在考慮使用異步執行來提高應用程序在TPS方面的性能。
Cassandra中的同步和異步寫入/刪除有什麼區別?Cassandra中的同步和異步寫入/刪除
如果我使用executeAsynchronously()
而不是方法CqlOperation
類(datastax驅動程序)它會提高吞吐量(TPS)方面的性能嗎?在我的應用程序中,我正在做單插入/刪除以及批量插入。 到目前爲止,我只使用execute
方法(同步),我正在考慮使用異步執行來提高應用程序在TPS方面的性能。
它肯定會提高性能。 我還沒有嘗試過,但下面的鏈接也說了同樣 Read the question
同步寫(或刪除)卡珊德拉,直到客戶端接收操作已根據已完成的確認將阻止執行代碼一致性水平。另一方面,異步寫(或刪除)將查詢發送到cassandra,然後繼續執行代碼(不會阻塞)。現在您必須註冊某種回調,它會通知您(異步)寫入操作已完成。
所有的阻塞加起來,可能會減慢你的應用程序。由於異步查詢立即進行,它們允許您在發送後立即發送更多的異步查詢,而不是等待第一個完成。這就是性能增加的地方,特別是當你向cassandra發送大量查詢時。
異步寫入爲每個工作者提供更好的性能,但它增加了回調和錯誤處理的開銷。
我最近做了一個測試,發現性能優勢以及回調實現的錯誤處理,使用帶有1M記錄的單個工作人員寫入異步發現速度是同步時間的4倍。 in_flight queries
被限制爲1000,這個數字可以根據環境條件進行相應的調整(您希望在網絡上放置的連接數量,比如200毫秒的網絡延遲和1毫秒的服務器響應時間,人們可以將200個查詢放入in_flight中,而在這種情況下,同步呼叫會讓服務器在200ms內有199ms的空閒時間,在這種情況下,服務器幾乎會一直處理至少一個查詢),但沒有限制,它會使網絡擁塞,並可能導致性能下降。
在某些情況下,同步查詢可能更合適,特別是如果在繼續執行程序之前查詢的結果非常重要。但在大多數情況下,異步就足夠了。
總之,您的問題的答案是肯定的 - 我已經測試TPS增加4x。
在讀取批次之前,請閱讀它們。批次不會提高性能 – jny