选择。2:删除冗余属性值¶
SpatialJSON编写器实现¶
将哪些字符串添加到共享字符串表完全由SpatialJSON编写器决定。可以使用几种策略。但是,此模块中的当前实现不会尝试创建 optimal 共享字符串表。为了更快,字符串在功能被序列化时被添加。构建最优表可能需要多次迭代特性、计算字符串的频率等。
尽管如此,该模块的SpatialJSON编写器有一些构建共享字符串表的简单规则。即使是在最糟糕的情况下,如果不使用共享的字符串表,它们也会尽量(至少)不使用相同结果所需的(太多)字节。(理论上,有时共享字符串表会向结果中添加一些额外的字节。)然而,对于大多数现实世界的数据集,该策略可以节省中等到大量的字节。
以下是阻止字符串添加到共享字符串表的规则:
字符串的UTF-8编码字节长度小于硬编码的最小长度(当前为2,将来可能可配置)
共享的STIN表已满,即它包含2,147,483,647个条目(不是真正需要的)
字符串的UTF-8编码字节长度(包括引号)小于其指定索引的位数
显然,如果数据集只包含几个不同的大字符串,则可以实现最大的节省。例如,包含枚举值的属性可能就是这种情况。在数据集中使用某个字符串的频率越高,使用共享字符串表可以节省的空间就越多。相反,如果编码特征集中的每个字符串只使用一次(例如,包含随机或类似UUID的字符串的属性),将不会实现节省(事实上,在这种情况下使用共享字符串表将产生更大的结果)。
Previous: 选择。1:删除冗余架构信息
Next: 堆叠数据存储区扩展