socrates used postgresql and sqlalchemy
DESCRIPTION
Socrates 的Python+PostgreSQL 实现。PGCon China 2011 大会讲稿TRANSCRIPT
![Page 2: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/2.jpg)
. . . . . .
什么是 Socrates?
![Page 3: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/3.jpg)
. . . . . .
动态建模设计
![Page 4: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/4.jpg)
. . . . . .
用一套数据库结构自适应任意数据结构
![Page 5: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/5.jpg)
. . . . . .
可扩展,可适应未知类型
![Page 6: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/6.jpg)
. . . . . .
自解读,不需要额外的辅助信息,可以从数据库中得到完整的信息内容和结构。
![Page 7: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/7.jpg)
. . . . . .
三元结构
▶ Socrates的原子结构称为 subject(条目/主语)。这是一个map数据结构
▶ 每个 subject有内部的精细结构,由一组三元短语描述,称为 segment
▶ 三元短语结构为 (subject, predicate, object)▶ predicate,即谓词,表示 subject的内部结构,即字典的
key▶ object,即宾语,指 subject由谓词表达的值,即字典的
value
![Page 8: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/8.jpg)
. . . . . .
三元结构
▶ Socrates的原子结构称为 subject(条目/主语)。这是一个map数据结构
▶ 每个 subject有内部的精细结构,由一组三元短语描述,称为 segment
▶ 三元短语结构为 (subject, predicate, object)▶ predicate,即谓词,表示 subject的内部结构,即字典的
key▶ object,即宾语,指 subject由谓词表达的值,即字典的
value
![Page 9: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/9.jpg)
. . . . . .
三元结构
▶ Socrates的原子结构称为 subject(条目/主语)。这是一个map数据结构
▶ 每个 subject有内部的精细结构,由一组三元短语描述,称为 segment
▶ 三元短语结构为 (subject, predicate, object)
▶ predicate,即谓词,表示 subject的内部结构,即字典的key
▶ object,即宾语,指 subject由谓词表达的值,即字典的value
![Page 10: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/10.jpg)
. . . . . .
三元结构
▶ Socrates的原子结构称为 subject(条目/主语)。这是一个map数据结构
▶ 每个 subject有内部的精细结构,由一组三元短语描述,称为 segment
▶ 三元短语结构为 (subject, predicate, object)▶ predicate,即谓词,表示 subject的内部结构,即字典的
key
▶ object,即宾语,指 subject由谓词表达的值,即字典的value
![Page 11: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/11.jpg)
. . . . . .
三元结构
▶ Socrates的原子结构称为 subject(条目/主语)。这是一个map数据结构
▶ 每个 subject有内部的精细结构,由一组三元短语描述,称为 segment
▶ 三元短语结构为 (subject, predicate, object)▶ predicate,即谓词,表示 subject的内部结构,即字典的
key▶ object,即宾语,指 subject由谓词表达的值,即字典的
value
![Page 12: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/12.jpg)
. . . . . .
主语 Subject
在语义上,主语 subject表示一组相关子句的集合。在实现上,subject是一个匿名的字典。存储于数据库中的时候,由数据库维护其 id,但是通常用户并不需要直接关心其 id,而是在应用层通过变量使用它。
![Page 13: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/13.jpg)
. . . . . .
谓语 Predicate
谓词在应用层取出的 subject中,就是字典的 key。在数据库中,它表示 subject所具有的内部结构。每个 predicate必须有自己的名字,需要标的自己的宾语类型,即 obType。根据objType,可以得到宾语存储的位置。(未来可能改变)
![Page 14: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/14.jpg)
. . . . . .
宾语 object
宾语是实际的值,它可能有任何类型,Socrates只要求最少实现三种类型:基本的 string和 subject(实际上是 integer或string),和 integer(如果不考虑 array支持,可以不包含integer)。
![Page 15: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/15.jpg)
. . . . . .
语义设计
![Page 16: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/16.jpg)
. . . . . .
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](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/17.jpg)
. . . . . .
示例
通过前面的元语定义,我们可以做到信息自解释。例如,一个人员信息条目可能是:
subject =
username, "MarchLiu"mail, "[email protected]"...
![Page 18: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/18.jpg)
. . . . . .
user name
其中 username谓词:
username =
is, predicatename, "username"objType, "string"
![Page 19: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/19.jpg)
. . . . . .
mail谓词:
mail =
is, predicatename, "mail"objType, string
![Page 20: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/20.jpg)
. . . . . .
Predicate也是 subject
这里两次出现的 (objType, string),是一条 segment,说明predicate的宾语类型。类型 string本身也是一个 subject
string =
{name, "string"stroage, "segmentstring"
至此,已经完全进入到了原语定义范畴,不需要再递归解释了。
![Page 21: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/21.jpg)
. . . . . .
已实现的功能
![Page 22: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/22.jpg)
. . . . . .
Python + SQLAlchemy
![Page 23: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/23.jpg)
. . . . . .
SQLite + PostgreSQL
![Page 24: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/24.jpg)
. . . . . .
TDD,测试即文档
![Page 25: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/25.jpg)
. . . . . .
通过所有测试 (暂时不包括 array)
![Page 26: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/26.jpg)
. . . . . .
初级的 dsl表达式支持
![Page 27: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/27.jpg)
. . . . . .
postgreSQL plpgsql
![Page 28: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/28.jpg)
. . . . . .
初步的 segment读写
![Page 29: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/29.jpg)
. . . . . .
一些常用的谓词操作
![Page 30: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/30.jpg)
. . . . . .
缺陷、构想和待实现的功能
![Page 31: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/31.jpg)
. . . . . .
DSL和 Script
![Page 32: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/32.jpg)
. . . . . .
性能优化
![Page 33: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/33.jpg)
. . . . . .
动态类型
![Page 34: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/34.jpg)
. . . . . .
其它语言的实现
![Page 35: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/35.jpg)
. . . . . .
基于 PostgreSQL的可持久化 Socrates环境。
![Page 36: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/36.jpg)
. . . . . .
正在实现
基于 objective c和 sqlite的定制 ios嵌入版
![Page 37: Socrates Used PostgreSQL and SQLAlchemy](https://reader033.vdocuments.net/reader033/viewer/2022052304/558e11c91a28ab67128b4678/html5/thumbnails/37.jpg)
. . . . . .
谢谢大家,再见!˜ Power By LATEX