文章
· 三月 6 阅读大约需 2 分钟

使用USEEXTENTSET减小Journal大小

[翻译文章:大型数据集的存储注意事项]这篇文章其实很有用, 但恐怕注意的人不多,特意写文章介绍一下。

 

USEEXTENTSET翻译过来就是"使用EXTENT集合“,不够直白,它的工作简单说就是:通过哈希类名,使用更短的Global名字

ObjectScript的持久类编译后会默认使用"^类名D" 和"^类名I"的global来存储数据和索引, 当在类定义里加入`Parameter USEEXTENTSET = 1;` 这句话后, 会使用一个自动生成的短类名。 比如*Class User.EMR.MSG.Items.FirstPageCostsItem1*, 默认的存储为类似“^User.EMR.MEC31.FirstPageCoC0D4D”, 使用USEEXTENTSET“后会定义为“^U3Dx.EOXs.1”。

 

短Global名字的好处 

global名字缩短了,数据和索引的占用并不会改变。改变的是Journal的尺寸。 同样的表和数据插入, 之前的Journal是这样的:

 

使用短global名字后的journal记录是这样的:

 

 

我的测试中, 使用USEEXTENTSET减少了30%的Journal尺寸。

 

如原文中提醒, 不仅仅是Journal的减少,对ECP, Mirror, Shadow等都会有性能上的提升,这些Feature都传输了Global名字。 如果还希望Global名字更小一些, 可以试试使用“Parameter DEFAULTGLOBAL ”。 另外,USEEXTENTSET会为每个索引使用不同的Global, 看上去更合理一些。

结论:应该作为objectscript持久类定义的默认配置。 当前版本中只是使用"CREATE TABLE"创建表的时候默认使用USEEXTENTSET, 用代码定义类时还需要手工加上这个Parameter. 

讨论 (0)1
登录或注册以继续