SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
Postgres Stories

PostgreSQL 数据库及相关设计讨论
   ——刘鑫<march.liu@gmail.com>
Postgres WWH

 PostgreSQL ?
    What?
       RDBMS
       OpenSource
       Rich Power
    Why?
    How?
What is Postgres?

 PostgreSQL 是
    一款开放源码的关系型数据库
       BSD授权
       有广泛的平台实现
    一款久经考验的数据库产品
       美国军方
       医疗行业
       地理信息系统
       ……
     具有实用面向对象特征的ORDB
     强大的服务器端编程能力
    完备的数据库功能
Why Postgres?

 PostgreSQL 有力的支持各种数据库设计
    丰富实用的数据模型
    自然优雅的程序逻辑
    丰富强大的服务器端编程支持
    适用各种架构需求
 丰富便利的运维技术支持
    冷备
    热备
    负载匀衡
    统计分析工具
     ……
Why Postgres?

 强大的并发性能
   http://www.blowfisher.net/gallery/v/pg-vs-mysql/
 丰富的安全模型
   buildin
   trusted
   by addr
   by ldap
   ssl
   ...
Postgres 丰富的数据类型

 强大的文本处理能力
   独特的无限文本类型 Text
   正则表达式!
   完备的 XML 功能支持
 Numeric 满足严谨的商务应用需求
 满足各种特殊应用需求的数据类型
   久负盛誉的几何类型
    ltree
   字典类型 hstore
   bits
   全文索引
   ...
Postgres 实用的ORDB模型

 不仅是RDB
   完备的RDB模型支持
   继承
   行集<=>向量集
  自然的OO概念
   智能的静态类型推导
   函数支持Table类型
  完备的约束定义能力
   主键与唯一约束
   自增字段与UUID
   Default and check
   触发器
Postgres 强大的编程能力

 SQL
    Window语法及数据挖掘
    Iimit ... offset ...
    ...
 PLPGSQL
    完备的过程控制语法
    参数化SQL命令
    自然的存储访问集成(游标)
    return next 和 return query
  PLPerl/PLPython/PLTCL/PLJAVA/PLxxx...
    无限可能的语言扩展!
How Postgres? -- Just Do It!

 安装
   Linux
       cluster on debian/ubuntu
   BSD Port
    Windows Binary
 Make It Yourself?
   基于标准c
   有详细的编译指导
   对“新”手,可能比安装更好用……囧……
How Postgres? -- Just Do It!

 The First Day
   sudo su postgres
   initdb
   create superuser
 理解存储结构
   Linux Cluster
   数据区与实例
 理解安全体系
   用户
   认证方式
   网络监听
   企业级认证方式
How Postgres? -- Just Do It!

 实操
   psql postgres
   命令行客户端
      丰富的命令和功能支持
      工具命令
   GUI界面
      PGAdminIII
      PHPPgAdmin
      Emacs!
 客户端驱动
   JDBC/ADO.net
   psycopg2/DBD::Pg
   ruby/php...
Postgres Story -- 树状结构访问

 程序逻辑实现
   return next
   return query
 数据结构实现
   ltree
Postgres Story -- 位映射

 问题背景
   布隆过滤器
   基因工程及生物科学研究
   其它数据压缩与加密场景...
 实现
   两个字段?
      两个字段!
   简单的基本运算演示
      统计覆盖
   bits 介绍
      技术特色
      运算支持
Postgres Story -- 最近访问用户

 问题背景
   背景介绍
   与 memcache 实现的比较
 实现
   经典的触发器应用
   性能与性价比分析
   维护建议
Postgres Story --不规则数据集

 问题背景
   背景介绍
   与继承实现的比较
   与Domino实现的比较
   与 couchDB 实现的比较
   与KV数据库实现的比较
Postgres Story --不规则数据集

 实现
   经典的 XML 应用(pgxml)
     函数(xpath_xxx)
     函数索引实践
     性能与性价比分析
     维护建议
   语义模型
     化列为行
     以空间换功能
     需要应用层组件支持
