0

我在 Caché 2007 上有一个供应商定义的数据库(总共约 140GB)。它使用旧式 MUMPS 编程环境并以分层样式直接访问全局变量。有一个全球约占总数据库大小的 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"

我无法更改数据库的设计。它由外部供应商控制,并且数据库中有大量 MUMPS 风格的硬编码参考。我认为,批处理操作在系统上如此缓慢的一个重要原因是,每当访问帐户数据时,这些大部分不相关的注释都会伴随着 IO 的高成本。扫描整个全局(即当没有有用的应用程序维护索引时)至少需要 8 个小时。

我的一个想法是使用“使用 Caché 全局变量指南”和“系统管理指南”中描述的全局映射工具,将笔记数据从与全​​局其他详细信息一起存储到单独的数据库文件中。如果我可以将所有下标 30 映射到同一个 Caché 数据库中的单独数据库文件,大多数数据操作(甚至不关心笔记的那些)不会将它们连同他们关心的细节一起带入内存关于。

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

Global name: ACCT
Subscripts to be mapped: (BEGIN:END)(30)

但是无论我在语法中尝试什么变化,我总是得到ERROR #657: Invalid subscript in reference 1 subscript #1.

StackExchange 注释:这个问题可能更适合 dba.stackexchange.com,但显然那里的 Intersystems 问题为零,我认为它不会引起任何关注。

4

1 回答 1

0

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

WRC有一支经验丰富的表演团队,你有没有尝试联系他们?

于 2013-06-03T23:16:31.760 回答