cache 存储数据访问

在前面,我们学习了解到了cache数据库的存取模式。

1.采用多维数组存储数据。

2.可以利用各种技术存取数据。

cache数据库有一个  多维数组引擎。还有一个分布式缓存协议。使得存取速度快,实时处理数据。

它提供了以下用途。

1.数据存储

2.并发管理

3.事务处理

4.过程管理

接下来学习四个方面的存取

1.web存取  cache服务器页面(CSP[cache server page]),在数据服务器上运行,与他们存取的数据放在一起。

2.对象存取  cache支持多种面向对象建模技术。可以和rartion rose(如今已并入IBM)双向开发。

3.SQL存取  SQL92,SQL网关技术,可以和其他关系型数据库共存,集成整合工作环境。也可以将关系型数据库迁移到cache上。

4.多维存取  兼容OPEN M语言程序。

什么是多维数组(GLOBAL)?

一种类似树的存储形式。定义形式为

^GLOBAL(“节点1”,"节点2”,"节点3”)=“数据”

我们可以建立自己的GLOBAL,添加删除修改遍历其节点。

image

在这个基础上,将GLOBAL可以映射为对象或者关系型格式,从来利用对象接口或者基于Sql接口进行访问。

**在实时事务处理冲,推荐直接操作GLOBAL树,以底层的方式快速访问cache数据。

现在开始将怎么访问

1.通过关系方式查询

    也就是SQL语句。cache支持SQL92标准【不知道最新版支持哪一个标准了】。通过SQL语言,我们可以创建访问表[table],视图[View],存储过程[Store Procedure],触发器[Trigger],游标[Cursor].当然我们也可以用OBDC或者JBDC来访问。

    配置ODBC源方式就不讲了。如不清楚,百度之。推荐sqldbx这个工具。

2.用对象方式查询

a.打开对象

     Set p=##(包名.类名).%OpenId(Id)

       *注意区分大小写

       *%OpenId继承于%Presistent

     W p

     屏幕将会显示 1@包名.类名.

     表示 类-包名.类名在本用户进程中第一个实例的引用。

     变量p本身保存的内容只是对  对象在内存中版本  的引用。称作为是OREF(Object REference)

b.访问属性

    和平常访问属性一样

    w p.属性n(n=1,2,3……)

    当然,我们也可以修改,set就可以了。但是此时只是对内存中数据的修改。如果要保存,还是需要调用%Save方法来保存

c.调用方法

   在cache中调用对象方法和我们平常用的方式相同。格式如下:

   Do 对象.方法(参数1,参数2,参数3……)     *没有返回值的时候要用Do。

   假设p中有方法Get(),我们调用Get()就是:

   w p.Get(),!,p.%Id()

   *如果没有参数的时候()要保留。

   *!是换行

   *%Id是返回p的Id值。

     如果要把修改后的数据保存下来,调用%Save

     w p.%Save()

     如果保存成功,则返回1,屏幕上将会显示1

     如果保存失败,则返回0.

*COS的语法和其他面向对象语言的语法很像,都是把一系列复杂的方法和属性的调用放在一行语句里面。

  

d.访问其他属性

    操作一致,撸过。

e.输出xml

    XML文档的结构化形式可以很好的描述复杂的对象。cache有很强大的XMl处理能力,包括将类或者对象输出成为XML文件。

    在本例中(代码之后发布,现在还有问题,%Save不成功),我们可以通过person的祖先类(我的理解就是定义person类的时候,他的一个参数)%XML.Adaptor提供的方法来输出XML文档。

    I.我们可以先将Manager类的类定义输出为XML SCHEMA格式的文档定义。

        LIFETRA(类所在的命名空间)> Do ##class(space.Manager).XMLSchema()

        然后将文档输出为XML格式的文件

        LIFETRA>Do p.XMLExport()

*  无参数只是默认状况。我们可以改变参数,让文档按照特定的规则输出,或者输出到外部文件或流中。

* Caché 不光能输出XML文档,相反地,还可以从外部 XML文件中产生对象。

* Caché 支持自动垃圾回收。也就是说,如果我们不手动删除aPerson 对象,当我们关闭终端( 即一个用户进程结束) 时,Caché 也会将它删除.

f.关闭对象

LIFETRA>Do p.%Close()

LIFETRA>Kill p

3.查看GLOBAL

在cache中,无论表和持久化的对象,都是一同一种方式GLOBAL保存在数据库中,只是我们以不同的机制将他们投影[Project]成为对象或者关系的形式。

     a.可以通过GLOBAL查询控件来查询

     这个比较简单。

     b.也可以在程序中用COS直接来访问。

             w ^名称(下标……)

             *  必须有符号 “^” ,否则操作的将是局部变量,该变量只会在用户进程的内存中存在

             也可以set赋值

                     kill删除节点

原文地址:https://www.cnblogs.com/lifetraveler/p/2693407.html