不要使用二进制格式
当使用如protoBuf
、msgpack
或者java
自带的二进制格式进行序列化时候,为了节约数据量的原因,会将类里的字段按字段在类中出现的顺序进行序列化。
当我们因为需求进行升级时,可能会对类里的字段进行增删或者移动。此时,我们之前存储在jimdb
里的数据在读取回来进行反序列化时就会报错。
因为上述原因,我们推荐用顺序兼容&新增字段兼容的序列化方式,如JSON
,进行数据的存储。
如何进行一些压缩数据
当我们用类似JSON
的格式进行类序列化时候,会将类中所有字段名称一起进行序列化,虽然这能够解决上述序列化兼容性问题,但是会带来存储浪费。
- 当一个类的某个字段长度为
50
字符时,当数据达到1000W
条时,在jimdb
里就占有5000W
字符。这种显然是一种浪费 - 因为个人命名习惯,可能类中字段名称超长,当采用类似
JSON
格式序列化时,也是一种浪费存储
为了实现序列化兼容,同时尽可能节约存储,推荐采用fastjson
或gson
的自定义序列化列名的方式进行:fastjson
的方式如下:
/**
* erp账号
*/
@JSONField(name = "1")
private String userName;
/**
* 真名
*/
@JSONField(name = "2")
private String realName;
gson
的方式如下:
/**
* id
*/
@SerializedName(value = "1", alternate = "id")
private Long id;
/**
* 路由字段
*/
@SerializedName(value = "2", alternate = "routeParam")
private String routeParam;
通过数字或者其它比如字母的方式来改写序列化后的字段名称,既能保证序列化的兼容性又能保证存储容量尽可能的少