【入門教程】SequoiaDB+Postgresql數據實時檢索最佳實踐

1. 背景

SequoiaDB數據實時檢索的能力體如今索引和數據切分的使用上,建立合適的索引可以快速查詢到具有某一特徵數據的能力;合理的切分方式可以提升數據查詢性能。好比按時間,按地區去統計一些數據時,能夠採用主子表的切分方式,將一個海量數據的集合切分紅均勻的多個數據塊,某些類型的查詢性能就能夠獲得極大提高。sql

 

SequoiaDB做爲分佈式數據庫,從設計之初就已經支持SQL訪問。目前,SequoiaDB自研的SQL訪問組件SequoiaSQL做爲企業版的功能之一已經提供給上百家企業用戶使用,而且已經實現分佈式架構下的SQL 2003支持。shell

 

因爲大部分開發人員及客戶傾向於使用標準的SQL語句做爲數據庫操做的標準接口,SequoiaDB實現了與PostgreSQL的對接,使得開發者可使用SQL語句訪問SequoiaDB數據庫,完成SequoiaDB數據庫的增,刪,查,改操做。對於SequoiaDB社區版用戶,咱們能夠經過SequoiaDB對接PostgreSQL 實現社區版的分佈式SQL訪問。這一應用方式基本也能夠知足大部分的社區版需求。數據庫

 

 

2. SequoiaDB與PostgreSQL對接結構

 

                               

Pg與sdb對接架構圖編程

Pg對接sdb步驟bash

· 先建立PostgreSQL本地數據庫,服務器

· 在本地數據庫中加載SequoiaDB鏈接驅動sdb_fdw架構

· 基於sdb_fdw,建立server,配置與SequoiaDB的鏈接參數,包括認證信息,server表明須要訪問的數據庫app

· 定義好server後,建立外部表,映射到目標server中的可訪問對象,即SequoiaDB的集合。分佈式

 

2.1 部署環境

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

 

2.2 安裝PGSQL

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/

 

2.3 安裝sequoiadb-postgreSql插件

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

 

 

2.4 PostgreSQL與SequoiaDB對接流程:

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字段。

 

3 PostgreSQL操做SequoiaDB數據庫實踐

配置好PostgreSQL與SequoiaDB對接後,爲使pgsql可以對sdb的集合進行數據操做,還須要創建外表用於映射sdb集合數據。

3.1 搭建表(集合)結構

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中的集合空間,集合和字段名是大寫的,須要在名字上加上雙引號。

 

3.2 數據實時檢索實踐

對於多表關聯,真正須要查詢的數據基本都是能夠肯定的情形下,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語句不能使用索引,由於索引字段被函數調用,不能走索引。

 

4 結論

SequoiaDB爲社區用戶提供PostgreSQL對接接口,可以使用PostgreSQL的SQL引擎對SequoiaDB進行查詢操做,使得對非關係型數據庫不熟悉的業務編程人員也可以經過其熟練的SQL語句對SequoiaDB進行插入查詢工做。

SequoiaDB+PostgreSQL能夠說爲社區用戶提供了一個更爲簡單的技術選擇,使得SequoiaDB除了原生API以外,爲社區開發者提供了SQL的接口。

固然,若是有更爲複雜的需求或者更爲龐大的業務數據須要管理,咱們仍是會推薦購買企業版的SequoiaDB,包括其中的SequoiaSQL分佈式SQL引擎。

          

相關文章
相關標籤/搜索