第1页
SDB_FDW简介
第2页
SQL与NoSQL相结合
SQL NoSQL
第3页
为什么需要NoSQL数据库?
• 未来5年是数据库产品改朝换代的关键时期 • 所有传统数据库内核代码都超过25年历史,技术上已经不
太适应很多互联网应用及其大数据应用的需求
第4页
常用数据库的发布时间
数据库 Oracle IBM DB2 Microsoft SQL Server MySQL MongoDB SequoiaDB Cassandra Hadoop Spark
发布时间 1979 1983 1988 1996 2009 2012 2008 2006 2013
距现在(年) 35 31 26 18 5 2 6 8 1
第5页
关系型数据库遭遇的挑战
多数据类型 • 非结构化数据 • 半结构化数据
敏捷开发 • 简化开发流程 • 迭代式更新
海量数据存储
• PB级别的数据 • 百亿级别记录 • 每秒百万级别的查询
新型架构 • 架构水平扩张 • PC服务器集群 • 云计算
第6页
NoSQL解决方案
数据模型灵活 海量数据
Schemaless带来开发的敏捷 和可扩展性的提升
分布式架构+非结构化存储= 水平扩张
低成本
使用PC服务器进行水平扩张
第7页
关系型数据模型僵硬
第8页
JSON灵活的数据类型
RDBMS
SequoiaDB
第10页
但是NoSQL不能完全替代SQL 并不是所有的业务都能摆脱Join
第11页
NoSQL下的关联需要手工完成
• 手工实现NLJoin
用户名为 “Tom”,得到
用户ID
用户
交易
根据该用户ID得 到所有交易记
录
第12页
NoSQL中的SQL支持
db.user.profile.find ( { “user_id” : 1021 } ) ;
第13页
Foreign Data Wrapper(FDW)
通过FDW可以访问任一类型的 存储
oracle_fdw
PostgreSQL
file_fdw
… sdb_fdw
oracle
csv file
SequoiaDB
第14页
使用sdb_fdw连接SequoiaDB
1.通过sdb_fdw建立PostgreSQL与SequoiaDB的连接服务(psql下操作步骤)
create extension sdb_fdw; create server sdb_server foreign data wrapper sdb_fdw options(address ‘192.168.20.197’, service ‘11810’);
2.建立与SequoiaDB表的关联(pg的表test关联到SequoiaDB的表cs.cl)
create foreign table test (name text, age integer) server sdb_server options ( collectionspace ‘cs’, collection ‘cl’);
3.操作pg的表test,即相当于操作SequoiaDB的cs.cl表
select * from test;
第15页
FDW机制
• 将对表的操作抽象成一组固定的接口 • 针对具体的存储编写相对应的实现函数,从而实现对外部数据的访问
Query
Update
Insert
GetPlan
AddUpdateTargets EndScan
BeginModify EndModify
BeginScan IterateScan
BeginModify ExecUpdate
ExecInsert
EndModify
第16页
Query
一次查询操作涉及接口:
GetForeignRelSize
GetForeignPaths
GetForeignPlan
BeginForeignScan
获取下一条
IterateForeignScan
EndForeignScan
1.获取查询涉及的字段属性 2.预估查询的记录数 13..分计算配f查d询w资路源径 2.根据记录数、记录长度等信息, 1计.根算据不最同佳查的询查路询径路下径的,CP计U、算 磁具体盘的消耗查询计划 21..根获据取查条件询开的结始果查集询、,获查询取条游标件
1.根据游标获取下一条记录 2.将记录转化为postgreSQL的 1格.查式询,结并束填,入释指放定f的dwt资up源le中
第17页
Query相关-explain
Query的explain操作涉及接口:
GetForeignRelSize
GetForeignPaths
GetForeignPlan
BeginForeignScan ExplainForeignScan
1.发现Explain标识即返回,不做 实际的查询
1.返回相关的操作的表名
EndForeignScan
第18页
Update
一次更新操作涉及接口:
记录主键字段名,或 rowid信息,用于唯一 标识一条记录
AddForeignUpdate Targets
GetForeignRelSize
记录为空
EndForeignScan EndForeignModify
GetForeignPaths GetForeignPlan
ExecForeignUpdate
获取下一条
IterateForeignScan
清理连接句柄
根据主键更新指定字 段的值
生成具体的修改计划, 空操作
返回支持update的flag
PlanForeignModify
IsForeignRelUpdat able
BeginForeignModify BeginForeignScan
新建与SequoiaDB的 连接句柄
第19页
Detele
一次删除操作涉及接口:
AddForeignUpdate Targets
EndForeignScan
GetForeignRelSize
EndForeignModify
记录为空
GetForeignPaths
ExecForeignDelete
GetForeignPlan
获取下一条
IterateForeignScan
根据主键删除相应的 记录
PlanForeignModify
IsForeignRelUpdat able
BeginForeignModify BeginForeignScan
第20页
Update/Delete相关-explain
Update/Delete的explain操作涉及接口:
AddForeignUpdate Targets
EndForeignScan
GetForeignRelSize
EndForeignModify
GetForeignPaths
ExplainForeignScan
GetForeignPlan
ExplainForeignModify
可以打印内部的修改 信息
PlanForeignModify
BeginForeignModify
IsForeignRelUpdat able
BeginForeignScan
第21页
Insert
一次插入操作涉及接口:
PlanForeignModify
IsForeignRelUpdat able
1.获取查询涉及的字段属性 2.预估查询的记录数 3.分配fdw资源
BeginForeignModify
ExecForeignInsert EndForeignModify
1.将pg的记录格式转化为 SequoiaDB的内部格式 2.向SequoiaDB插入数据
第22页
Analyze
1. 对表做数据取样 2. 预估表的静态数据,如:条数,占用的页大小等
AnalyzeForeignTable
1.预估页大小
AcquireSampleRowsFunc
1.对表进行取样 2.获取表的条数等信息
第23页
FDW的类型匹配
PostgreSQL提供了丰富的类型支持,在使用FDW时需要注意与Sequoiadb的类型匹配
Sequoiadb内存储 PostgreSQL关联的字 PostgreSQL通过FDW识
的内容
段格式
别出来的内容
“abcd”
Text
“abcd”
“abcd”
Integer
NULL
3.14
double precision
3.14
3.14
Integer
3.14 Text
NULL
注:如第2、5条记录所示,由于类型不匹配,PostgreSQL识别出来,该字段为NULL; 但是无法通过查询条件 is NULL 找到该记录
第24页
Demo
第25页
谢谢