如何在 cassandra 中制作 100 万个插入

how to make 1 million inserts in cassandra

我正在从我的应用程序解析数以千计的 csv 文件,并且我正在为每个解析的行插入到 Cassandra 中。似乎让它 运行 它停止在 2048 插入并抛出 BusyConnection 错误。

我制作大约 100 万个插入的最佳方法是什么?

我是否应该将插入内容作为字符串导出到一个文件中,然后 运行 该文件直接从 CQL 生成这些大量的插入内容,这样我实际上就不会通过网络进行操作?

我们使用脚本解决此类问题。

脚本遍历输入数据并...

  1. 每次从输入中获取特定数量的数据。
  2. 等待特定的时间。
  3. 继续读取和插入数据。

ad 1. 对于我们的配置和数据(最多 10 列,主要是数字和短文本),我们发现 500 到 1000 行是最佳的。

ad 2. 我们将等待时间定义为 n * t。其中 n 是在单个 运行 脚本中处理的行数。 t 是以毫秒为单位的时间常数。 t 的值在很大程度上取决于您的配置;然而,对我们来说t = 70 ms 足以使过程顺利进行。

100 万个请求 - 这并不是一个很大的数字,您可以使用 COPY FROM 命令从 cqlsh 加载它。但是您也可以通过 Java 代码加载这些数据。

从错误消息看来,您正在使用异步 API。您可以将它用于高性能插入,但您需要控制同时处理多少请求(所谓的,飞行中的请求)。

这里有几个方面:

  1. 从协议的版本 3 开始,每个连接最多可以有 32k 个正在运行的请求,而不是默认使用的 1024 个。你can configure it when creating Cluster object.
  2. 您需要通过将 session.executeAsync 与一些计数器包装在一起来控制正在运行的请求数,例如 in this example (不是最好的,因为它限制了每个会话的总请求数,而不是在与单个主机的连接上——这将需要更多的逻辑,尤其是围绕令牌感知请求。