Postgres Story --全文搜索引擎

 问题背景
   背景介绍
   与 Lucene 实现的比较
   与 Xapian 实现的比较
 实现
   Tsearch2引引擎
      基本运算
      方便的扩展接口
   中文语言分析引擎nlpbamboo
      中文分词技术的引入
      待发挥的潜能
   实践
Postgres Story --全文搜索引擎

 TSearch2
   vector
      to_tsvector
   query 
      to_tsquery
   @@
      vector @@ query
   setweight(tsvector, char)
   rank
      get and set
   rank_cd
      cover density ranking
Postgres Story --全文搜索引擎

 nlpbamboo
    符合 TSearch2 接口
    chinesecfg
    to_tsvector('chinesecfg', text)
    plainto_tsquery('chinesecfg', text)
Postgres Story --全文搜索引擎

 create table page
    uuid/id
    content 
    full text index
 create table tmplate
    uuid/id
    uri
    template
Postgres Story --全文搜索引擎

 content 使用 XML 方案
    可以方便的使用XPATH支持进行查询
    可以使用XSLT定制输出
    允许对多种不同格式兼容存储,以利于未来的数据挖掘需
    要
    固定的格式:
       /*/@source
       /*/@tmpl
       /*/@type
       /*/content
 template 
    保存XSLT
    template 表以 uri 为键
Postgres Story --语义模型

 问题背景
   背景介绍
   传统关系模型的优缺点
   三元语义模型
 实现
   三元语义关系表——subject/predicate/object
   值存储与查询
   关联查询问题
   ORM——SQLAlchemy
Postgres Story --语义模型

 问题分析
   动态数据类型问题
      多表串联
       动态类型的应用层支持
   DSL支持
 思路
   SQLAlchemy
   subject = (subject predicate object) : subjects
   semantic query language
   Dynamic Type Object Model
