高速迁移MySQL数据到分布式时序数据库DolphinDB

本文提供关于将 MySQL 数据迁移导入 DolphinDB 的文章信息(标题、作者署名与发布日期)。

Source: https://dolphindb.cn/blogs/50

What this page covers

技能认证特训营第二期报名活动

页面顶部包含活动宣传信息,并提供限时报名链接。

高速迁移MySQL数据到分布式时序数据库DolphinDB(作者与日期)

该部分给出文章标题、作者署名与发布日期。

导入MySQL数据方法概述与推荐插件

介绍 DolphinDB 导入 MySQL 的两种方法,并给出推荐选择与原因(速度、配置)。

使用前准备:安装指南

提示在使用 MySQL 插件前,需要参考安装使用指南完成 DolphinDB 安装。

1. 下载插件

说明 MySQL 插件默认所在路径,并提供自行编译的参考信息。

2. 加载插件

说明在 DolphinDB GUI 中使用 loadPlugin 函数加载 MySQL 插件,并给出示例代码。

3. 接口函数与调用方式

列出 MySQL 插件提供的接口函数,并说明两种调用方式与推荐方式。

3.1 connect

给出 connect 的语法、参数含义、用途与连接示例,并包含认证类型建议。

3.2 showTables

给出 showTables 的语法、参数说明、用途与示例输出。

3.2 extractSchema

给出 extractSchema 的语法、参数说明、返回结果说明与示例输出。

3.3 load

给出 load 的语法、参数说明、用途与示例(整表、limit、schema 修改类型)。

3.4 loadEx

给出 loadEx 的语法、用途、限制与示例,并说明数据库路径在不同目标(内存/分布式)下的设置方式。

4. 数据类型转换

说明使用 MySQL 插件导入时的数据类型转换规则与注意事项,并提及转换规则表(图)。

5. 性能测试

给出在特定硬件与数据集下的导入耗时、读取速度与磁盘占用对比(MySQL 插件 vs ODBC vs clickhouse),并包含结论性评价。

Facts Index

Entity Attribute Value Confidence
技能认证特训营第二期报名链接https://www.qingsuyun.com/h5/e/217471/5/high
高速迁移MySQL数据到分布式时序数据库DolphinDB发布日期2021-08-05high
高速迁移MySQL数据到分布式时序数据库DolphinDB作者署名Junxihigh
DolphinDB导入 MySQL 数据的方法ODBC 插件与 MySQL 插件两种方法high
DolphinDB推荐导入 MySQL 的方式推荐使用 MySQL 插件导入 MySQL 数据high
MySQL 插件 vs ODBC 插件导入速度对比(6.5G 数据)MySQL 插件速度是 ODBC 的 4 倍(导入 6.5G 数据)high
MySQL 插件配置要求使用 MySQL 插件无需任何配置;ODBC 插件需要配置数据源high
DolphinDB MySQL 插件使用前准备安装参考使用前需参考《DolphinDB安装使用指南》安装 DolphinDB(链接指向 GitHub Tutorials_CN dolphindb_user_guide.md)high
MySQL 插件默认插件位置DolphinDB 安装目录 /server/plugins/mysql 已包含 MySQL 插件,可直接使用high
MySQL 插件自行编译参考可参考 DolphinDBPlugin 仓库 mysql/README_CN.mdhigh
DolphinDB GUI加载 MySQL 插件方式在 GUI 中使用 loadPlugin 函数加载 MySQL 插件high
MySQL 插件加载示例代码loadPlugin(server_dir+"/plugins/mysql/PluginMySQL.txt")high
DolphinDB MySQL 插件提供的接口函数connect, showTables, extractSchema, load, loadExhigh
MySQL 插件接口调用方式方式 1moduleName::apiFunction,例如 mysql::connect(host, port, user, password, db)high
MySQL 插件接口调用方式方式 2use moduleName 后直接调用接口函数,例如 use mysql connect(host, port, user, password, db)high
MySQL 插件接口调用方式推荐方式一般推荐使用 use moduleName 的调用方法(执行一次 use 后后续无需重新执行)high
connect语法connect(host, port, user, password, db)high
connect 参数 host含义MySQL 服务器主机名high
connect 参数 port含义/默认值MySQL 服务器端口号,默认为 3306high
connect 参数 user含义MySQL 服务器用户名high
connect 参数 password含义与 user 对应的密码high
connect 参数 db含义MySQL 数据库名称high
connect返回值/用途创建 MySQL 连接,返回 MySQL 的连接句柄high
MySQL 用户认证类型建议值建议 MySQL 用户的 Authentication Type 为 mysql_native_passwordhigh
connect 示例连接 employees 数据库conn=connect("127.0.0.1",3306,"root","123456","employees")high
showTables语法showTables(connection)high
showTables 参数 connection含义connect 函数返回的连接句柄high
showTables返回值/用途返回 DolphinDB 类型的数据表,包含 MySQL 数据库中所有表的名称high
showTables 示例输出(employees 数据库)表名列表(示例)current_dept_emp, departments, dept_emp, dept_emp_latest_date, dept_manager, employees, salaries, test_datatypes, titleshigh
extractSchema语法extractSchema(connection, tableName)high
extractSchema 参数 connection含义connect 函数返回的连接句柄high
extractSchema 参数 tableName含义MySQL 数据库中的数据表名称high
extractSchema返回结构返回 DolphinDB 类型的表:第一列字段名,第二列为导入 DolphinDB 后类型,第三列为 MySQL 类型high
extractSchema 示例(employees 表)示例字段类型映射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 / datehigh
load语法load(connection, table|query, [schema], [startRow], [rowNum])high
load 参数 schema结构与用途可选;DolphinDB 表(两列:字段名称、数据类型),可用于修改加载到 DolphinDB 时的数据类型high
load 参数 startRow默认值与含义可选;正整数表示读取起始行数;默认 0 表示从第一条记录开始读取high
load 参数 rowNum含义与行为可选;正整数表示读取记录行数;未指定则读取所有数据;若第二个参数为 query,则 startRow 和 rowNum 无效high
load用途把 MySQL 数据加载到 DolphinDB 的内存表中high
load 示例 1加载整表 employeest=load(conn,"employees")high
load 示例 2用 query limit 10 加载前 10 行t=load(conn,"select * from employees limit 10")high
load 示例 3通过 schema 修改 last_name 类型为 SYMBOL从 extractSchema 生成 schema 并 update 将 last_name 的 type 设为 "SYMBOL",再执行 t=load(conn,"employees",schema)high
loadEx语法loadEx(connection, dbHandle, tableName, partitionColumns, table|query, [schema], [startRow], [rowNum])high
loadEx限制loadEx 不支持把数据加载到 DolphinDB 的顺序分区表中high
loadEx用途把 MySQL 中的数据加载到 DolphinDB 的分区表中high
loadEx 示例加载 employees 到磁盘 VALUE 分区表db=database("H:/DolphinDB/Data/mysql",VALUE,`F`M); pt=loadEx(conn,db,"pt","gender","employees"); select count(*) from loadTable(db,"pt") => 300,024high
内存分区表加载(database 路径)设置方式若需加载到内存分区表,把 database 的路径改为空字符串high
分布式表加载(database 路径)设置方式若需加载到分布式表,把 database 路径改为以“dfs://”开头(如 dfs://mysql);分布式表需在集群中使用high
DolphinDB 集群部署参考文档链接单服务器集群部署与多服务器集群部署(GitHub Tutorials_CN 文档链接)high
MySQL 插件导入类型转换行为使用 MySQL 插件把数据导入 DolphinDB 时会进行相应类型转换,并提供转换规则表(图)medium
DolphinDB 整型与 MySQL 无符号整型转换原则DolphinDB 的整型(SHORT/INT/LONG)均为有符号;为防止溢出,MySQL 无符号类型转换为高一阶的有符号类型;MySQL 插件目前不支持 64 位无符号类型转换high
DolphinDB 整型 NULL 表示最小值表示 NULLCHAR(-128)、SHORT(-32768)、INT(-2147483648)、LONG(-9223372036854775808) 表示 NULLhigh
bigint unsigned 导入默认类型与溢出处理MySQL 的 bigint unsigned 默认转换为 DolphinDB 的 LONG;若溢出需用 schema 参数指定为 DOUBLE 或 FLOAThigh
MySQL char/varchar 导入按长度转换规则长度 ≤10 转为 DolphinDB SYMBOL;长度 >10 转为 DolphinDB STRINGhigh
DolphinDB SYMBOL 类型性能与存储特性(声明)SYMBOL 在内部存为整数,排序/比较效率更高且可节省存储;但字符串映射为整数需要时间且映射表占用内存medium
SYMBOL 类型使用建议适用条件与示例场景若字段值大量重复,适合用 SYMBOL;示例:金融数据股票代码/交易所/合约代码,物联网数据设备编号high
性能测试硬件环境PC 配置普通 PC:16G 内存,4 核 8 线程,使用 SSDhigh
性能测试数据集数据描述美国股票市场 1990-2016 每日报价数据;6.5G;22 个字段;50,591,907 行;MySQL 磁盘占用 7.2Ghigh
MySQL -> DolphinDB(loadEx 导入分区数据库)耗时与读取速度耗时 160.5 秒;读取速度 41.4M/shigh
DolphinDB database磁盘占用(测试结果)磁盘占用 1.3G(相对于该数据集导入后)high
ODBC 导入(同 PC)导入策略与总耗时因一次性导入导致 MySQL 内存不足,每次导入 100 万条;总耗时 660 秒high
导入到 clickhouse(同数据)耗时与读取速度耗时 171.9 秒;读取速度 37.8M/shigh
DolphinDB vs clickhouse易用性评价(声明)DolphinDB 在时间序列数据处理和分区管理上比 clickhouse 更加方便low
DolphinDB 选择建议(声明)定位/结论性表述若既要保证性能又要友好支持时序数据处理与分布式数据库,DolphinDB 将是不二选择low