AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

SQL与NoSQL相结合 by 王涛@Sequoiadb

发布者 PostgreSQL
发布于 1430807322995  浏览 5048 关键词 PostgreSQL, NoSQL, 数据库 
分享到

第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页

谢谢



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。