Postgres Story --语义模型

 架构
   subject is subject
   predicate is subject
   predicate has objType
   predicate has name (name just it's word)
   is is predicate
   is objType subject
   objType is subject
   objType name objType
   has is predicate
   has objType predicate
   name is predicate
Postgres Story --语义模型

 架构
   name objType text
   text is type
   set is predicate
   set objType subject
   list is predicate
   list objType subject
   ……
Postgres Story --语义模型

 数据库层
   create table subject
      id serial
      subject integer foreign key references subject
      (id)
      predicate integer foreign key references subject
      (id)
      object integer foreign key references subject(id)
   create table text
      id serial
      subject integer foreign key references subject
      (id)
Postgres Story --语义模型

 查询:
   subs : select * from subject where ...
      select * from text where subject in subs.subject
      select * from "other regist type" where ...
   分析
      与数据相比,基础类型总是有限的
      整数据列索引后性能很好
      需要动态类型的应用层查询工具支持
Postgres Story --语义模型

 QL设计:
   subject predicate object
   object = subject predicate
      object predicate subject
      object `predicate ` subject
   get subject filter predicate match some condition
      get subject (p0,  p1, ...) filter ...
   put/insert/update (subject predicate object)
   update subject (predicate object)s filter ...
   "no DML!"
Postgres Story --语义模型

 查询语言的设计分析:
   需要感知注册的存储类型表
   自省类型能力
   一些基础谓词需要应用层解释
     objType/type
     is
     ...
   应该定义一些内置容器类型
     set
     list
     dict
     ...
   应该支持惰性计算
Postgres Story --语义模型

 查询语言的设计分析:
   subject is a set of (predicate, object)
   subject maybe anonymous
      subject_id
      predicate_id (predicate 一定有 name)
      object
   process(predicate -> object)  could concurrent
      object -> message -> argument
      object -> method -> parameter
   every thing is triple
      (subject predicate object)
Postgres Story --语义模型

 语义模型的存储无关性
   不需要深度的服务器编程能力
   基本内核只需要整型和字符串支持
   应用层可以使用多种编程语言
     可以是动态类型,有自省能力的语言
     可以是有反射能力的静态语言(C#/Java)
     可以是有类型推导能力的静态语言(haskell)
     可以是支持“void *”的语言(C)
   应该可以支持 sqlite 级别的数据库
   引擎应支持具体平台的扩展定制(主要是类型增进)
Postgres Story --语义模型

 目前需要增进的方面
   部分元语义定义不清
      type and collections
      predicate how do
      ...
   subject 提取方式
   Query Language
   parser
   API
Postgres Story --总结

  PostgreSQL First Day
  特色功能
  服务器编程能力——最近访问用户/树状表递归
  特殊数据类型——位映射
  全文检索支持——tsearch2与nlpbamboo的组合
  基于XML的动态数据结构
  语义模型
Postgres Story 



         by : 刘鑫(March Liu)
         site : http://zerolab.co.cc
         email : march.liu@gmail.com
         local : 珠海金山软件

Weitere ähnliche Inhalte

Ähnlich wie Postgre sql intro 0

开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统klandor
 
Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.pptjames tong
 
Django敏捷开发 刘天斯
Django敏捷开发 刘天斯Django敏捷开发 刘天斯
Django敏捷开发 刘天斯liuts
 
Android resource-management
Android resource-managementAndroid resource-management
Android resource-managementLucas Xu
 
Sphinx 全文检索实践指南
Sphinx 全文检索实践指南Sphinx 全文检索实践指南
Sphinx 全文检索实践指南Shaoning Pan
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressAppzhoujg
 
Sql Alchemy Story
Sql Alchemy StorySql Alchemy Story
Sql Alchemy StoryZoom Quiet
 
基于 PostgreSQL 的关系型数据库方案
基于 PostgreSQL 的关系型数据库方案基于 PostgreSQL 的关系型数据库方案
基于 PostgreSQL 的关系型数据库方案March Liu
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
Erlang游戏开发
Erlang游戏开发Erlang游戏开发
Erlang游戏开发litaocheng
 
事件驱动编程
事件驱动编程事件驱动编程
事件驱动编程banq jdon
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试lydiafly
 
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术bigqiang zou
 
lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫建興 王
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 zhen chen
 
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介Herman Wu
 
Kid171 chap03 traditional Chinese Version
Kid171 chap03 traditional Chinese VersionKid171 chap03 traditional Chinese Version
Kid171 chap03 traditional Chinese VersionFrank S.C. Tseng
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析wavefly
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)vanadies10
 
Node js feat pegasus
Node js feat pegasusNode js feat pegasus
Node js feat pegasuscnfi
 

Ähnlich wie Postgre sql intro 0 (20)

开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统
 
Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.ppt
 
Django敏捷开发 刘天斯
Django敏捷开发 刘天斯Django敏捷开发 刘天斯
Django敏捷开发 刘天斯
 
Android resource-management
Android resource-managementAndroid resource-management
Android resource-management
 
Sphinx 全文检索实践指南
Sphinx 全文检索实践指南Sphinx 全文检索实践指南
Sphinx 全文检索实践指南
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
 
Sql Alchemy Story
Sql Alchemy StorySql Alchemy Story
Sql Alchemy Story
 
基于 PostgreSQL 的关系型数据库方案
基于 PostgreSQL 的关系型数据库方案基于 PostgreSQL 的关系型数据库方案
基于 PostgreSQL 的关系型数据库方案
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
Erlang游戏开发
Erlang游戏开发Erlang游戏开发
Erlang游戏开发
 
事件驱动编程
事件驱动编程事件驱动编程
事件驱动编程
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
 
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术
 
lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
 
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介
 
Kid171 chap03 traditional Chinese Version
Kid171 chap03 traditional Chinese VersionKid171 chap03 traditional Chinese Version
Kid171 chap03 traditional Chinese Version
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)
 
Node js feat pegasus
Node js feat pegasusNode js feat pegasus
Node js feat pegasus
 

Mehr von March Liu

Jaskell Core Parsec
Jaskell Core ParsecJaskell Core Parsec
Jaskell Core ParsecMarch Liu
 
轻量级文本工具集
轻量级文本工具集轻量级文本工具集
轻量级文本工具集March Liu
 
奇点与未来
奇点与未来奇点与未来
奇点与未来March Liu
 
尼尔盖曼的美国众神
尼尔盖曼的美国众神尼尔盖曼的美国众神
尼尔盖曼的美国众神March Liu
 
