这里写自定义目录标题
注意: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会更好用。