【java】flink-cdc获取doris转存mysql的bitmap

这里写自定义目录标题


注意:doris官网指定了java读bitmap要加

dstmt.execute("set return_object_data_as_binary=true"); // IMPORTANT!!!

后面还标注了IMPORTANT并且加了3个感叹号,说明真的好重要,当初我连接的时候就没看见结果浪费一天。。。

1。在java中更改doris的bitmap成roaringBitmap。

有人会说doris的bitmap不就是roaringBitmap吗?

我想说,都是bitmap但是解析起来就是有一定差距,

由于我的id是字符串,所以doris用的是bitmap_hash64不是to_bitmap所以我要用,你看里面一个元素和多个元素要分开弄,所以从doris读取的时候要先识别一下bitmap里面到底有多少个元素。

解析成功后,在用java里面的roaringBitmap重新包一下

  Roaring64NavigableMap roaring64NavigableMap = Roaring64NavigableMap.bitmapOf(bitmap64.toArray());
                ByteArrayOutputStream bout = new ByteArrayOutputStream();
                DataOutputStream dout = new DataOutputStream(bout);
                roaring64NavigableMap.serialize(dout);
                byte[] bitmapBytes = bout.toByteArray();

这样就可以好无负担的存mysql了。

2。flink-cdc获取bitmap。

这个就很简单了,存的时候用的byte[]的方式存,mysql数据库是binary类型。取的时候也是binary类型,再用roaring64NavigableMap 转一下就可以了。

byte[] bitmap_value = row.<byte[]>getFieldAs("bitmap_value");
Roaring64NavigableMap bitmap64 = Roaring64NavigableMap.bitmapOf();
bitmap64.deserialize(new DataInputStream(new ByteArrayInputStream(bitmap_value)));

3。总结

我们的架构就是有这块的需求,doris2.0也发布了,相信以后的doris会更好用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值