创业项目中常见的技术和管理债务
创业项目中常见的技术和管理债务创业项目中常见的技术和管理债务
创业项目中常见的技术和管理债务March Liu
 
It工程师的职业成长
It工程师的职业成长It工程师的职业成长
It工程师的职业成长March Liu
 
Xcode tutorial
Xcode tutorialXcode tutorial
Xcode tutorialMarch Liu
 
Socrates Used PostgreSQL and SQLAlchemy
Socrates Used PostgreSQL and SQLAlchemySocrates Used PostgreSQL and SQLAlchemy
Socrates Used PostgreSQL and SQLAlchemyMarch Liu
 
PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性March Liu
 
Emacs Introduction
Emacs IntroductionEmacs Introduction
Emacs IntroductionMarch Liu
 
软件开发工程化的个人体验
软件开发工程化的个人体验软件开发工程化的个人体验
软件开发工程化的个人体验March Liu
 
Python速成指南
Python速成指南Python速成指南
Python速成指南March Liu
 
Python 数据库技术第三讲
Python 数据库技术第三讲Python 数据库技术第三讲
Python 数据库技术第三讲March Liu
 
Python 数据库技术讲座(二)
Python 数据库技术讲座(二)Python 数据库技术讲座(二)
Python 数据库技术讲座(二)March Liu
 
Python 数据库技术讲座(一)
Python 数据库技术讲座(一)Python 数据库技术讲座(一)
Python 数据库技术讲座(一)March Liu
 
Python 数据库技术
Python 数据库技术Python 数据库技术
Python 数据库技术March Liu
 
PostgreSQL 9 的 standby 集群实践
PostgreSQL 9 的 standby 集群实践PostgreSQL 9 的 standby 集群实践
PostgreSQL 9 的 standby 集群实践March Liu
 
PostgreSQL 9 Standby
PostgreSQL 9 StandbyPostgreSQL 9 Standby
PostgreSQL 9 StandbyMarch Liu
 
1 Python简介
1 Python简介1 Python简介
1 Python简介March Liu
 

Mehr von March Liu (20)

Jaskell Core Parsec
Jaskell Core ParsecJaskell Core Parsec
Jaskell Core Parsec
 
轻量级文本工具集
轻量级文本工具集轻量级文本工具集
轻量级文本工具集
 
奇点与未来
奇点与未来奇点与未来
奇点与未来
 
尼尔盖曼的美国众神
尼尔盖曼的美国众神尼尔盖曼的美国众神
尼尔盖曼的美国众神
 
创业项目中常见的技术和管理债务
创业项目中常见的技术和管理债务创业项目中常见的技术和管理债务
创业项目中常见的技术和管理债务
 
It工程师的职业成长
It工程师的职业成长It工程师的职业成长
It工程师的职业成长
 
Xcode tutorial
Xcode tutorialXcode tutorial
Xcode tutorial
 
Socrates Used PostgreSQL and SQLAlchemy
Socrates Used PostgreSQL and SQLAlchemySocrates Used PostgreSQL and SQLAlchemy
Socrates Used PostgreSQL and SQLAlchemy
 
PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性
 
Emacs Introduction
Emacs IntroductionEmacs Introduction
Emacs Introduction
 
软件开发工程化的个人体验
软件开发工程化的个人体验软件开发工程化的个人体验
软件开发工程化的个人体验
 
Python速成指南
Python速成指南Python速成指南
Python速成指南
 
Python 数据库技术第三讲
Python 数据库技术第三讲Python 数据库技术第三讲
Python 数据库技术第三讲
 
Python 数据库技术讲座(二)
Python 数据库技术讲座(二)Python 数据库技术讲座(二)
Python 数据库技术讲座(二)
 
Python 数据库技术讲座(一)
Python 数据库技术讲座(一)Python 数据库技术讲座(一)
Python 数据库技术讲座(一)
 
Python 数据库技术
Python 数据库技术Python 数据库技术
Python 数据库技术
 
PostgreSQL 9 的 standby 集群实践
PostgreSQL 9 的 standby 集群实践PostgreSQL 9 的 standby 集群实践
PostgreSQL 9 的 standby 集群实践
 
