文章
Michael Lei · 十二月 8, 2021 阅读大约需 3 分钟

翻译文章:大型数据集的存储注意事项

我想与您分享一些在 Caché 中同样存在但几乎不为人知且大多未使用的存储功能。 它们当然可以在 IRIS 中使用,并且在大型分布式存储架构中变得越来越重要。 当您在 EDI 或使用 DDL 的表中定义持久类时,您通常会选择一个有意义的名称, 该名称与您的上下文中的表内容相关。 您知道数据和索引存储在 Globals 中,但您不必关心它。 该定义由编译器根据类或表的名称来完成。 除了超过 29 个字符的类名称外,您可以很容易地预测标准全局名称, 如[文档](https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY...)中所述。 这相当舒适,可以让您专注于解决方案的逻辑。
它对性能几乎没有影响,因为数据库内部卓越的存储方法采用高效的压缩算法。 在数据库外部,我们有多个部分受到长全局名称的影响:
首先是磁盘存储空间上的日志。 接着是通过某些网络传输全局名称的任何功能:纯 ECP、镜像、分片。
由于所有技术改进都没有改变速度排名:Memory > Storage > Network > User。
因此,对于密集的网络流量(分片、ECP)或日志+网络(镜像),存在一些缺点。

Class dc.MyCompany.EmployeeRegister Extends %Persistent
Storage Default
<DataLocation>^dc.MyCompany.EmployeeRegisterD</DataLocation>
<IdLocation>^dc.MyCompany.EmployeeRegisterD</IdLocation>
<IndexLocation>^dc.MyCompany.EmployeeRegisterI</IndexLocation>
<StreamLocation>^dc.MyCompany.EmployeeRegisterS</StreamLocation>

 

为了控制全局名称,存在一个参数 DEFAULTGLOBAL
,将它应用于前面的示例,我们看到以下结果:

/// Set the root of the global names
Parameter DEFAULTGLOBAL = "^dc.er";
Storage Default
<DataLocation>^dc.erD</DataLocation>
<IdLocation>^dc.erD</IdLocation>
<IndexLocation>^dc.erI</IndexLocation>
<StreamLocation>^dc.erS</StreamLocation>

这要好得多,但还不是您能达到的最好水平。如您所知,通过这种方式,每个索引都存储在<IndexLocation> 的第一个下标级别。 
如果您的类/表有许多索引,那么这个第一级可能非常重要。
如果您具有以下混合,那么此混合将不具有吸引力:
- 纯键索引
-有序索引
- 含数据的索引
- 位图索引和位片索引
使每个索引位于自己的全局中会更有效

要在个别 Globals 参数上拆分索引,USEEXTENTSET 是解决办法。扩展先前的示例,我们可以看到以下结果:

Parameter DEFAULTGLOBAL = "^dc.er";
Parameter USEEXTENTSET = 1;
Storage Default
<DataLocation>^dc.er.1</DataLocation>
<ExtentLocation>^dc.er</ExtentLocation>
<IdLocation>^dc.er.1</IdLocation>
<Index name="IDKEY"><Location>^dc.er.1</Location></Index>
<Index name="xDOB"><Location>^dc.er.2</Location></Index>
<Index name="xName"><Location>^dc.er.3</Location></Index>
<IndexLocation>^dc.er.I</IndexLocation>
<StreamLocation>^dc.er.S</StreamLocation>  

现在每个索引都有一个同质的存储结构。
如果你省略参数DEFAULTGLOBAL,你会得到生成的全局名称。
如果你运行Sharding,这是默认设置。在这种情况下:

Parameter USEEXTENTSET = 1;
Storage Default
<DataLocation>^BLWQ.C069.1</DataLocation>
<ExtentLocation>^BLWQ.C069</ExtentLocation>
<IdLocation>^BLWQ.C069.1</IdLocation>
<Index name="IDKEY"><Location>^BLWQ.C069.1</Location></Index>
<Index name="xDOB"><Location>^BLWQ.C069.2</Location></Index>
<Index name="xName"><Location>^BLWQ.C069.3</Location></Index>
<IndexLocation>^BLWQ.C069.I</IndexLocation>
<StreamLocation>^BLWQ.C069.S</StreamLocation>

最后说明:
这两个参数的影响只有在相当大的数据集中才能识别出来,
尤其是在任何 Sharding 安装中。

 

您可以在以下文档中找到更多信息
  散列全局名称索引全局名称表定义优化

</body></html>

 

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