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