SequoiaDB 一款自研金融級分佈式數據庫產品,支持標準SQL和分佈式事務功能、支持複雜索引查詢,兼容 MySQL、PGSQL、SparkSQL等SQL訪問方式。SequoiaDB 在分佈式存儲功能上,較通常的大數據產品提供更多的數據切分規則,包括:水平切分、範圍切分、主子表切分和多維切分方式,用戶能夠根據不用的場景選擇相應的切分方式,以提升系統的存儲能力和操做性能。mysql
爲了可以提供簡單便捷的數據遷移和導入功能,同時更方便地與傳統數據庫在數據層進行對接,巨杉數據庫支持多種方式的數據導入,用戶能夠根據自身需求選擇最適合的方式加載數據。sql
本文主要介紹巨杉數據庫集中常見的高性能數據導入方法,其中包括巨杉工具矩陣中的 Sdbimprt導入工具,以及使用SparkSQL, MySQL和原生API 接口進行數據導入,一共四種方式。數據庫
Sdbimprt工具導入
sdbimprt 是 SequoiaDB 的數據導入工具,是巨杉數據庫工具矩陣中重要組成之一,它能夠將 JSON 格式或 CSV 格式的數據導入到 SequoiaDB 數據庫中。apache
關於工具說明與參數介紹,請參考:
http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1479195620-edition_id-0。json
1、示例
下面簡單介紹一下如何使用 sdbimprt 工具將 csv 文件導入到 SequoiaDB 集合空間 site 的集合 user_info 中:數組
sdbimprt --hosts=localhost:11810 --type=csv --file=user.csv -c site -l user_info --fields='name string default "Anonymous", age int, country'性能優化
--hosts:指定主機地址(hostname:svcname)網絡
--type:導入數據格式,能夠是csv或json多線程
--file:要導入的數據文件名稱併發
-c(--csname):集合空間的名字
-l(--clname):集合的名字
--fields:指定導入數據的字段名、類型、默認值
2、導入性能優化
下面說明使用 sdbimprt 工具時如何提高導入性能:
使用 --insertnum(-n) 參數
在導入數據時,使用 --insertnum(-n) 參數,能夠實現批量導入,減小數據發送時的網絡交互的次數,從而加快數據導入速度。取值範圍爲1~100000,默認值爲100。
使用 --jobs(-j) 參數
指定導入鏈接數(每一個鏈接一個線程),從而實現多線程導入。
SparkSQL 導入
SparkSQL 能夠方便的讀取多種數據源,經過 SequoiaDB 提供的 Spark 鏈接器,能夠使用 SparkSQL 向 SequoiaDB 中寫入數據或從中讀取數據。
關於 SparkSQL 如何與 SequoiaDB 鏈接,請參考:
http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190712-edition_id-0。
1、示例
下面舉例說明如何將 HDFS 中的 csv 文件經過 SparkSQL 導入 SequoiaDB 集合中,以及如何優化導入性能。
一、將 HDFS 中 csv 文件映射成 spark 的臨時表
CREATE TABLE
hdfstable
USING
org.apache.spark.sql.execution.datasources.csv.CSVFileFormat
OPTIONS (
path "hdfs://usr/local/data/test.csv",
header "true"
)
create temporary table sdbtable (
a string,
b int,
c date
)
using
com.sequoiadb.spark
OPTIONS
(
host 'sdbserver1:11810,sdbserver2:11810,sdbserver3:11810',
username 'sdbadmin',
password 'sdbadmin',
collectionspace 'sample',
collection 'employee',
bulksize '500'
);
2、導入性能優化
SparkSQL 數據寫入有如下兩個參數能夠優化:
host
儘可能指定多個 coord 節點的地址,用「,」分隔多個地址,數據會隨機發到不一樣 coord 節點上,起到負載均衡的做用。
bulksize
該參數默認值爲500,表明鏈接器向 SequoiaDB 寫入數據時,以 500 條記錄組成一個網絡包,再向 SequoiaDB 發送寫入請求,能夠根據數據的實際大小調整 bulksize 的值。
MySQL 導入
SequoiaDB 以存儲引擎的方式與 MySQL 對接,使得用戶能夠經過 MySQL 的 SQL 接口訪問 SequoiaDB 中的數據,並進行增、刪、改、查等操做。
關於如何與MySQL對接,請參考:
http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1521595283-edition_id-302。
1、示例
使用 mysql 向 SequoiaDB 導入數據有如下幾種方式:
2、導入性能優化
提高MySQL的導入性能有以下建議:
sequoiadb_conn_addr 指定多個地址
引擎配置參數「sequoiadb_conn_addr」儘可能指定多個coord節點的地址,用「,」分隔多個地址,數據會隨機發到不一樣coord節點上,起到負載均衡的做用。
開啓 bulkinsert
引擎配置參數「sequoiadb_use_bulk_insert」指定是否啓用批量插入,默認值爲「ON」,表示啓用。配置參數「sequoiadb_bulk_insert_size」指定批量插入時每批的插入記錄數,默認值2000。能夠經過調整bulkinsert size提升插入性能。
API 接口導入
SequoiaDB 提供了插入數據的 API 接口,即「insert」接口。insert 接口會根據傳入的參數不一樣而使用不一樣的插入方式,若是每次只傳入一條記錄,則接口也是將記錄逐條的發送到數據庫引擎,若是每次傳入一個包含多條記錄的集合或數組,則接口會一次性把這批記錄發送到數據庫引擎,最後經過引擎一條一條寫入數據庫中。
所以,insert 接口的兩種插入方式的區別在於發送數據到數據庫引擎這一過程,一次傳入多條記錄這種方式稱爲「bulkinsert」,相對來講會減小數據發送時的網絡交互的次數,插入性能更佳。
小結
如何達到最大數據加載速度,是數據庫遷移/數據導入中常遇到的問題,本文從如下四個方面分別介紹了 SequoiaDB 數據遷移/導入過程當中性能最優化的方法:
1)基於巨杉工具矩陣 sdbimprt 導入能夠採用修改參數 host 指定多個節點、修改鏈接數、切分文件、修改參數 insertnum、重建索引等等對數據導入速度進行優化。
2)基於 MySQL 導入能夠採用修改參數 host 地址及 bulksize 進行優化。
3)基於 Spark 導入能夠採用指定多個協調節點IP、設置 bulkinsert 參數、切分文件進行優化。
4)基於API接口進行優化能夠採用 bulkinsert 批量插入數據,減小網絡交互。
你們能夠參考本文的數據導入方法進行實踐驗證,從傳統數據庫遷移到巨杉數據庫SequoiaDB。