Cassandra是否使用并发线程来读取列族的sstables来为行键提供读取请求,或者单个工作线程是否可以在多个sstables中查找?
另一个[使用并发线程和单线程]的开销是多少?
答案 0 :(得分:1)
Cassandra实施分阶段事件驱动架构(SEDA),请参阅SEDA
在典型的应用程序中,单个工作单元通常在单个线程的范围内执行。例如,写操作将在同一线程内开始和结束。然而,Cassandra是不同的:它的并发模型基于SEDA,因此单个操作可以从一个线程开始,然后将该工作交给另一个线程,该线程可以将其移交给其他线程。但这不是由当前线程将工作交给另一个线程。相反,工作细分为所谓的阶段,与阶段关联的线程池(实际上是java.util.concurrent.ExecutorService)决定执行。阶段是一个基本的工作单元,单个操作可以在内部状态 - 从一个阶段过渡到下一个阶段。因为每个阶段都可以由不同的线程池处理,所以Cassandra可以实现大规模的性能提升。读取被表示为cassandra中的一个阶段,因此在读取阶段中肯定涉及多个线程,您必须深入了解源代码以了解读取阶段中的多个线程是用于读取还是否。