Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 一个下标维度到另一个数据库的全局映射_Performance_Hierarchical Data_Intersystems Cache - Fatal编程技术网

Performance 一个下标维度到另一个数据库的全局映射

Performance 一个下标维度到另一个数据库的全局映射,performance,hierarchical-data,intersystems-cache,Performance,Hierarchical Data,Intersystems Cache,我在Caché2007上有一个供应商定义的数据库(总共约140GB)。它使用老式的流行性腮腺炎编程环境,以分层方式直接访问全球语言。有一个全局数据库约占数据库总大小的75%。此表中的第一个下标是人工整数帐号。接下来的2-3个下标是常量子记录标识符,用于分解字段块并表示重复的子记录类型 其中一个重复子记录(记录类型30)用于帐户上的注释。由于系统的使用方式,这个维度占全球总空间的很大一部分;我估计至少有50%。由于Caché将数据物理存储在数据库中的方式,对该全局文件的扫描最终会作为副作用加载所有

我在Caché2007上有一个供应商定义的数据库(总共约140GB)。它使用老式的流行性腮腺炎编程环境,以分层方式直接访问全球语言。有一个全局数据库约占数据库总大小的75%。此表中的第一个下标是人工整数帐号。接下来的2-3个下标是常量子记录标识符,用于分解字段块并表示重复的子记录类型

其中一个重复子记录(记录类型30)用于帐户上的注释。由于系统的使用方式,这个维度占全球总空间的很大一部分;我估计至少有50%。由于Caché将数据物理存储在数据库中的方式,对该全局文件的扫描最终会作为副作用加载所有或大部分注释,即使它们与大多数操作无关。这会大大增加全球范围内IO操作的成本,尤其是当您只需要一堆客户的一个微小细节时

此全局变量的下标引用示例:

^ACCT(3461,10,1)="SOME^DATA"
^ACCT(3461,10,2)="MORE^DATA"
...
^ACCT(3461,30,1)="NOTE1 blah blah"
^ACCT(3461,30,2)="NOTE2 blah blah"
...
^ACCT(3461,30,100)="NOTE100 blah blah"
我不能改变数据库的设计。它由外部供应商控制,数据库中有大量腮腺炎类型的硬编码参考。我认为,批量操作在系统上如此缓慢的一个重要原因是,每当访问帐户数据时,IO过程中出现的这些几乎不相关的注释成本很高。扫描整个全局(即,当没有有用的应用程序维护索引时)至少需要8小时

我的一个想法是,通过使用和中描述的全局映射功能,将注释数据从与全局中的其他细节一起存储转移到单独的数据库文件中。如果我能将所有的30个下标映射到同一个Caché数据库中的一个单独的数据库文件,那么大多数数据操作(那些甚至不关心注释的操作)就不会将它们连同它们关心的细节一起带到内存中

在《全局结构指南》(第一个链接)中,这看起来似乎是合理的,因为它们分别显示了特定的第二个下标映射,而不是第一个下标。在任何示例中,它们都没有显示实现这一点的语法。在Caché管理门户中的“添加新的全局映射”屏幕中,我应该能够执行以下操作

Global name: ACCT
Subscripts to be mapped: (BEGIN:END)(30)
但是无论我在语法中尝试了什么变化,我总是得到
ERROR(参考文献1下标1中的下标无效)。


StackExchange注意:这个问题可能更适合dba.StackExchange.com,但显然这里没有系统间问题,我认为它不会引起任何注意。

不幸的是,虽然可以映射特定节点的二级下标,不可能映射所有节点的二级下标


WRC上有一个经验丰富的性能团队,您是否尝试与他们联系?

当您说“因为Caché在数据库中存储数据的方式”——您知道这方面的参考资料吗?如果你愿意的话,我可以发布一个关于它的问题。如果你在我的“使用CachéGlobals指南”链接的标题“如何存储Globals”下的某个部分。总的来说,数据存储在按下标深度排序的B+树中。在“要映射的下标”框中映射特定的第二级下标的语法是什么?我在任何地方都找不到它。我不确定我们是否通过Intersystems获得了直接支持:我们通过最初设计db的ISV获得了缓存。他们可能会向我们收取费用,让我们知道这是一周中的哪一天。对于从^A(1,2,…)开始的所有三级节点,这是^A(1,2),或者^A(1,开始:1000000)对于^A(1)的前1000000个节点,关于支持问题,只需向WRC发送电子邮件并询问-您有可能获得直接的系统间支持,这通常是非常棒的。