DolphinDB提供了兩種導入MySQL數據的方法:ODBC插件和MySQL插件。咱們推薦使用MySQL插件導入MySQL數據,由於它的速度比ODBC導入更快,導入6.5G數據,MySQL插件的速度是ODBC插件的4倍,而且使用MySQL插件無需任何配置,而ODBC插件須要配置數據源。mysql
在使用MySQL插件以前,請先參考DolphinDB安裝使用指南安裝DolphinDB。git
1.下載插件
DolphinDB安裝目錄/server/plugins/mysql已經包含MySQL插件,用戶能夠直接使用該插件。若是用戶須要自行編譯,能夠參考https://github.com/dolphindb/DolphinDBPlugin/blob/master/mysql/README_CN.md。github
2.加載插件
在GUI中,使用loadPlugin函數加載MySQL插件:sql
loadPlugin(server_dir+"/plugins/mysql/PluginMySQL.txt")
3.接口函數
DolphinDB的MySQL插件提供瞭如下接口函數:數據庫
- connect
- showTables
- extractSchema
- load
- loadEx
咱們能夠經過如下兩種方式調用插件的接口函數:api
(1)moduleName::apiFunction。例如,調用MySQL插件的connect方法。服務器
mysql::connect(host, port, user, password, db)
(2)use moduleName,而後直接調用接口函數。只要執行一次use語句後,後續調用接口函數都不須要從新執行use函數。所以,咱們通常推薦這種調用方法。分佈式
use mysql connect(host, port, user, password, db)
3.1 connectide
語法函數
connect(host, port, user, password, db)
參數
host是MySQL服務器的主機名。
port是MySQL服務器的端口號,默認爲3306。
user是MySQL服務器中的用戶名。
password是與user對應的密碼。
db是MySQL中的數據庫名稱。
詳情
建立MySQL鏈接,返回MySQL的鏈接句柄。咱們建議MySQL用戶的Authentication Type爲mysql_native_password。
例子
鏈接本地MySQL服務器中的employees數據庫。
conn=connect("127.0.0.1",3306,"root","123456","employees")
3.2 showTables
語法
showTables(connection)
參數
connection是connect函數返回的鏈接句柄。
詳情
返回一個DolphinDB類型的數據表,包含MySQL數據庫中全部表的名稱。
例子
查看employees數據庫中的表。
showTables(conn); Tables_in_employees current_dept_emp departments dept_emp dept_emp_latest_date dept_manager employees salaries test_datatypes titles
3.2 extractSchema
語法
extractSchema(connection, tableName)
參數
connection是connect函數返回的鏈接句柄。
tableName是MySQL數據庫中的數據表名稱。
詳情
返回結果是DolphinDB類型的表。第一列是MySQL數據表中的字段名,第二列是數據導入到DolphinDB後的數據類型,第三列是MySQL中的數據類型。
例子
查看employees表中各列的數據類型。
extractSchema(conn,`employees); name type MySQL describe type emp_no LONG int(11) birth_date DATE date first_name STRING varchar(14) last_name STRING varchar(16) gender SYMBOL enum('M','F') hire_date DATE date
3.3 load
語法
load(connection, table|query, [schema], [startRow], [rowNum])
參數
connection是connect函數返回的鏈接句柄。
table是MySQL服務器中的表名。
query是MySQL中的查詢語句。
schema是DolphinDB類型的表,它包含兩列,第一列是字段名稱,第二列是數據類型。它是可選參數。用戶能夠經過指定該參數來修改數據加載到DolphinDB時的數據類型。
startRow是正整數,表示讀取數據的起始行數。它是可選參數,默認值爲0,表示從第一條記錄開始讀取數據。
rowNum是正整數,表示讀取的記錄行數。它是可選參數,若是沒有指定,表示讀取全部的數據。若是第二個參數爲query,那麼startRow和rowNum參數無效。
詳情
把MySQL數據加載到DolphinDB的內存表中。
例子
- 把employees表中的全部數據加載到DolphinDB的內存表中。
t=load(conn,"employees"); emp_no birth_date first_name last_name gender hire_date 10,001 1953.09.02 Georgi Facello M 1986.06.26 10,002 1964.06.02 Bezalel Simmel F 1985.11.21 10,003 1959.12.03 Parto Bamford M 1986.08.28 10,004 1954.05.01 Chirstian Koblick M 1986.12.01 10,005 1955.01.21 Kyoichi Maliniak M 1989.09.12 10,006 1953.04.20 Anneke Preusig F 1989.06.02 10,007 1957.05.23 Tzvetan Zielinski F 1989.02.10 10,008 1958.02.19 Saniya Kalloufi M 1994.09.15 10,009 1952.04.19 Sumant Peac F 1985.02.18 10,010 1963.06.01 Duangkaew Piveteau F 1989.08.24 ...
2. 把employees表中的前10行數據加載到DolphinDB的內存表中。
t=load(conn,"select * from employees limit 10"); emp_no birth_date first_name last_name gender hire_date 10,001 1953.09.02 Georgi Facello M 1986.06.26 10,002 1964.06.02 Bezalel Simmel F 1985.11.21 10,003 1959.12.03 Parto Bamford M 1986.08.28 10,004 1954.05.01 Chirstian Koblick M 1986.12.01 10,005 1955.01.21 Kyoichi Maliniak M 1989.09.12 10,006 1953.04.20 Anneke Preusig F 1989.06.02 10,007 1957.05.23 Tzvetan Zielinski F 1989.02.10 10,008 1958.02.19 Saniya Kalloufi M 1994.09.15 10,009 1952.04.19 Sumant Peac F 1985.02.18 10,010 1963.06.01 Duangkaew Piveteau F 1989.08.24
3. 加載時把last_name的數據類型修改成SYMBOL。
schema=select name,type from extractSchema(conn,`employees) update schema set type="SYMBOL" where name="last_name" t=load(conn,"employees",schema) //查看錶t的結構 schema(t); chunkPath-> partitionColumnIndex->-1 colDefs-> name typeString typeInt ---------- ---------- ------- emp_no LONG 5 birth_date DATE 6 first_name STRING 18 last_name SYMBOL 18 gender SYMBOL 17 hire_date DATE 6
3.4 loadEx
語法
loadEx(connection, dbHandle, tableName, partitionColumns, table|query, [schema], [startRow], [rowNum])
參數
connection是connect函數返回的鏈接句柄。
dbHandle是DolphinDB的數據庫句柄,一般是database函數返回的對象。
tableName是DolphinDB數據庫中的表名。
partitionColumns是字符串標量或向量,表示分區列。
table是字符串,表示MySQL服務器中表的名稱。
query是MySQL中的查詢語句。
schema是DolphinDB類型的表,它包含兩列,第一列是字段名稱,第二列是數據類型。它是可選參數。用戶能夠經過指定該參數來修改數據加載到DolphinDB時的數據類型。
startRow是正整數,表示讀取數據的起始行數。它是可選參數,默認值爲0,表示從第一條記錄開始讀取數據。
rowNum是正整數,表示讀取的記錄行數。它是可選參數,若是沒有指定,表示讀取全部的數據。若是第二個參數爲query,那麼startRow和rowNum參數無效。
詳情
把MySQL中的數據加載到DolphinDB的分區表中。loadEx不支持把數據加載到DolphinDB的順序分區表中。
例子
把employees表加載到DolphinDB的磁盤VALUE分區表中。
db=database("H:/DolphinDB/Data/mysql",VALUE,`F`M) pt=loadEx(conn,db,"pt","gender","employees") select count(*) from loadTable(db,"pt"); count 300,024
若是須要把數據加載到內存分區表,只須要把database的路徑改成空字符串;若是須要把數據加載到分佈式表,只須要把database路徑修改成以「dfs://」開頭的路徑,好比「dfs://mysql」。分佈式表須要在集羣中才能使用。集羣部署請參考單服務器集羣部署和多服務器集羣部署。
4. 數據類型轉換
使用MySQL插件把數據導入到DolphinDB時,會作相應的類型轉換。具體轉換規則以下表所示:
說明:
(1)DolphinDB中的整型(SHORT, INT, LONG)都是有符號的,爲了防止溢出,MySQL中的無符號類型在DolphinDB中都會被轉換爲高一階的有符號類型。例如,無符號的tinyint轉換爲short,無符號的smallint轉換爲short等。目前,MySQL插件不支持64位無符號類型轉換。
(2)在DolphinDB中,整型的最小值表示NULL:CHAR類型的-128,SHORT類型的-32,768,INT類型的-2,147,483,648,LONG類型的-9,223,372,036,854,775,808都表示NULL。
(3)對於MySQL中的bigint unsigned類型,默認會轉換成DolphinDB的LONG類型。若是出現溢出的狀況,須要用戶使用schema參數,指定類型爲DOUBLE或FLOAT。
(4)MySQL中的char和varchar類型,若是長度小於等於10,會被轉換成DolphinDB的SYMBOL類型,若是長度大於10,會被轉換成DolphinDB的STRING類型。SYMBOL類型在DolphinDB內部存儲爲整數,所以數據排序和比較的效率會更高,同時也能夠節省存儲空間。可是將字符串映射到整數須要時間,映射表也會佔用內存。用戶能夠根據下面的規則來決定某列是否採用SYMBOL類型:若是該字段的值會大量重複出現,使用SYMBOL類型。如金融數據中的股票代碼、交易所、合約代碼等,物聯網數據中的設備編號等都是使用SYMBOL類型的典型場景。
5. 性能測試
咱們在普通PC上(16G內存,4核8線程,使用SSD)進行了性能測試。使用的數據集爲美國股票市場1990年到2016年的每日報價數據,數據量爲6.5G,包含22個字段,50,591,907行記錄,在MySQL數據庫中磁盤佔用爲7.2G。使用loadEx函數把數據從MySQL導入到DolphinDB的分區數據庫耗時僅160.5秒,讀取速度達到了41.4M/s,在 DolphinDB database 中磁盤佔用爲1.3G。在一樣的PC上,因爲使用ODBC一次性導入數據會形成MySQL內存不足,所以每次導入100萬條數據,總耗時660秒。將一樣的數據導入clickhouse耗時171.9秒,讀取速度爲37.8M/s。DolphinDB在時間序列數據的處理和分區管理上比clickhouse更加方便。
若是既要保證性能,同時友好支持時序數據的各類處理和分佈式數據庫,那麼DolphinDB將是不二選擇。