我需要将mysql中的业务数据存储到bolt中。数据为map[string]string
,如下所示:
{"id": "<uuid>", "shop_id":"12345678", "date": "20181019"... }
由于数据量将不断增加,除了将数据拆分为独立文件(例如201810.db)外,我还要使最终文件尽可能小。因此,我计划自己使用“查找表”对数据进行编码,也就是说,由于所有键对于所有数据项都是相同的,因此我将id映射为shop = 1,shop_id = 2,...从而使键仅消耗1〜 2个字节。对于值,我也进行相同的编码,因此高度冗余的列(即,选择“不重复”仅返回一些结果)将在螺栓文件中占用较少的空间。
现在我的问题是:bolt如何存储键和值?如果使用上述方法,螺栓将“每页”存储更多对象,以便最终提高空间效率吗?
或者,由于它利用了“页面”,因此即使存储一个字节的数据也会消耗整个页面?如果是这种情况,我是否必须手动对一堆对象进行分组,直到它们的合并大小大于螺栓页面才能使其“完全填充”?当然,这会损害随机访问,但是对于我的应用程序来说,可以通过增加编码复杂性来克服它。