【发布时间】:2012-04-03 11:04:51
【问题描述】:
Cassandra 是使用并发线程来读取列族的 sstable 以服务于对行键的读取请求,还是使用单个工作线程来完成跨多个 sstable 的查找工作?
[使用并发线程和单线程] 的开销是多少?
【问题讨论】:
标签: cassandra
Cassandra 是使用并发线程来读取列族的 sstable 以服务于对行键的读取请求,还是使用单个工作线程来完成跨多个 sstable 的查找工作?
[使用并发线程和单线程] 的开销是多少?
【问题讨论】:
标签: cassandra
Cassandra 实现了分阶段的事件驱动架构 (SEDA),请参阅 SEDA
在典型的应用程序中,单个工作单元通常在单个线程的范围内执行。例如,写操作将在同一个线程内开始和结束。然而,Cassandra 不同:它的并发模型基于 SEDA,因此单个操作可能从一个线程开始,然后将工作移交给另一个线程,另一个线程可能将其移交给其他线程。但是当前线程不能将工作交给另一个线程。相反,工作被细分为所谓的stages,与stage 相关的线程池(实际上是一个java.util.concurrent.ExecutorService)决定了执行。一个阶段是一个基本的工作单元,单个操作可以在内部从一个阶段状态转换到下一个阶段。因为每个阶段都可以由不同的线程池处理,Cassandra 体验到了巨大的性能提升。 Read 在 cassandra 中表示为一个阶段,因此 Read 阶段肯定涉及多个线程,您必须深入查看源代码才能了解 read 阶段的多个线程是否用于读取。
【讨论】: