DolphinDB提供了两种导入MySQL数据的办法:ODBC插件和MySQL插件。咱们举荐应用MySQL插件导入MySQL数据,因为它的速度比ODBC导入更快,导入6.5G数据,MySQL插件的速度是ODBC插件的4倍,并且应用MySQL插件无需任何配置,而ODBC插件须要配置数据源。
在应用MySQL插件之前,请先参考DolphinDB装置使用指南装置DolphinDB。
1.下载插件
DolphinDB装置目录/server/plugins/mysql曾经蕴含MySQL插件,用户能够间接应用该插件。如果用户须要自行编译,能够参考https://github.com/dolphindb/DolphinDBPlugin/blob/master/mysql/README_CN.md。
2.加载插件
在GUI中,应用loadPlugin函数加载MySQL插件:
loadPlugin(server_dir+"/plugins/mysql/PluginMySQL.txt")
3.接口函数
DolphinDB的MySQL插件提供了以下接口函数:
- connect
- showTables
- extractSchema
- load
- loadEx
咱们能够通过以下两种形式调用插件的接口函数:
(1)moduleName::apiFunction。例如,调用MySQL插件的connect办法。
mysql::connect(host, port, user, password, db)
(2)use moduleName,而后间接调用接口函数。只有执行一次use语句后,后续调用接口函数都不须要从新执行use函数。因而,咱们个别举荐这种调用办法。
use mysqlconnect(host, port, user, password, db)
3.1 connect
语法
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_employeescurrent_dept_empdepartmentsdept_empdept_emp_latest_datedept_manageremployeessalariestest_datatypestitles
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_date10,001 1953.09.02 Georgi Facello M 1986.06.2610,002 1964.06.02 Bezalel Simmel F 1985.11.2110,003 1959.12.03 Parto Bamford M 1986.08.2810,004 1954.05.01 Chirstian Koblick M 1986.12.0110,005 1955.01.21 Kyoichi Maliniak M 1989.09.1210,006 1953.04.20 Anneke Preusig F 1989.06.0210,007 1957.05.23 Tzvetan Zielinski F 1989.02.1010,008 1958.02.19 Saniya Kalloufi M 1994.09.1510,009 1952.04.19 Sumant Peac F 1985.02.1810,010 1963.06.01 Duangkaew Piveteau F 1989.08.24...
- 把employees表中的前10行数据加载到DolphinDB的内存表中。
t=load(conn,"select * from employees limit 10");emp_no birth_date first_name last_name gender hire_date10,001 1953.09.02 Georgi Facello M 1986.06.2610,002 1964.06.02 Bezalel Simmel F 1985.11.2110,003 1959.12.03 Parto Bamford M 1986.08.2810,004 1954.05.01 Chirstian Koblick M 1986.12.0110,005 1955.01.21 Kyoichi Maliniak M 1989.09.1210,006 1953.04.20 Anneke Preusig F 1989.06.0210,007 1957.05.23 Tzvetan Zielinski F 1989.02.1010,008 1958.02.19 Saniya Kalloufi M 1994.09.1510,009 1952.04.19 Sumant Peac F 1985.02.1810,010 1963.06.01 Duangkaew Piveteau F 1989.08.24
- 加载时把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->-1colDefs->name typeString typeInt---------- ---------- -------emp_no LONG 5 birth_date DATE 6 first_name STRING 18 last_name SYMBOL 18gender 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");count300,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 database将是不二抉择。