对对象化数据库系统的思考

作者在 2007-01-03 02:29:00 发布以下内容
当今占主导地位的数据库系统是关系型数据库系统,关系型数据库系统给我的感觉是不直观,学习难度大,并且要求使用者完全掌握sql 语言,而sql 语言在很大程度上限制了思想者的思维方式,这一点是必须改变的。当一个人使用一样工具时感到十分别扭的时候,那么他必然会去寻找一个更合适的工具。 我认为语言必须是自由的,也就是说,使用语言者可以用各种方式来表达同样一件事情而不必受到语言的限制和束缚。所以sql 的时代必须结束。

所谓数据库当然就是一个用于存放数据的地方,此外数据库系统必须具有对数据的管理能力。

让我们把目光拉回到现实生活中,在我们的现实生活中我们每天接触的地的确确是对象,是一件件真实的物件。 在我们的仓库中存放的也的的确确是实实在在的物品,是object. 在我们的仓库中并没有什么table. 一个十分重要的概念到这里必须提出来了,那就是容器(container) 一个仓库其实就是一个容器,那么数据库就是一个存放数据的容器。

我认为,如果我们能够模拟现实生活中的仓库,那么我们就实现了对象化数据库,而所谓系统就是说在存放对象的基础上进一步实现管理。为了便于理解,我进一步将对象化数据库称为对象库(object storehouse), 以及将对象化数据库系统称为对象库管理系统(object storehouse management system)。

那么对象库管理系统(OSMS) 到底应该是怎么样的呢?这是作为开发人员必须思考的问题,我对这个问题进行了长期的思考,我试图以我独立的方式来创立一个新的技术,也就是说我试图不进入他人已有的模式,(事务是多维的,往往当你受到某种固有模式限制住的时候,你是很难摆脱它的,这样也就使得你无法看到事物的多维性。所以有时候无知也不是坏事.)

我给出我的思考结果:
1. 对象库管理系统(OSMS) 必须提供建立系统模型的能力, 也就是说当你得到这个OSMS 的时候你也得到了一个建模软件, 所谓建模软件可以是直观的通过操作建模单元(矩形框)图形化的实现系统建模. 建模软件同时也提供你以书写代码的方式来实现系统建模.
2. OSMS 应具备对对象的管理能力, 管理能力体现在: 对象的加入,  对象的流出,  对象的状态变更. 当发生以上事件时, 对象库就必须得到更新, 事实上对象库的更新是始终在发生的, 并且是自动的, 伴随性的发生的, 因为它们都是对象.
3. OSMS 应该具备将对象库信息向外界展示的能力, 使得程序员(用户)能够以自己的方式来处理对象. 这一点是很重要的, 这将提供给程序员一个完全的自由, 程序员不再受到 sql 的困扰. 程序员可以看到对象库的整体信息, 即系统模型的整体构架, 程序员也可以进入对象库的局部, 从而操作局部的对象, 程序员可以完全自由的在对象库中穿行, 以自己的方式来操作对象, 这就好比你可以自由到一个仓库中去, 去看看那里放了什么, 你可以用你自己的方式来统计对象的个数, 比较, 整理等等.
4. OSMS 同样也应该具备自己的分析能力, 自己对对象库的操作能力, 也就是说如果程序员愿意的话, 他可以借助OSMS 所提供的帮助而实现对对象的操作. 为此, 就必须提供一系列api, 请注意, 我不是提供询问语言而是提供 api, 程序员可以使用这些api 来高效的实现对对象库的操作, 这里也包含了对对象信息的询问. 为了便于理解, 我给出一个很简单的例子:
通常这样一个sql 语言 select * from sometable.  你会得到该表的所有列项的信息. 那么用我的语言怎么来写呢? 写法可以是这样的:
System.display(someContainer);  而这个display() 函数便是一个系统函数. 你甚至可以使用这个display 函数显示整个对象库的模型. 比如某个图书馆用该系统建立了对象库取名为myLibrary, 那么如果你使用 System.display(myLibrary); 你别可以得到完整的对象库模型的文字表达, 如果你想看到整个模型的图形表达呢? 那么也很简单, 一, 你可以通过系统自带的界面化软件来实现图形界面操作, 就像打游戏一样, 操作对象库是不是不再枯草? 你也在console 界面输入命令 System.graphDisplay(myLibrary); 当你按下回车的时候, 图形化界面就跳出来了. 如果你不清楚你怎么操作, 该怎么做呢? 很简单, 输入help, 便会得到一个帮助菜单, 如果你进一步想知道有哪些命令, 那么你输入help command, 按下回车便可看到所有的系统命令了.
说到这里, 必须总结一下了, OSMS 意味着提供两样东西给用户, 一个就是图形化界面软件, 一个就是console 操作界面, 使用者完全可以自由的自我选择, 有一点是清楚的, 我们不再提供sql 支持.
5. OSMS 具有对对象模型作出更改的能力, 比如模型的扩展, 局部更改, 或者整体的删除.

