【问题标题】:cassandra reads across multiple read requestscassandra 跨多个读取请求读取
【发布时间】:2012-04-03 11:04:51
【问题描述】:

Cassandra 是使用并发线程来读取列族的 sstable 以服务于对行键的读取请求,还是使用单个工作线程来完成跨多个 sstable 的查找工作?

[使用并发线程和单线程] 的开销是多少?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    Cassandra 实现了分阶段的事件驱动架构 (SEDA),请参阅 SEDA

    在典型的应用程序中,单个工作单元通常在单个线程的范围内执行。例如,写操作将在同一个线程内开始和结束。然而,Cassandra 不同:它的并发模型基于 SEDA,因此单个操作可能从一个线程开始,然后将工作移交给另一个线程,另一个线程可能将其移交给其他线程。但是当前线程不能将工作交给另一个线程。相反,工作被细分为所谓的stages,与stage 相关的线程池(实际上是一个java.util.concurrent.ExecutorService)决定了执行。一个阶段是一个基本的工作单元,单个操作可以在内部从一个阶段状态转换到下一个阶段。因为每个阶段都可以由不同的线程池处理,Cassandra 体验到了巨大的性能提升。 Read 在 cassandra 中表示为一个阶段,因此 Read 阶段肯定涉及多个线程,您必须深入查看源代码才能了解 read 阶段的多个线程是否用于读取。

    【讨论】:

      猜你喜欢
      • 2013-10-26
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 2015-09-30
      • 2018-10-08
      • 2018-04-15
      • 2013-12-12
      相关资源
      最近更新 更多