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引擎。