【问题标题】:Cassandra connections best practiceCassandra 连接最佳实践
【发布时间】:2015-03-25 07:24:15
【问题描述】:

我将 Node JS 与 Cassandra 一起使用,我想知道最好的交互方式是什么。我有多个与 Cassandra 交互的模块,我想知道这样做是否更好

  1. 为所有模块保持单一连接
  2. 为每个模块设置一个连接,或者最好这样做;
  3. 每次我有请求时都连接到 Cassandra。

此 Web 应用程序使用 Cassandra 处理大部分请求。

【问题讨论】:

    标签: javascript node.js cassandra database nosql


    【解决方案1】:

    我建议你使用DataStax Node.js driver for Cassandra,它具有连接池和透明的故障转移功能,你只需要执行查询,它会为你处理其余的事情。

    var cassandra = require('cassandra-driver');
    var client = new cassandra.Client({
      contactPoints: ['host1', 'host2'], 
      keyspace: 'ks1'
    });
    var query = 'SELECT email, last_name FROM user_profiles WHERE key=?';
    //the driver will handle connection pool and failover
    client.execute(query, ['guy'], function(err, result) {
      assert.ifError(err);
      console.log('User profile email ' + result.rows[0].email);
    });
    

    免责声明:我是该项目的积极开发者

    【讨论】:

    • 我正在使用这个驱动程序。您建议为每个模块保留一个连接还是一个连接?
    • 一个客户端代表一个连接到多个主机的池,你应该使用一个客户端实例并在你的所有模块中重用它:datastax.com/documentation/developer/nodejs-driver/1.0/…
    【解决方案2】:

    我会汇集连接并回收它们,而不是使用您列出的选项之一。这样你就不需要破坏已经创建的连接。我唯一会厌倦的就是游泳池太大,所以一定要设置一个合理的阈值。

    类似这样的:

    no connections are available in pool
      create connection (add it back once finished using it)
    connections are available in pool
      fetch connection from pool
    

    选择池而不是硬编码数字的原因:

    1. 为所有模块保持单一连接 - 这将是一个瓶颈,除非您正在运行单线程应用程序并且您没有
    2. 为每个模块设置连接 - 您需要为我们提供更多上下文。根据每个模块的线程化程度,这可能是一个不错的方法。
    3. 每次我有请求时都连接到 Cassandra - 建立连接并不便宜(下面的代码),所以不要丢弃它们!

    .

    Cluster cluster = Cluster.builder().addContactPoints("localhost").build();
    long start = System.currentTimeMillis();
    Session session = cluster.connect();
    System.out.println(String.format("Took %s ms", System.currentTimeMillis() - start));
    

    输出:490 毫秒

    【讨论】:

      猜你喜欢
      • 2016-05-19
      • 2015-08-03
      • 2012-10-10
      • 2022-07-08
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2013-07-07
      相关资源
      最近更新 更多