找回密码
 欢迎注册
搜索
热搜: 活动 交友 discuz
查看: 2858|回复: 7

介绍Cache中的多维数据存贮技术

[复制链接]
发表于 2003-4-10 19:40:00 | 显示全部楼层 |阅读模式
大家对Cache数据库的认识可能比较少,听得最的可能就是“多维”这个词,那么多维在Cache倒底是怎么回事呢,我现在就研究一下。
研究一种数据库的数据存贮机制是学好这种数据库的必然要求,所以,如果你想学Cache,就跟我一起来研究研究Cache中的多维数据存贮。
 楼主| 发表于 2003-4-10 20:04:35 | 显示全部楼层

介绍Cache中的多维数据存贮技术

1.多维数据存贮引擎是Cache的核心技术之一。它把数据存贮在多维、稀疏数组中,这些数据叫做“Globals”。那么Global是什么?可以有那些操作?Cache中的SQL和对象是怎样使用Global的?我们如何在应用软件中使用Global?这些问题,是我们今天研究的主要内容。
2.Global的特性:Global提供了简单的方法将数据存入多维稀疏数组。它有简单、多维、稀疏、高效、稳定、分布式、并发、事物控制特优良特性。
3.在Cache中Global有多种应用方式:
  1)作为SQL和对象可共享的存贮机制。
  2)用来提供多索引的机制,如二进制位图对象或数据索引。
  3)为某些内存操作提供工作空间。
  4)实现针对持久类或关系表的一些难以实现或效率很低的操作。
  5)实现由应用系统特殊的,有针对性的存贮结构。
  6)实现了Cache系统中特有数据结构,如类的定义、错误消息、可执行代码等的存贮结构。
 楼主| 发表于 2003-4-10 20:42:34 | 显示全部楼层

介绍Cache中的多维数据存贮技术

Global是Cache实现高的数据存贮,以达到其它关系数据库难以达到的效率的秘密武器!
1.一个Global就是一个命名的多维数组,它存贮在Cache的物理数据文件中,命名空间是Globals和物理空间的关系纽带。一个命名空间可以包括一个或多个物理空间。
2.“^”符号用来区分Global和一般的变量。Global可以用少于63个字符的名称,%开始的是系统Global。Global名称可以使用“.”和UNICODE。(中文也可以吗?)
3.Global中的数据存贮在一个或多个节点(Node)中,每个节点可以存贮32K文本内容。一个节点中,可以存贮:一个字符串或数字;由特殊分隔符隔开的多个字段组成的一个字符串;$List中的多个字符串字段;空字符;二进制串;或大的数据集的一部分。
4.Global中的每个节点,都指向一个Global的下标。Global的节点是可以有序排列的。
5.Global是存贮在物理文件中的,物理文件的存贮单位是数据块Block(一般是8K),Cache使用一个类似B树的结构来控制这些数据块。Global的下标和数据在一个块中是按顺序存贮在一起的(详细不去研究了)。
 楼主| 发表于 2003-4-10 21:48:36 | 显示全部楼层

介绍Cache中的多维数据存贮技术

下面研究一下,对一个Global可以有哪些操作?
1.创建Global:^Data("Color") = "Red",这句创建了一个名为Data的Global。他与一般变量不同之处是会自动存入数据库中。
2.("Color") 指定了一个节点。这个下标可以是任务表达式值或另一个Global的参引。
3.= "Red"实现了把数据存入Global。
4.Set ^Data(id) = field(1) _ "^" _ field(2) _ "^" _ field(3)可以实现在一个节点存入多个字段值。这里注意用了“^”。用$piece分割。
5.$ListBuild可以存入$List字符串。用$List分割。
6.删除Global用Kill
7.$Data函数用来测试一个Global是否存在
8.$Get函数获取一个节点的数据。
9.Set key = $Order(^Data(""))获取Data的第一个节点的下标
10.Set key = $Order(^Data(1))获下标为1后一个节点的下标。
11.Set node = $Query(^Data(""))获取第一个节点的地址。
12.Set node = $Query(^Data(@node))获取下一个节点地址。
13.Merge拷贝节点数据。
14.$Increment自动计数器
15.临时Global,存贮在CACHETEMP数据库中,只有当内存不足时才会将数据存入库文件中,系统重新启动,CACHETEMP中的数据消失,对临时Global的操作不写日志。一般来说以CacheTemp开始名称的Global都是临时Global,但用户要用CacheTempUser开头,以象与系统的定义重冲突。
16.Global中的数据是按下标自动排序后存贮的。
17.$SortBegin ,$SortEnd
18.间接引用"@"
19.TSTART,TCOMMIT,TROLLBACK,$TLEVEL
20.LOCK
 楼主| 发表于 2003-4-10 22:36:12 | 显示全部楼层

