socrates used postgresql and sqlalchemy

37
. . . . . . Socrates 动态建模工具 March Liu <[email protected]> 理论及 Python + PostgreSQL 实现 July 15, 2011

Upload: march-liu

Post on 27-Jun-2015

1.327 views

Category:

Documents


8 download

DESCRIPTION

Socrates 的Python+PostgreSQL 实现。PGCon China 2011 大会讲稿

TRANSCRIPT

Page 1: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

Socrates动态建模工具

March Liu <[email protected]>

理论及 Python + PostgreSQL实现

July 15, 2011

Page 2: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

什么是 Socrates?

Page 3: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

动态建模设计

Page 4: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

用一套数据库结构自适应任意数据结构

Page 5: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

可扩展,可适应未知类型

Page 6: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

自解读,不需要额外的辅助信息,可以从数据库中得到完整的信息内容和结构。

Page 7: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

三元结构

▶ Socrates的原子结构称为 subject(条目/主语)。这是一个map数据结构

▶ 每个 subject有内部的精细结构,由一组三元短语描述,称为 segment

▶ 三元短语结构为 (subject, predicate, object)▶ predicate,即谓词,表示 subject的内部结构,即字典的

key▶ object,即宾语,指 subject由谓词表达的值,即字典的

value

Page 8: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

三元结构

▶ Socrates的原子结构称为 subject(条目/主语)。这是一个map数据结构

▶ 每个 subject有内部的精细结构,由一组三元短语描述,称为 segment

▶ 三元短语结构为 (subject, predicate, object)▶ predicate,即谓词,表示 subject的内部结构,即字典的

key▶ object,即宾语,指 subject由谓词表达的值,即字典的

value

Page 9: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

三元结构

▶ Socrates的原子结构称为 subject(条目/主语)。这是一个map数据结构

▶ 每个 subject有内部的精细结构,由一组三元短语描述,称为 segment

▶ 三元短语结构为 (subject, predicate, object)

▶ predicate,即谓词,表示 subject的内部结构,即字典的key

▶ object,即宾语,指 subject由谓词表达的值,即字典的value

Page 10: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

三元结构

▶ Socrates的原子结构称为 subject(条目/主语)。这是一个map数据结构

▶ 每个 subject有内部的精细结构,由一组三元短语描述,称为 segment

▶ 三元短语结构为 (subject, predicate, object)▶ predicate,即谓词,表示 subject的内部结构,即字典的

key

▶ object,即宾语,指 subject由谓词表达的值,即字典的value

Page 11: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

三元结构

▶ Socrates的原子结构称为 subject(条目/主语)。这是一个map数据结构

▶ 每个 subject有内部的精细结构,由一组三元短语描述,称为 segment

▶ 三元短语结构为 (subject, predicate, object)▶ predicate,即谓词,表示 subject的内部结构,即字典的

key▶ object,即宾语,指 subject由谓词表达的值,即字典的

value

Page 12: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

主语 Subject

在语义上,主语 subject表示一组相关子句的集合。在实现上,subject是一个匿名的字典。存储于数据库中的时候,由数据库维护其 id,但是通常用户并不需要直接关心其 id,而是在应用层通过变量使用它。

Page 13: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

谓语 Predicate

谓词在应用层取出的 subject中,就是字典的 key。在数据库中,它表示 subject所具有的内部结构。每个 predicate必须有自己的名字,需要标的自己的宾语类型,即 obType。根据objType,可以得到宾语存储的位置。(未来可能改变)

Page 14: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

宾语 object

宾语是实际的值,它可能有任何类型,Socrates只要求最少实现三种类型:基本的 string和 subject(实际上是 integer或string),和 integer(如果不考虑 array支持,可以不包含integer)。

Page 15: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

语义设计

Page 16: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

META SEGMENTS I为了实现自解释,Socrates系统包含一组元语义:

▶ subject is type▶ predicate is subject▶ is is predicate▶ is objType subject▶ objType is predicate▶ objType objType subject▶ type is subject▶ string is type▶ name is predicate▶ name objType string▶ storage is predicate▶ storage objType string▶ uri is predicate▶ uri objType string

Page 17: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

示例

通过前面的元语定义,我们可以做到信息自解释。例如,一个人员信息条目可能是:

subject =

username, "MarchLiu"mail, "[email protected]"...

Page 18: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

user name

其中 username谓词:

username =

is, predicatename, "username"objType, "string"

Page 19: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

mail

mail谓词:

mail =

is, predicatename, "mail"objType, string

Page 20: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

Predicate也是 subject

这里两次出现的 (objType, string),是一条 segment,说明predicate的宾语类型。类型 string本身也是一个 subject

string =

{name, "string"stroage, "segmentstring"

至此,已经完全进入到了原语定义范畴,不需要再递归解释了。

Page 21: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

已实现的功能

Page 22: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

Python + SQLAlchemy

Page 23: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

SQLite + PostgreSQL

Page 24: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

TDD,测试即文档

Page 25: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

通过所有测试 (暂时不包括 array)

Page 26: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

初级的 dsl表达式支持

Page 27: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

postgreSQL plpgsql

Page 28: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

初步的 segment读写

Page 29: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

一些常用的谓词操作

Page 30: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

缺陷、构想和待实现的功能

Page 31: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

DSL和 Script

Page 32: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

性能优化

Page 33: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

动态类型

Page 34: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

其它语言的实现

Page 35: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

基于 PostgreSQL的可持久化 Socrates环境。

Page 36: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

正在实现

基于 objective c和 sqlite的定制 ios嵌入版

Page 37: Socrates Used PostgreSQL and SQLAlchemy

. . . . . .

谢谢大家,再见!˜ Power By LATEX