Productos secos 丨 Cómo migrar datos MySQL a DolphinDB a alta velocidad

DolphinDB proporciona dos métodos para importar datos MySQL: complemento ODBC y complemento MySQL. Recomendamos utilizar el complemento MySQL para importar datos MySQL, ya que es más rápido que la importación ODBC, la importación de datos 6.5G, el complemento MySQL es 4 veces más rápido que el complemento ODBC y no se requiere configuración para usar el complemento MySQL, mientras que el complemento ODBC necesita configurar la fuente de datos .

Antes de utilizar el complemento MySQL, consulte la Guía de instalación de DolphinDB para instalar DolphinDB.

1. Descarga el complemento

El directorio de instalación de DolphinDB / server / plugins / mysql ya contiene el complemento MySQL, y los usuarios pueden usarlo directamente. Si los usuarios necesitan compilar por sí mismos, pueden consultar https: // github.com/dolphindb/Do lphinDBPlugin / blob / master / mysql / README_CN.md .

2. Cargue el complemento

En la GUI, use la función loadPlugin para cargar el complemento MySQL:

loadPlugin (dir_servidor + "/ plugins / mysql / PluginMySQL.txt")

3. Función de interfaz

El complemento MySQL de DolphinDB proporciona las siguientes funciones de interfaz:

  • conectar
  • showTables
  • extractSchema
  • carga
  • loadEx

 

Podemos llamar a funciones de interfaz de complemento de las dos formas siguientes:

(1) nombreMódulo :: apiFunction. Por ejemplo, llame al método de conexión del complemento MySQL.

mysql :: connect (host, puerto, usuario, contraseña, base de datos)

(2) Use moduleName y luego llame directamente a la función de interfaz. Siempre que la instrucción use se ejecute una vez, las llamadas posteriores a la función de interfaz no necesitan volver a ejecutar la función use. Por lo tanto, generalmente recomendamos este método de llamada.

use mysqlconnect (host, puerto, usuario, contraseña, base de datos)

 

3.1 conectar

gramática

conectar (host, puerto, usuario, contraseña, base de datos)

parámetro

host es el nombre de host del servidor MySQL.

port es el número de puerto del servidor MySQL y el predeterminado es 3306.

usuario es el nombre de usuario en el servidor MySQL.

contraseña es la contraseña correspondiente al usuario.

db es el nombre de la base de datos en MySQL.

Detalles

Cree una conexión MySQL y devuelva el identificador de la conexión MySQL. Recomendamos que el tipo de autenticación para los usuarios de MySQL sea mysql_native_password.

ejemplo

Conéctese a la base de datos de empleados en el servidor MySQL local.

conn = connect ("127.0.0.1", 3306, "root", "123456", "empleados")

 

3.2 tablas de presentación

gramática

showTables (conexión)

parámetro

conexión es el identificador de conexión devuelto por la función de conexión.

Detalles

Devuelve una tabla de datos de tipo DolphinDB, incluidos los nombres de todas las tablas de la base de datos MySQL.

ejemplo

Ver las tablas en la base de datos de empleados.

showTables (conn); Tables_in_employeescurrent_dept_empdepartmentsdept_empdept_emp_latest_datedept_manageremployeessalariestest_datatypestitles

 

3.2 extractoSchema

gramática

extractSchema (conexión, tableName)

parámetro

conexión es el identificador de conexión devuelto por la función de conexión.

tableName es el nombre de la tabla de datos en la base de datos MySQL.

Detalles

El resultado devuelto es una tabla de tipo DolphinDB. La primera columna es el nombre del campo en la tabla de datos de MySQL, la segunda columna es el tipo de datos después de que los datos se importan a DolphinDB y la tercera columna es el tipo de datos en MySQL.

ejemplo

Vea el tipo de datos de cada columna en la tabla de empleados.

extractSchema (conexión, `empleados); 

nombre tipo MySQL describe tipo emp_no LONG int (11)	                 
fecha_nacimiento DATE fecha first_name STRING varchar (14)	         
last_name STRING varchar (16)	         
género SYMBOL enum ('M', 'F')	         
fecha_contratación DATE fecha	

3.3 carga

gramática

load (conexión, tabla | consulta, [esquema], [startRow], [rowNum])

parámetro

conexión es el identificador de conexión devuelto por la función de conexión.

table es el nombre de la tabla en el servidor MySQL.

query es una declaración de consulta en MySQL.

El esquema es una tabla de tipo DolphinDB, que contiene dos columnas, la primera columna es el nombre del campo y la segunda columna es el tipo de datos. Es un parámetro opcional. Los usuarios pueden modificar el tipo de datos al cargar datos en DolphinDB especificando este parámetro.

startRow es un número entero positivo, que indica el número de fila inicial de los datos que se leerán. Es un parámetro opcional, el valor predeterminado es 0, lo que significa comenzar a leer datos desde el primer registro.

rowNum es un número entero positivo que indica el número de filas de registros leídos. Es un parámetro opcional, si no se especifica, significa leer todos los datos. Si el segundo parámetro es query, los parámetros startRow y rowNum no son válidos.

Detalles

Cargue datos de MySQL en la tabla de memoria de DolphinDB.

ejemplo

  1. Cargue todos los datos de la tabla de empleados en la tabla de memoria de 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...

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->-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");

count
300,024

如果需要把数据加载到内存分区表,只需要把database的路径改为空字符串;如果需要把数据加载到分布式表,只需要把database路径修改为以“dfs://”开头的路径,比如“dfs://mysql”。分布式表需要在集群中才能使用。集群部署请参考单服务器集群部署多服务器集群部署

4. 数据类型转换

使用MySQL插件把数据导入到DolphinDB时,会做相应的类型转换。具体转换规则如下表所示:

26c9d1fdffbac816110862e9430e4044.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更加方便。


Supongo que te gusta

Origin blog.51cto.com/15022783/2575501
Recomendado
Clasificación