是否为每个客户端创建一个Cassandra会话,以确保客户端数量较少?

时间:2018-03-27 14:28:49

标签: cassandra datastax

我正在创建一个工具,允许用户通过图形用户界面对Cassandra DB进行CRUD操作。我首先计划让客户建立自己与群集的连接,然后每个人都进行一次会话,但在做研究之后,每个人都说你应该只使用一个会话。现在我有两个解决方案:

1。 正如我先计划的那样,无论如何都要使用多个会话。

  • 设置很容易,工具打开时只需要工具调用 ISession session = cluster.Connect();
  • 可能很慢?我不知道,我认为它不会因为客户端数量少而缓慢
  • 可能有危险,CRUD操作可能会出现意外行为?从我能收集到的情况并非如此
  • 我的雇主可能因为没有遵守标准而杀了我?如果这个解决方案易于理解且问题可以忽略不计,我怀疑这种情况会发生。

2。 使用客户端 - 服务器连接并将CQL查询发送到服务器,然后发送到数据库,然后将结果返回给客户端。

  • 我只需要一个与服务器中的DB通信的会话
  • 还有很多工作
  • 实际上必须维护一块硬件来运行服务器,如果它停机,则无法使用该工具
  • 由于客户端 - 服务器之间增加了一层通信,它可能会很慢?我不知道
  • 做得更难,我必须建立一个管理每个案例的网络通信协议

3。 我没想到/知道的第三个解决方案。

举一个例子,假设我们有10个客户同时工作(我怀疑会有很多客户同时工作)并且因为我很好奇,考虑是否同时有100个客户端。

我真的倾向于解决方案1.但我也非常希望得到经验丰富的人的第二意见。所以是的,我可以使用解决方案1还是错误/危险?我正在使用DataStax C#Driver for Apache Cassandra 3.4.1版

更新 是否可以序列化 ISession 实例并将其发送到客户端进行重构和使用?这将是两全其美的,因为那时我可以与多个客户端共享一个进程,而无需设置网络协议。每次客户端启动时,只需要向服务器询问会话实例,然后就像在主机中创建它一样使用它。

1 个答案:

答案 0 :(得分:0)

最好在一个进程内共享会话,但如果您有多个单独的进程,那么如果您保持客户端数量相对较低,则可以单独进行会话。请注意,通常驱动程序会打开与群集中每个节点的连接,直到您明确覆盖负载平衡策略(但只有在您明确知道自己的操作时才需要执行此操作)。