2012-04-03 30 views
1

讀取是否卡桑德拉使用併發線程讀取列族的sstables以服務爲行密鑰或個人的工作線程不會的工作跨越多個sstables查找讀取請求?卡桑德拉跨多個讀取請求

會是什麼一個比其他[使用併發線程和單線程]的開銷?

回答

1

卡桑德拉實現階段式服務器模型(SEDA)見SEDA

在典型應用中,工作的單個單元的單個線程的範圍內常常進行。例如,寫入操作將在同一個線程中開始和結束。然而,Cassandra是不同的:它的併發模型是基於SEDA的,所以一個單獨的操作可能從一個線程開始,然後把工作交給另一個線程,這個線程可能會把它交給其他線程。但是現在的線程無法將工作交給另一個線程。相反,工作細分爲所謂的階段,並associ- at​​ed與舞臺上的線程池(實際上是一個java.util.concurrent.ExecutorService中)決定的執行。一個階段是一個基本的工作單位,一個單一的行動可能會從一個階段轉到另一個階段。因爲每個階段都可以由不同的線程池處理,所以Cassandra可以獲得巨大的性能提升。 Read在cassandra中表示爲一個階段,所以肯定有多個線程涉及到Read階段,因此您必須深入瞭解源代碼,以瞭解讀取階段是使用多個線程讀取還是不使用。