现代数据库的接口需要进一步开放

15-01-19 liangshan
              

anycmd认为传输协议、传输管道就是只有主体和被主体携带的客体才可以穿越的虫洞。虫洞在那棵树上只是一个点。虫洞处在那棵树的维度之外,不是客体在那个虫洞上穿越,不是客体在通过传输基础设施在树上穿越,而是主体在穿越。不是客体主动向着主体运动,而是主体的分神直接进入客体中去。

比如,主体从另外一个维度分神进入浏览器节点=>主体携带着请求数据在树上运动来到服务器节点=>主体在服务器节点中一定程度自由的运动=>主体具有主观能动性,每一个节点中的能力都是主体按照自己的意愿通常是使用面向对象的分类方法将自己的能力事先放在各个节点那里的,主体将自己的能力分层分类排布是为了良好的管理和使用这些能力,因为通常当主体来到当地节点的时候才会使用当地的能力。资源树自己本身永远是静止不动的,只有主体才能使之变换。

访问控制就是:对主体在资源树上的移动和使用当地节点的能力的管控。资源树就是空间,功、能、力、栈、变换就是时间。站在整个时空的角度,由全局出发管控权限。

整个资源树上的很多节点是被不同的人类主体共用的,所以我们可能要考虑根据不同的主体在树上的运动和管控的需要去为节点打上主体的标识。往节点上打上主体的标识,从而跟踪主体的运动轨迹,建立起一个上下文。这些打在资源节点上的主体标识可能会有很多用处。比如如果某个节点只允许至多一个主体进入,这种需求就可以通过打在资源节点上的主体标识很容易实现了。

打在资源节点中的主体标识可能会有利于处理并发。比如当两个主体都想更新某个资源节点的时候,第一个主体进入这个节点并在出去的时候留下了一把锁(主体的标识或者new rowid()这样的值),这个锁的意思可以这样解释“这个节点已经被我带走了,或者被我锁住门了”,当第二个主体试图进入这个资源节点的时候发现这个节点不见了或者自己的钥匙打不开它。如果要锁一条记录就在记录节点上锁,要锁字段就在字段节点上锁。

用主体的标识来上锁比用new rowid()这样的值来上锁更具有意义,因为用主体的标识来上锁的话系统能够知道是被谁上的锁。因为主体标识是由我们的系统节点定义的,而那个new rowid()是被数据库节点定义的,虽然数据库节点也在我们的系统这个根节点之下但是系统对rowid管控不了。数据库节点提供的接口缺少了一个传入锁标识的接口。

select * from Product where Id='123456' withlock('Id Of ZhangSan')

select * from Product where Id='123456' withlock('Id Of ZhangSan', Price, Name)

withlock('user1Id', Price, Name)

表示用张三的标识值锁住Price和Name两个字段。这样当并发冲突的时候至少我们能报出是谁与谁冲突了

“对不起,更新失败,张三也在更新这条记录,不妨先看看这条记录被更新成了什么?”

              

liangshan
2015-01-20 10:58

Guid这种标识是没有层级的,这种标识是本节点定义的用来识别本节点下的直接子节点的识别码。而url是有层级的,url是将这些识别码沿着树通过一个分隔符比如“/”连接起来。

在akka.net的Actor系统中,标识正是那种分层的url。在anycmd权限引擎中也是可以引入这样的标识的,从而使用者通过形如“anycmd://Roles/123456”这样的标识来使用权限引擎。这种映射属于上层的工作。