我有一个批量推送(INSERT)记录到Cassandra集群的Java客户端。批处理中的元素都具有相同的行键,因此它们全部将放置在同一个节点中。此外,我不需要交易是原子的,所以我一直在使用未记录的批次。卡桑德拉的批量限制是多少?
每个批次中的INSERT命令的数量取决于不同的因素,但可以是5到50000之间的任何值。首先,我只放入与我在一批中一样多的命令并提交它。这扔了com.datastax.driver.core.exceptions.InvalidQueryException: Batch too large
。然后,我使用了每批1000 INSERT的帽子,然后降到300.我注意到我只是随机猜测,并不知道这个限制来自哪里,这可能会导致麻烦。
我的问题是,这是什么限制?我可以修改它吗?我如何知道一批中可以放置多少个元素?当我的批次是“满”?
这就是我正在寻找,谢谢。你知道什么是监视客户端批量大小的最佳方法吗? –
取决于您使用的驱动程序,但在java驱动程序中,您可以在批处理中的每个单独语句中使用getValues(),它会返回一个ByteBuffers数组,以便使用remaining()方法获取大小缓冲区单独和总结他们,但总的来说,我不会推荐这样做。你不应该创造超大型的批次,只要足够大,你就可以感觉到你远不及接近这个极限。 –
这里还有一堆东西。 C *按列而不是行来设计,C *表示每个分区有2B列,但根据经验我们知道最佳点是100MB。所以即使使用100MB分区,并且如果批处理的默认大小为50KB,就像100MB/50KB = 3125请求检索100MB分区一样,那么请求的方式太多。 – user1870400