cache后关系型数据库

来源:互联网 发布:iis7和php 编辑:程序博客网 时间:2024/05/17 07:12

cache数据库的结构

 

关系数据库有聚族索引和非聚族索引,在cache库中有data和index与其对应,cache中有表的全部数据都存在以^开始的一个变量中,我们称它为global。比如一个临时的global可以定为^TMP(临时的global就是可能在什么时候给kill掉),这样一来,他就像是一个已经持久化了的数据,一直存在库中。比如创建一张表。Student它有字段st_No,st_name,st_birthday,但他有一个rowid我们定名为:st_Rowid;这样我们可以定义这张表对应一个^STUDENT(st_Rowid)的global它将存有所有的学生信息。

我们动行insert into Student valuse('0001','wang1','1986-1-1') 时

他会发生如下的插入

         ^STUDENT(1)=0001^wang1^52961                 

 //^为一分割符.  当然当你插入一个^时库可能会有问题.  52961是1986-1-1到1841-1-1这间的天数. 1841-1-1为第一天

如果你要在表上的名字,和生日上建立索引就可以加二个index级的global

^STUDENTi(0,"name",st_name,st_Rowid)和^STUDENTi(0,"birthday",st_birthday,st_Rowid)

这时这二个索引就会加也被写值

          ^STUDENTi(0,"name","wang1",1)=0

          ^STUDENTi(0,"birthday",52961,1)=0

我们多运行几句insert语句

         insert into Student valuse('0002',mazi,'1986-3-1')

         insert into Student valuse('0003','zhousan','1986-2-1')

         insert into Student valuse('0004','lisi','1986-4-1')

 

 

这时库中的global:

 

data

  ^STUDENT(1)=0001^wang1^52961

  ^STUDENT(2)=0002^mazi^53020   

  ^STUDENT(3)=0003^zhousan^52992 

  ^STUDENT(4)=0004^lisi^53051   

 

index

   ^STUDENTi(0,"name","lisi",          4)=0

   ^STUDENTi(0,"name","mazi",       2)=0

   ^STUDENTi(0,"name","wang1",    1)=0

   ^STUDENTi(0,"name","zhousan", 3)=0

   

   ^STUDENTi(0,"birthday",52961  ,1)=0

   ^STUDENTi(0,"birthday",52992  ,3)=0

   ^STUDENTi(0,"birthday",53020  ,2)=0

   ^STUDENTi(0,"birthday",53051  ,4)=0

再看一下它的树的存储

 

 

 

 

 

 

 

第一个global是一个data的。后面的是index主要用来快速的找到data,index树的最后一行都是主的rowid。

如果你要找名字是在mazi后面的那个人的生日是什么:

set name = $order(^STUDENTi(0,"name",mazi))                //$order()是一个方法找global同一节点层的下一个值 ,运行完后:name=wang1

set rowid = $order(^STUDENTi(0,"name",name,""))           //运行完后 : rowid=1

然后再去找data

set brithday = $piece(^STUDENT(rowid),"^",3)                 //运行完后:  brithday=52961

set date = $zd(brithday,3)                                                // 把日期转成yyyy-mm-dd的格式

 

这样就拿到了。

当然你也可以建立混合索引^STUDENTi(0,"day",st_birthday,"name",st_name,st_rowid)。

你可以很灵活的用索引,能相当灵活的控制走向,快速地找到你要的东西。