介绍Cache中的多维数据存贮技术

Global是怎样存贮对象和SQL数据的呢?虽然这是系统自动处理的,但理解了这个原理,对我们学好用学Cache可能是很关键的!
1.所有持久类都是通过%CacheStorage类存贮自身数据的。
2.数据是存贮在以类名开始加特殊的如“D”“I”形成的Global中。
3.每个实例存贮在一个节点中,并用一个$List在一个节点存贮所有属性。
4.每个节点的Global下标是一个ID,ID是通过一个没有下标的计数器节点使用$Increment获得的。
5.也可以用IDKEY指定计数器。
6.子类引用的属性存贮在另一个子节点上。
7.父子关系的类,子类存贮在父类的子节点上。
8.嵌入对象序列化为$List后再存贮在父类同一节点上。
9.Streams对象存贮在多个连续的节点上,文件Stream,存贮在外部文件。
10.索引,存贮在另一个类名加“I”的Global中,每个节点的第一个下标是索引名称,第二个下标是排序过的属性值,第三个下标是对象的ID,节点本身一般是空的,多个索引存贮在一个Global中的。
11.二进制索引类似,可以用$Bit,$BitCount,$BitFind,$BitLogic进行二进制操作。
12.二地制索引中,第一个下标还是索引名,第二个是属性值,但是以数字比较,第三个一个“块值”,节点本身包含二进制值。
13.关系表的存贮与对象的数据存贮是共享的,同样原理的。
 楼主| 发表于 2003-4-10 22:51:20 | 显示全部楼层

介绍Cache中的多维数据存贮技术

小结:
1.通过上面的学习,感觉恍然大误,原来数据是这样存贮的啊!Global真神奇!
2.多维是M技术的产物吧,从这里我们可以看出,M语言是Cache的技术核心,其实Cache系统正是利用了M语言的优点,才实现了很多优秀的功能。(看来有必要仔细研究M语言啊)
3.看过这些以后,对理解Cache定义的一些类,如%CacheStorage等的实现有很大的帮助。
4.学了觉得,对Cache中类的概念和机制好象已经看到了本质,很彻底!对于实现HL7V3DT虽没有直接用处,因为数据类型不是%Persistent类,但还是对一些高级数据类型的实现方法有些启发的。
发表于 2003-4-14 23:00:12 | 显示全部楼层

介绍Cache中的多维数据存贮技术

***** 版主模式 *****
该贴子是管理员从<a href=forums.cgi?forum=4>HL7研究</a>转移过来的!
发表于 2005-9-6 13:21:15 | 显示全部楼层

介绍Cache中的多维数据存贮技术

Cache'提供了中间层和数据层的解决方案,也就是说Cache'不光能够管理数据,还包含了应用服务器所应 具备的一切基础功能,可以提供强大的伸缩性和性能。在Cache'中,能够和表相互表示的类只是Cache'类的一部分,另外Cache'还提供基础数据 类型的类(用于扩充和定制数据类型)和我们最习惯使用的普通类(只在内存中生存,就好像Java和C++一样),可以用来编辑业务逻辑和各种算法。 <br />
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

快速回复 返回顶部 返回列表