以上便是我目前对对象库操作系统(OSMS)的思考以及我所认为的一些方案. 欢迎大家的评论.


flying like a bird | 阅读 2541 次
文章评论,共1条
kai(作者)
2007-01-04 10:49
1
对上文做一些补充:
我想进一步明确一下提供api 和提供query language 的区别。如果清楚现在的数据库管理系统的工作方式, 那么就会比较清楚这两者之间的区别。我举一个形象一点的例子: 一个顾客去一家商店买东西, 这家商店有个规矩, 那就是顾客不能自己拿东西, 一般在中国的夫妻老婆店都是这样的, 顾客必须告诉营业员我想买什么东西, 然后营业员拿给顾客。 这里就有个重要的环节, 那就是顾客必须和营业员交流, 如果他们两者使用双方都能理解的语言, 那么这种工作方式是可以的。 但是如果现在一个中国人出国到了德国,他也去一家夫妻老婆店买东西, 这个时候麻烦就来了, 那个中国人不会说德语, 那个的德国营业员也不理解中文, 那么这个时候交易就没法进行了。 这个形象的比喻就是描述了现在的数据库管理系统的工作方式。 现在的数据库管理系统从外界来看是一个完全封闭的环境。 外界与数据库管理系统的交流是通过一个接口来做的, 也就是说, 如果进货, 外界只是把货物放在仓库门口,仓库的管理系统自己会决定如何来摆放货物, 管理系统认为它的管理效率要比你的高效的多, ok, 这一点我可以接受。 对于出货, 管理系统也是自己从仓库中取获,然后传递到门口, 它认为它比你更了解仓库, 所以取货的效率也会比你高, 所以取货也不需要外界的干涉, ok, 这一点我也可以接受。 现在的问题是询问, 我们知道我们现在是用sql 来进行数据库询问的, 这就意味着你必须学sql, 否则你就无法与数据库管理系统沟通了。 也就是说那个中国人如果要和那个德国营业员交流, 那么他必须先学德语, 否则是没法沟通的。 此外这样的管理模式是封闭式的, 顾客只能站在商店门口, 他是无法走到商店里自己去取货的,他想买一瓶可乐, 他也知道或者看到商店里放着一瓶可乐, 但是由于语言不同, 他却拿不到他想要的可乐, 这样的做法是不是很恼火? 如果是开放式的商店呢? 比如超市, 顾客走进去自己拿就是了, 他没必要和营业员做什么交流。 当然营业员始终站在那里, 他是很乐意为顾客服务的。 我前面说了, 我是能够接受系统独立接货, 独立出货的, 因为系统会比我干的更好。 唯独询问这个环节我有不同的看法, 我们为什么一定要使用sql 呢? 难道就没有更方便的方法了吗? 我认为更方便的方法是有的, 那就是使用人性化的api, 这就好比自动售货机, 顾客只需要知道那些按钮的功能, 那么他便可以买到他想要的货, 顾客唯一要做的就是按按按钮, 然后就可以得到他想要的货物了。 对数据库管理来讲就是使用api 来实现对对象库的全面操作, 包括询问。 此外我也想让我的对象库管理系统成为超市型的管理系统而不是夫妻老婆店式的管理系统, 也就是开放式取代封闭式的, 这样对于用户来讲, 他如果要得到一个信息可以有两种方式, 一种方式是通过使用 api 与系统对话从而得到信息, 这种方式是高效的方式。 另外一种方式是自己进入对象库与对象直接对话, 从而直接得到信息, 这种方式是不高效的, 但是提供这种方式的意义在于使得对象化数据库管理系统成为平民化的软件而不是贵族化的软件。 我的目标就是让技术成为每个人都能使用的技术而不是只有某些贵族学院派才能使用的东西。 

有人会提出来, 这样做会不会损害数据库的效率, 要知道数据库对于效率的要求是很高的。 我认为这样的担心是不必的。 数据库的效率需求在于出货和进货, 而不是询问。 一条询问用0.01S 还是用0。5S 在我看来是没有区别的。 但是如果一个人站在数据库面前却不知道如何去询问, 那就不是一个时间的问题了。我越来越感觉到数据库成为贵族化的用品是不对的, 是个错误, 这样的局面必须改变。
游客请输入验证码

kai
浏览94907次