SequoiaDB数据实时检索的能力体如今索引和数据切分的使用上,建立合适的索引可以快速查询到具有某一特征数据的能力;合理的切分方式可以提升数据查询性能。好比按时间,按地区去统计一些数据时,能够采用主子表的切分方式,将一个海量数据的集合切分红均匀的多个数据块,某些类型的查询性能就能够获得极大提高。sql
SequoiaDB做为分布式数据库,从设计之初就已经支持SQL访问。目前,SequoiaDB自研的SQL访问组件SequoiaSQL做为企业版的功能之一已经提供给上百家企业用户使用,而且已经实现分布式架构下的SQL 2003支持。shell
因为大部分开发人员及客户倾向于使用标准的SQL语句做为数据库操做的标准接口,SequoiaDB实现了与PostgreSQL的对接,使得开发者可使用SQL语句访问SequoiaDB数据库,完成SequoiaDB数据库的增,删,查,改操做。对于SequoiaDB社区版用户,咱们能够经过SequoiaDB对接PostgreSQL 实现社区版的分布式SQL访问。这一应用方式基本也能够知足大部分的社区版需求。数据库
Pg与sdb对接架构图编程
Pg对接sdb步骤bash
· 先建立PostgreSQL本地数据库,服务器
· 在本地数据库中加载SequoiaDB链接驱动sdb_fdw架构
· 基于sdb_fdw,建立server,配置与SequoiaDB的链接参数,包括认证信息,server表明须要访问的数据库app
· 定义好server后,建立外部表,映射到目标server中的可访问对象,即SequoiaDB的集合。分布式
1) 服务器分布函数
服务器 |
服务名称 |
192.168.5.157 |
redhat-1 |
192.168.5.158 |
redhat-2 |
192.168.5.159 |
redhat-3 |
2) 软件配置
操做系统:RedHat7.2
JDK版本:1.7.0_80 64位
SequoiaDB版本:2.6
Postgresql版本:9.3.4
Step一、安装readline库,zlib库
yum install readline-devel yum install zlib-devel |
Step 二、下载pg压缩包,后解压,编译postgreSql
$ tar -zxvf postgresql-9.3.4.tar.gz $ cd postgresql-9.3.4/ $ ./configure && make && make install |
Step 三、切换用户,拷贝PgSql文件
$ su - sdbadmin $ cp -rf /usr/local/pgsql ~/ |
Step4 在sdbadmin用户环境变量中添加Pgsql的lib库
vi ~/.bash_profile export LD_LIBRARY_PATH=/usr/local/pgsql/lib:${LD_LIBRARY_PATH} |
Step 五、建立pgSql的数据目录,并初始化数据目录(只能初始化一次)
$ mkdir pg_data $ bin/initdb -D pg_data/ |
Step 一、建立pgSql的lib目录
$ PGLIBDIR=$(bin/pg_config --libdir) $ mkdir -p ${PGLIBDIR} |
Step 二、在share目录下建立pgSql的extension目录
$ PGSHAREDIR=$(bin/pg_config --sharedir) $ mkdir -p ${PGSHAREDIR}/extension |
Step 三、从 SequoiaDB 的安装包中,拷贝 PostgreSQL 的扩展文件
从 SequoiaDB 安装后的 PostgreSQL目录中拷贝 sdb_fdw.so 文件到 PostgreSQL 的 lib 目录,并添加软连接。
$ cp -f /opt/sequoiadb/postgresql/sdb_fdw.so_2.2_23000 ${PGLIBDIR} $ cd ${PGLIBDIR} $ ln -s sdb_fdw.so_2.2_23000 sdb_fdw.so |
将 sdb_fdw.control 和 sdb_fdw--1.0.sql 脚本拷贝到 extension 目录中:
$ cp -f /opt/sequoiadb/postgresql/sdb_fdw.control ${PGSHAREDIR}/extension/ ; $ cp -f /opt/sequoiadb/postgresql/sdb_fdw--1.0.sql ${PGSHAREDIR}/extension/ ; |
Step 四、修改PostgreSQL的日志配置,日志中增长打印时间信息、链接信息等
$ vi pg_data/postgresql.conf #打印链接信息 log_connections = on #打印断连信息 log_disconnections = on #日志中打印时间,进程id,客户端地址信息 log_line_prefix = '%m %p %r' #出现错误是,断开当前链接 exit_on_error = on |
Step五、修改PostgreSQL的链接配置
为了使非本机客户端也可以链接PostgreSQL,咱们须要修改pg的链接配置
1) 修改postgresql的监听地址
$ sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '0.0.0.0'/g" pg_data/postgresql.conf |
2) 修改信任的机器列表,信任全部机器
sed -i "s/host all all 127.0.0.1\/32 trust/host all all 0.0.0.0\/0 trust/g" /sdbdata/data03/pg_data/pg_hba.conf |
Step 六、启动pg进程
bin/postgres -D pg_data/ >> pg.log 2>&1 &
Step 七、建立 PostgreSQL 的 database
$ bin/createdb -p 5432 foo |
Step 八、进入 PostgreSQL shell 环境
$ bin/psql foo |
Step 一、加载SequoiaDB链接驱动
foo=# create extension sdb_fdw; |
Step 二、配置与sequoiadb链接参数
foo=# create server sdb_server foreign data wrapper sdb_fdw options(address '127.0.0.1', service '11810'); |
注:用户能够指定多个协调节点,避免一个协调节点出现异常后,postgresql没法使用。若是配置了数据库密码验证,须要配置user与password字段。
配置好PostgreSQL与SequoiaDB对接后,为使pgsql可以对sdb的集合进行数据操做,还须要创建外表用于映射sdb集合数据。
1) SequoiaDB中dept_test集合结构
{ "_id": { "$oid": "5950ca9e2f1f2ba90a000000" }, "dept_id": 1, "dept_name": "developer", "dept_location": "beijin" } |
emp_test集合结构
{ "_id": { "$oid": "5950caaee50314ac0a000000" }, "emp_id": 1, "name": "Holmes", "job": "salesman", "salary": 8000, "bonus": 3143, "hire_date": "2016-03-23", "manager": 10, "dept_test_id": 5 } |
为提升检索速度,将这两个集合分别根据dept_id和emp_id进行hash切分。由于对数据进行分区可以改善查询性能,平衡IO压力,对分区键为条件的检索能够仅搜索本身关心的分区,提供检索速度。
2) 关联SequoiaDB的集合,创建两个外关联表dept_test和emp_test
create foreign table dept_test(dept_id integer,dept_name varchar,dept_location varchar) server sdb_server options(collectionspace 'foo',collection 'dept_test'); create foreign table emp_test(emp_id integer,name varchar,job varchar,salary integer,bonus integer,hire_date varchar,manager integer,dept_test_id integer) server sdb_server options(collectionspace 'foo',collection 'emp_test'); |
注:集合空间与集合必须已经存在于SequoiaDB,不然查询出错
PostgreSQL是对字母大小写敏感的的,若是SequoiaDB中的集合空间,集合和字段名是大写的,须要在名字上加上双引号。
对于多表关联,真正须要查询的数据基本都是能够肯定的情形下,sdb能够将这些表数据进行清洗打平操做,将须要查询的数据及查询条件整合到一张或几张查询表(集合)中,在查询字段上创建多个索引保证查询性能。
1) PostgreSQL解析过程
PostgreSQL在执行方面它负责接收SQL查询请求,解析SQL生成逻辑计划,以后对逻辑计划进行优化,并将优化后的逻辑计划转换成执行计划,交由sdb执行,语法方面它既支持基本的操做(select、project、join、group by、filter、order by、limit等),也支持关联子查询和非关联子查询,和支持各类outer-join。
postgresql解析流程
2) 检索实践
a. 简单查询
SELECT * FROM emp_test WHERE salary BETWEEN 5000 AND 10000;
在salary字段上创建索引,能够加快条件的判断速度
b. 关联查询
SELECT name,dept_name,dept_location FROM emp_test JOIN dept_test ON emp_test.dept_test_id=dept_test.dept_id;
在外键dept_test_id上建立索引,能够加快表链接的速度
c. 聚合查询
SELECT dept_test_id,AVG(salary)
FROM emp_test
GROUP BY dept_test_id
HAVING AVG(salary)>8000 order by AVG(salary);
能够在须要排序的列上建立索引,这样查询能够利用索引的排序,加快排序查询时间;但这条SQL语句不能使用索引,由于索引字段被函数调用,不能走索引。
SequoiaDB为社区用户提供PostgreSQL对接接口,可以使用PostgreSQL的SQL引擎对SequoiaDB进行查询操做,使得对非关系型数据库不熟悉的业务编程人员也可以经过其熟练的SQL语句对SequoiaDB进行插入查询工做。
SequoiaDB+PostgreSQL能够说为社区用户提供了一个更为简单的技术选择,使得SequoiaDB除了原生API以外,为社区开发者提供了SQL的接口。
固然,若是有更为复杂的需求或者更为庞大的业务数据须要管理,咱们仍是会推荐购买企业版的SequoiaDB,包括其中的SequoiaSQL分布式SQL引擎。