在插入过程中截断表

hjqgdpho  于 2021-06-10  发布在  Cassandra
关注(0)|答案(2)|浏览(464)

我想了解 truncate 命令在cassandra(版本3.9)中工作,以便能够知道在以下场景中会发生什么:
我在生产中的一个表上有大约100gb的数据,这个表需要被截断。
我想截断这个表,但同时每秒会有几百个请求同时进行插入。
我试图从理论上理解这会是怎样的结果。
会不会 truncate 试着在表上获取某种锁,然后它才能继续?可能会停止插入请求,或者本身会超时?
或者 truncate 当请求传入时,按顺序进行操作,随后的insert请求将创建额外的行,在截断之后,我将得到剩余的少量行。
我只是想回收空间,所以我并不特别关心truncate命令之后运行的insert请求是否还有少量数据。
我只是想知道你是希望它成功完成还是失败/超时。
我将尝试在一个较小的集群上运行类似的场景,但我不确定这是否是理解实际行为的好替代方案。任何输入都会有帮助。

watbbzwu

watbbzwu1#

我自己也试过。在一个2节点的cassandra集群上,我在后台以大约每秒160个请求的速度进行了插入,并在具有大约200000条记录的同一个表上运行了一个truncate查询。
表被截断,插入操作继续进行,没有出现错误。
截断后插入的新行显示在数据库中。

lxkprmvk

lxkprmvk2#

truncate向所有节点发送一条消息,请求在执行时删除所有sstable,在发出truncate之后,您将只收到这些upserts的信息。
在datastax文档中,这是用jmx完成的,但是看看这个答案的注解,这是用cql和消息传递服务完成的。
如果您试图回收磁盘空间,请注意,将使用truncate if创建快照 auto_snapshot 设置为true(true是默认值),因此需要在执行命令后删除快照。另外,请注意 truncate 需要所有节点都正常运行才能完成。

相关问题