记一次异构架构之间的数据传输, update@20210815
背景
需要从一个C++的外部的接口向java传输行情数据
数据类型的选取
需要从C/C++中找一个对应java的byte类型, C++可以使用uint8_t数组, 对各数据逐个的存储,也可使用指针类型转化,直接发送基本类型或结构体类型。对于结构体类型,注意struct可能存在内存对齐的优化,最好禁用,向下游屏蔽该细节。
大小端问题
需要考虑大小端(big/littleendian), 解决方案采用了移位, 与
注意移位操作是逻辑运算与编译,机器的大小端这种物理存储方式无关
数据存储
背景是需要在列式数据库中存储多个品种的行情,考虑到减少列以及表的统一,采用了解开行情对象,业务字段之间按分隔符隔开的方案,使用再重新组装,但是后来架构师提了一个更好的方案 ,即数据库直接存储行情对象的byte数组,这样查出来的时候直接反序列化即可。思考问题还是要站在更高的视野,采用存储byte数组的方案也有一个明显的缺点就是数据库终端无法再直接查看行情内容,但是考虑到实际的业务应用以及编程方案的合理性(手动拼接与反解析对业务字段的顺序要一致,没有直接序列化与反序列化好),综合考虑还是要架构师的方案比较好。
二进制数据存储
验证发现, tdengine无法直接存储二进制数据, 一个方案是采用base64