InterSystems IRIS®的核心功能之一是其多维存储引擎。此功能允许应用程序以紧凑、高效的多维稀疏数组存储数据。这些数组称为全局数组。
本章介绍:
globals
),以及可以对其执行的操作。全局变量提供了一种在持久的多维数组中存储数据的易于使用的方法。
例如,可以使用名为^Settings
的全局变量将值“Red”
与键“Color”
相关联:
SET ^Settings("Color")="Red"
可以利用全局变量的多维特性来定义更复杂的结构:
SET ^Settings("Auto1","Properties","Color") = "Red"
SET ^Settings("Auto1","Properties","Model") = "SUV"
SET ^Settings("Auto2","Owner") = "Mo"
SET ^Settings("Auto2","Properties","Color") = "Green"
全局变量具有以下功能:
^Settings("Auto2","Properties","Color")
中,下标Color
是全局设置中的第三级节点。
下标可以是整数、数字或字符串值,并且不需要是连续的。ACID
事务。(ACID
事务提供原子性、一致性、隔离性和持久性。)。使用对象或SQL访问时,事务会自动处理。注意:本文档中描述的全局变量不应与另一种类型的InterSystems IRIS数组变量混淆:进程私有全局变量。进程私有全局变量不是持久的;它们仅在创建它们程序期间持续。进程私有全局变量也不是并发的;它们只能由创建它们的进程访问。进程专用全局可以通过其多字符名称前缀:^||
或^|"^"|
轻松地与全局区分开来。
一个简单的例子就可以展示全局变量的易用性和性能。下面的程序示例创建一个10,000
个节点的数组(如果存在,则首先将其删除)并将其存储在数据库中。可以尝试这样做,以了解全局变量的性能:
/// w ##class(PHA.TEST.Global).GlobalSimple()
ClassMethod GlobalSimple()
{
Set start = $ZH // get current time
Kill ^Test.Global
For i = 1:1:10000 {
Set ^Test.Global(i) = i
}
Set elap = $ZH - start // get elapsed time
Write "Time (seconds): ",elap
q ""
}
DHC-APP> w ##class(PHA.TEST.Global).GlobalSimple()
Time (seconds): .00307
我们还可以看到迭代和读取数组中的值需要多长时间(确保首先运行上面的示例来构建数组):
-读取持久数组-
/// w ##class(PHA.TEST.Global).ReadGlobalSimple()
ClassMethod ReadGlobalSimple()
{
Set start = $ZH // get current time
Set total = 0
Set count = 0
// get key and value for first node
Set i = $Order(^Test.Global(""),1,data)
While (i '= "") {
Set count = count + 1
Set total = total + data
// get key and value for next node
Set i = $Order(^Test.Global(i),1,data)
}
Set elap = $ZH - start // get elapsed time
Write "Nodes: ",count,!
Write "Total: ",total,!
Write "Time (seconds): ",elap,!
q ""
}
DHC-APP>w ##class(PHA.TEST.Global).ReadGlobalSimple()
Nodes: 10000
Total: 50005000
Time (seconds): .001879
在InterSystems IRIS应用程序中,全局变量有多种使用方式,包括:
全局变量不受关系模型的限制。 它们提供了开发针对特定应用程序优化的定制结构的自由。 对于许多应用程序来说,明智地使用全局变量可能是提供性能的秘密武器,而这种性能是关系应用程序开发人员梦寐以求的。
无论应用程序是否直接使用全局变量,了解它们的操作都是有用的。 理解全局及其功能将帮助设计更高效的应用程序,并为确定应用程序的最佳部署配置提供帮助。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。