我正在从我的应用程序解析数以千计的csv文件,对于每个已解析的行,我正在插入Cassandra。似乎在让它运行后它停止在2048插入并抛出BusyConnection错误。
对我来说,制作大约100万个插页的最佳方法是什么?
我应该将插入字符串作为字符串导出到文件中,然后直接从CQL运行该文件以进行大量插入,这样我就不通过网络实际执行此操作了吗?
答案 0 :(得分:0)
我们使用脚本来解决这些问题。
脚本通过输入数据和......
ad 1.对于我们的配置和数据(最多10列,主要是数字和短文本),我们发现500到1000行是最佳的。
ad 2.我们将等待时间定义为n * t。其中 n 是单次运行脚本中处理的行数。 t 是时间常数,以毫秒为单位。 t 的值很大程度上取决于您的配置;但是,对于我们来说, t = 70 ms足以使流程顺利进行。
答案 1 :(得分:0)
100万个请求 - 真的不是那么大,你可以使用cqlsh
命令从COPY FROM
加载它。但您也可以通过Java代码加载这些数据。
从错误消息中看起来您正在使用异步API。您可以将它用于高性能插入,但是您需要控制同时处理的请求数量(所谓的飞行中请求)。
这里有几个方面:
session.executeAsync
与某个计数器包装在一起来控制正在进行的请求数量,例如in this example(不是最好的,因为它限制了每个会话的总请求数,而不是在与各个主机的连接上 - 这将需要更多的逻辑,特别是在令牌感知请求周围。)