通过Singleton类获取会话会对并行查询执行产生影响

时间:2015-05-05 21:29:10

标签: c++ cassandra

我们正在努力将我们的应用程序数据库从Oracle更改为Cassandra。我们使用Datastax c / c ++驱动程序连接到cassandra数据库。在应用程序中,将在同一个Keyspace的表上同时执行多个查询。我们计划定义一个单例类来获取集群的会话并在整个应用程序中使用它。但是,如果同一会话同时执行多个查询,这是否会产生影响。任何人都可以建议一个很好的方法来实现这一目标。提前谢谢。

1 个答案:

答案 0 :(得分:4)

不会。实际上,建议您每个键空间仅使用1个会话。正如4 simple rules when using the DataStax drivers for Cassandra中所述,前两条规则适用于此:

  
      
  1. 每个(物理)群集使用一个群集实例(每个应用程序生命周期)
  2.   
  3. 每个键空间最多使用一个会话,或使用单个会话并明确指定查询中的键空间。
  4.   

会话包含一组与cassandra主机的连接。如果在共享此会话的不同线程中有多个查询,则可以正确,因为它是线程安全的,并且将共享连接。在Architecture doc中为cpp驱动程序引用:

  

CassSession旨在从多个线程同时使用。最佳做法是为每个键盘创建一个会话。 CassFuture也是线程安全的。除了这些异常之外,通常,修改对象状态的函数不是线程安全的。多个线程可以安全地读取不可变的对象(标记为const)。没有任何自由函数可以在对象的同一个实例上连续调用。

创建额外的会话并不能真正为您提供更多价值。如果遇到压力过大的问题,可以通过配置进行更多配置。