0

我在 datastax ( https://astra.datastax.com/ ) 中创建了一个测试帐户,并想测试 cassandra。

那里的主页是一个 cqlsh 控制台。如果我选择数据会非常快,可能需要 1 毫秒。

如果我将它与 nodejs 和 cassandra 驱动程序一起使用,则需要 2-3 秒。而且我只有一排。

为什么需要时间?是我的代码错误吗?

const { Client } = require("cassandra-driver");

async function run() {
  const client = new Client({
    cloud: {
      secureConnectBundle: "secure-connect-weinf.zip",
    },
    keyspace: 'wf_db',
    credentials: {
      username: "admin",
      password: "password",
    },
  });

  await client.connect();

  // Execute a query
  const rs = await client.execute("SELECT * FROM employ_by_id;");
  console.log(`${rs}`);

  await client.shutdown();
}

// Run the async function
run();
4

1 回答 1

0

不幸的是,这不是苹果对苹果的比较。

每次您的应用程序连接到 Cassandra 集群(Astra或其他)时,驱动程序都会执行以下高级步骤:

  1. 解压安全包以获取集群信息
  2. 通过 Internet 打开 TCP 连接
  3. 创建到集群中的一个节点的控制连接
  4. 使用控制连接从集群中获取模式
  5. 使用控制连接发现集群的拓扑
  6. 打开与集群中节点的连接
  7. 计算查询计划(基于负载均衡策略连接的主机列表)
  8. 最后,运行查询

相比之下,当您在 Astra 仪表板上访问 CQL 控制台时,UI 会自动连接 + 对集群进行身份验证,并且当您键入 CQL 语句时,它会执行以下步骤:

  1. 已跳过(您已通过集群身份验证)
  2. 已跳过(已连接到同一本地 VPC 中的节点)
  3. 已跳过(已连接到集群)
  4. 已跳过(已连接到集群)
  5. 已跳过(已连接到集群)
  6. 已跳过(已连接到集群)
  7. 已跳过(已连接到集群)
  8. 最后,运行查询

如您所见,CQL 控制台的开销与重复运行仅包含 1 个 CQL 语句的应用程序的开销不同。

实际上,您的应用程序将在应用程序的整个生命周期中重复使用相同的集群会话来执行查询,因此它不会像重新运行上述应用程序那样具有相同的开销。初始化阶段(上面的步骤 1 到 6)仅在应用程序启动时完成。一旦它已经运行,它只需要执行第 7 步和第 8 步。干杯!

于 2021-07-21T08:27:29.520 回答