开发者社区> 问答> 正文

listState问题

Hi all, 我在使用listState的时候,通过get获取listState以后,想删除里面的元素。类似这样: Iterable it = listState.get(); Iterator itor = it.iterator(); ... itor.remove(); 如果选用Memory或者Fs StateBackend,ListState里的元素可以正确删除 如果选用RocksDB StateBackend,ListState里的元素不能删除,再调用update(list)才能将删除了元素的list更新到状态里面

我理解这是因为RocksDB StateBackend操作state需要序列化和反序列化的原因,不过每次删除元素都要update会不会效率很低,有更好的办法删除元素吗?

谢谢!*来自志愿者整理的flink邮件归档

展开
收起
雪哥哥 2021-12-07 16:17:06 518 0
1 条回答
写回答
取消 提交回答
  • 你好

    现在是需要通过 update 来更新整个 state value 的

    1. RocksDBListState#get 获取到的是一个反序列化之后内存 list 对象,对这个对象做任何操作都不会反应到 list state 中
    2. 现在 RocksDBListState 把整个 list 作为一个 value 保存的,如果你需要获取整个 list,然后删除某个元素,然后再更新整个 list,在实现上都需要进行所有的反序列化 --> 删除元素 --> 序列化操作(这一点和 RocksDBMapState 不太一样)*来自志愿者整理的flink
    2021-12-07 16:36:43
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载