PostgreSQL 9 Standby
PostgreSQL 9 StandbyPostgreSQL 9 Standby
PostgreSQL 9 Standby
 
About Me
About MeAbout Me
About Me
 
1 Python简介
1 Python简介1 Python简介
1 Python简介
 

Postgre sql intro 0

  • 2. Postgres WWH PostgreSQL ? What? RDBMS OpenSource Rich Power Why? How?
  • 3. What is Postgres? PostgreSQL 是 一款开放源码的关系型数据库 BSD授权 有广泛的平台实现 一款久经考验的数据库产品 美国军方 医疗行业 地理信息系统 ……  具有实用面向对象特征的ORDB  强大的服务器端编程能力 完备的数据库功能
  • 4. Why Postgres? PostgreSQL 有力的支持各种数据库设计 丰富实用的数据模型 自然优雅的程序逻辑 丰富强大的服务器端编程支持 适用各种架构需求 丰富便利的运维技术支持 冷备 热备 负载匀衡 统计分析工具  ……
  • 5. Why Postgres? 强大的并发性能 http://www.blowfisher.net/gallery/v/pg-vs-mysql/ 丰富的安全模型 buildin trusted by addr by ldap ssl ...
  • 6. Postgres 丰富的数据类型 强大的文本处理能力 独特的无限文本类型 Text 正则表达式! 完备的 XML 功能支持 Numeric 满足严谨的商务应用需求 满足各种特殊应用需求的数据类型 久负盛誉的几何类型  ltree 字典类型 hstore bits 全文索引 ...
  • 7. Postgres 实用的ORDB模型 不仅是RDB 完备的RDB模型支持 继承 行集<=>向量集  自然的OO概念 智能的静态类型推导 函数支持Table类型  完备的约束定义能力 主键与唯一约束 自增字段与UUID Default and check 触发器
  • 8. Postgres 强大的编程能力 SQL Window语法及数据挖掘 Iimit ... offset ... ... PLPGSQL 完备的过程控制语法 参数化SQL命令 自然的存储访问集成(游标) return next 和 return query  PLPerl/PLPython/PLTCL/PLJAVA/PLxxx... 无限可能的语言扩展!
  • 9. How Postgres? -- Just Do It! 安装 Linux  cluster on debian/ubuntu BSD Port  Windows Binary Make It Yourself? 基于标准c 有详细的编译指导 对“新”手,可能比安装更好用……囧……
  • 10. How Postgres? -- Just Do It! The First Day sudo su postgres initdb create superuser 理解存储结构 Linux Cluster 数据区与实例 理解安全体系 用户 认证方式 网络监听 企业级认证方式
  • 11. How Postgres? -- Just Do It! 实操 psql postgres 命令行客户端 丰富的命令和功能支持 工具命令 GUI界面 PGAdminIII PHPPgAdmin Emacs! 客户端驱动 JDBC/ADO.net psycopg2/DBD::Pg ruby/php...
  • 12. Postgres Story -- 树状结构访问 程序逻辑实现 return next return query 数据结构实现 ltree
  • 13. Postgres Story -- 位映射 问题背景 布隆过滤器 基因工程及生物科学研究 其它数据压缩与加密场景... 实现 两个字段? 两个字段! 简单的基本运算演示 统计覆盖 bits 介绍 技术特色 运算支持
  • 14. Postgres Story -- 最近访问用户 问题背景 背景介绍 与 memcache 实现的比较 实现 经典的触发器应用 性能与性价比分析 维护建议
  • 15. Postgres Story --不规则数据集 问题背景 背景介绍 与继承实现的比较 与Domino实现的比较 与 couchDB 实现的比较 与KV数据库实现的比较
  • 16. Postgres Story --不规则数据集 实现 经典的 XML 应用(pgxml) 函数(xpath_xxx) 函数索引实践 性能与性价比分析 维护建议 语义模型 化列为行 以空间换功能 需要应用层组件支持
  • 17. Postgres Story --全文搜索引擎 问题背景 背景介绍 与 Lucene 实现的比较 与 Xapian 实现的比较 实现 Tsearch2引引擎 基本运算 方便的扩展接口 中文语言分析引擎nlpbamboo 中文分词技术的引入 待发挥的潜能 实践
  • 18. Postgres Story --全文搜索引擎 TSearch2 vector to_tsvector query  to_tsquery @@ vector @@ query setweight(tsvector, char) rank get and set rank_cd cover density ranking
  • 19. Postgres Story --全文搜索引擎 nlpbamboo 符合 TSearch2 接口 chinesecfg to_tsvector('chinesecfg', text) plainto_tsquery('chinesecfg', text)
  • 20. Postgres Story --全文搜索引擎 create table page uuid/id content  full text index create table tmplate uuid/id uri template
  • 21. Postgres Story --全文搜索引擎 content 使用 XML 方案 可以方便的使用XPATH支持进行查询 可以使用XSLT定制输出 允许对多种不同格式兼容存储,以利于未来的数据挖掘需 要 固定的格式: /*/@source /*/@tmpl /*/@type /*/content template  保存XSLT template 表以 uri 为键
  • 22. Postgres Story --语义模型 问题背景 背景介绍 传统关系模型的优缺点 三元语义模型 实现 三元语义关系表——subject/predicate/object 值存储与查询 关联查询问题 ORM——SQLAlchemy
  • 23. Postgres Story --语义模型 问题分析 动态数据类型问题 多表串联  动态类型的应用层支持 DSL支持 思路 SQLAlchemy subject = (subject predicate object) : subjects semantic query language Dynamic Type Object Model
  • 24. Postgres Story --语义模型 架构 subject is subject predicate is subject predicate has objType predicate has name (name just it's word) is is predicate is objType subject objType is subject objType name objType has is predicate has objType predicate name is predicate
  • 25. Postgres Story --语义模型 架构 name objType text text is type set is predicate set objType subject list is predicate list objType subject ……
  • 26. Postgres Story --语义模型 数据库层 create table subject id serial subject integer foreign key references subject (id) predicate integer foreign key references subject (id) object integer foreign key references subject(id) create table text id serial subject integer foreign key references subject (id)
  • 27. Postgres Story --语义模型 查询: subs : select * from subject where ... select * from text where subject in subs.subject select * from "other regist type" where ... 分析 与数据相比,基础类型总是有限的 整数据列索引后性能很好 需要动态类型的应用层查询工具支持
  • 28. Postgres Story --语义模型 QL设计: subject predicate object object = subject predicate object predicate subject object `predicate ` subject get subject filter predicate match some condition get subject (p0,  p1, ...) filter ... put/insert/update (subject predicate object) update subject (predicate object)s filter ... "no DML!"
  • 29. Postgres Story --语义模型 查询语言的设计分析: 需要感知注册的存储类型表 自省类型能力 一些基础谓词需要应用层解释 objType/type is ... 应该定义一些内置容器类型 set list dict ... 应该支持惰性计算
  • 30. Postgres Story --语义模型 查询语言的设计分析: subject is a set of (predicate, object) subject maybe anonymous subject_id predicate_id (predicate 一定有 name) object process(predicate -> object)  could concurrent object -> message -> argument object -> method -> parameter every thing is triple (subject predicate object)
  • 31. Postgres Story --语义模型 语义模型的存储无关性 不需要深度的服务器编程能力 基本内核只需要整型和字符串支持 应用层可以使用多种编程语言 可以是动态类型,有自省能力的语言 可以是有反射能力的静态语言(C#/Java) 可以是有类型推导能力的静态语言(haskell) 可以是支持“void *”的语言(C) 应该可以支持 sqlite 级别的数据库 引擎应支持具体平台的扩展定制(主要是类型增进)
  • 32. Postgres Story --语义模型 目前需要增进的方面 部分元语义定义不清 type and collections predicate how do ... subject 提取方式 Query Language parser API
  • 33. Postgres Story --总结  PostgreSQL First Day  特色功能  服务器编程能力——最近访问用户/树状表递归  特殊数据类型——位映射  全文检索支持——tsearch2与nlpbamboo的组合  基于XML的动态数据结构  语义模型
  • 34. Postgres Story  by : 刘鑫(March Liu) site : http://zerolab.co.cc email : march.liu@gmail.com local : 珠海金山软件