mysql数据转存到时序数据库_干货丨如何高速迁移MySQL数据到时序数据库DolphinDB...

DolphinDB提供了两种导入MySQL数据的方法:ODBC插件和MySQL插件。我们推荐使用MySQL插件导入MySQL数据,因为它的速度比ODBC导入更快,导入6.5G数据,MySQL插件的速度是ODBC插件的4倍,并且使用MySQL插件无需任何配置,而ODBC插件需要配置数据源。

在使用MySQL插件之前,请先参考DolphinDB安装使用指南安装DolphinDB。

1.下载插件

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 mysql

connect(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_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

...

把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

加载时把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时,会做相应的类型转换。具体转换规则如下表所示:

398a12315e233a4d456c436883ed6d75.png

说明:

(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将是不二选择。

文章来源: segmentfault.com,作者:DolphinDB,版权归原作者所有,如需转载,请联系作者。

原文链接:segmentfault.com/a/1190000038793370

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优秀程序员的45个习惯

摘要:值得打印出来贴在办公室墙上学习实践的箴言。 优秀来自好的习惯。怎样成为优秀的开发人员?图灵公司最近热销的《高效程序员的45个习惯》一书给出了很好的解答,非常值得一读。 这本书的英文原版荣获了有软件奥斯卡之称的Jolt生产效率大奖…

java 类型转换_java中的基本数据类型的转换

本文参考了如下两篇文章:Java中,经常可以遇到类型转换的场景,从变量的定义到复制、数值变量的计算到方法的参数传递、基类与派生类间的造型等,随处可见类型转换的身影。Java中的类型转换在Java编码中具有重要的作用。首先,来了解下…

Activity的四种加载模式(转载)

在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载模…

centos 安装tomcat_简单介绍Linux配置mysql,tomcat,Nginx 开机自启动的几个方式

概述一般我们打算把一些服务,例如 mysql,tomcat,Nginx设置开机自启动的话一般是有三四种方式来实现,下面以mysql,tomcat,Nginx做例子来演示。一、使用定时任务 cron 命令创建定时任务来运行 .sh 脚本。在sh…

java 永久代_Java新生代、老生代和永久代详解

前言: 还是面试经常被q,小结一下image.pngJVM中的堆一般分为三部分,新生代、老年代和永久代。1 新生代主要是用来存放新生的对象。一般占据堆空间的1/3,由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。新生代分为Ede…

java算法:冒泡排序

java算法:冒泡排序 冒泡排序:不断遍历文件,交换倒序的相邻元素,直到文件排好顺序。冒泡排序的主要优点是容易实现,冒泡排序通常会比选择排序、插入排序慢。 如,对EXAMPLE 字母进行排序: E X…

strlwr,strupr函数

函数原型&#xff1a;extern char *strlwr(char *str) extern char *strupr(char *s) 参数说明&#xff1a;str为要转换的字符串。 所在库名&#xff1a;#include <string.h> 函数功能&#xff1a;将字符串str中的大(小)写字母转换成为小(大)写字母&#xff…

python中的类怎样理解_理解Python数据类:Dataclass fields 的概述(下)

原标题 Understanding Python Dataclasses?—?Part 2 &#xff0c;作者为 Shikhar Chauhan 。这是 Python 最新的 Dataclasses 系列的第二部分内容。在第一部分里&#xff0c;我介绍了 dataclasses 的一般用法。这篇主要介绍另一个特征&#xff1a;dataclasses.field。我们已…

西部数码域名解析到阿里云_西部数码云主机好吗 稳定性如何

随着云计算技术的不断发展&#xff0c;我国云计算市场的经济效益也在日渐扩大&#xff0c;各个云服务商之间的竞争异常激烈。在这种环境下&#xff0c;备受人们关注的云服务企业主要呈现两大类&#xff0c;一是互联网巨头背景的阿里云、腾讯云等&#xff1b;二是以西部数码为代…

mysql8.0.22安装步骤图解_MySQL server 5.5的安装 步骤图解

作者&#xff1a;极客小俊 一个专注于web技术的80后我不用拼过聪明人&#xff0c;我只需要拼过那些懒人 我就一定会超越大部分人!知乎极客小俊&#xff0c;官方首发原创文章还有人用老版本的mysql 5.5吗&#xff1f;&#xff1f; 如果有的话 并且不会安装的小白看下面的步骤图吧…

win7下ffmpeg编译动态链接库整理

1.写在ffmpeg编译前 关于ffmpeg的编译过程google一搜&#xff0c;一大堆&#xff0c;ffmpeg编译真的有那么难么&#xff1f;在我编译成功后回头来看&#xff0c;网上的资料过多&#xff0c;反而使自己走了很多的弯路。即便有些楼主亲自测试后编译成功了&#xff0c;由于受机器…

wzctool工具使用详解

Wzctool是WinCE一个比较小巧实用的无线Wifi配置小工具&#xff0c;借助命令行调用该程序能够非常简单地设置wifi的相应参数&#xff0c;能够在一定程度上避免书写代码的繁琐之举。 这个工具是在编译系统的时候&#xff0c;添加Wifi组件后自动生成的。如果用户直接进到Platform…

spring boot 入门_玩转springboot2.x之快速入门开山篇

Spring Boot简介Spring Boot的目的在于创建和启动新的基于Spring框架的项目。Spring Boot会选择最适合的Spring子项目和第三方开源库进行整合。大部分Spring Boot应用只需要非常少的配置就可以快速运行起来。Spring Boot是伴随着Spring4.0诞生的&#xff0c;旨在简化开发。Spri…

python 元组 列表 字典区别_python编程:常用的数据结构之字典的方法总结,和列表和元组区别...

字典是一种键&#xff1a;值的形式&#xff0c;我们前面分享的文章学习了列表[],元祖&#xff08;&#xff09;&#xff0c;字典是由{}引起来的&#xff0c;列表的键对应的是列表的下标&#xff0c;而字典的值对应的是字典的键&#xff0c;我们可以通过字典的键来获取字典的值 …

java 录音_用JAVA实现不限时录音功能

在网上找了个录音软件&#xff0c;而且这个软件是根据手机里剩余内存的大小&#xff0c;可以进行不限时录音&#xff0c;所以特地拿上来和大家分享&#xff01;这个JAVA软件我发到了“玩转手机”里。解压缩后&#xff0c;大家可以用MIDway_2.8中文&#xff0c;通过数据线上传到…

redis 多线程_唬人的Redis多线程,也就那么回事

不羡鸳鸯不羡仙&#xff0c;一行代码调半天。原创&#xff1a;小姐姐味道&#xff08;微信公众号ID&#xff1a;xjjdog&#xff09;&#xff0c;欢迎分享&#xff0c;转载请保留出处。周末被一位小同学憋的很窝火。 他要和我探讨一下&#xff0c;redis到底是多线程的还是单线程…

关于客户端无法获得服务器端GP服务(Geoprocessing Service)结果的解决办法

之前发布了一个绘制等值面的服务&#xff0c;在本机测试的时候始终都可以访问&#xff0c;没有任何的问题&#xff0c;但是在远程访问时&#xff0c;出现了无法获得GP服务结果(注&#xff1a;结果为图片)的问题&#xff0c;而在服务器端确实生成了正确的结果。困扰了很久之后&a…

c++界面开发_QT开发(三)——GUI原理分析

一、命令行程序命令行程序是面向过程的程序设计。命令行程序的特点&#xff1a;A、基于顺序结构执行B、程序执行过程中不需与用户交互C、程序执行结束给出最终运行结果命令行程序适用场合&#xff1a;A、单任务场合B、无交互、简单交互场合C、服务器应用场合二、GUI程序GUI程序…

pycharm使用_后端开发使用pycharm的技巧

1、使用说明首先说明&#xff0c;本文所使用的功能为pycharm专业版所支持&#xff0c;其他版本如社区版&#xff0c;教育版&#xff0c;则不一定支持。作为一名后端开发&#xff0c;我猜你的桌面上一定打开着一系列的软件&#xff0c;用作开发调试工具&#xff0c;比如navicat数…

@value 静态变量_Java中的变量——通过示例学习Java编程(4)

作者&#xff1a;CHAITANYA SINGH来源&#xff1a;通过示例学习Java编程&#xff08;4&#xff09;&#xff1a;Java中的变量-方家话题​www.koofun.com变量是用来存放可以更改的值的容器。例如&#xff0c;当我写int i 10; 这里变量名是i&#xff0c;它与值10相关联&#xff…