Migración de alta velocidad de datos MySQL a DolphinDB, una base de datos distribuida de series de tiempo

DolphinDB proporciona dos métodos para importar datos MySQL: complemento ODBC y complemento MySQL. Recomendamos utilizar el complemento MySQL para importar datos MySQL, porque es más rápido que la importación de 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 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/DolphinDBPlugin/blob/master/mysql/README_CN.md .

2. Cargue el complemento

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

loadPlugin(server_dir+"/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, port, user, password, db)

(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 mysql
connect(host, port, user, password, db)

 

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","employees")

 

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_employees
current_dept_emp
departments
dept_emp
dept_emp_latest_date
dept_manager
employees
salaries
test_datatypes
titles

 

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

2. Cargue las primeras 10 filas de datos de la tabla de empleados en la tabla de memoria de 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. Modifique el tipo de datos de last_name a SYMBOL al cargar.

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

gramática

loadEx (conexión, dbHandle, tableName, partitionColumns, tabla | consulta, [esquema], [startRow], [rowNum])

parámetro

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

dbHandle es el identificador de la base de datos de DolphinDB, generalmente el objeto devuelto por la función de la base de datos.

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

partitionColumns es un escalar o vector de cadena, que representa columnas de partición.

table es una cadena que representa 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 los datos en MySQL en la tabla de particiones de DolphinDB. loadEx no admite la carga de datos en la tabla de particiones secuenciales de DolphinDB.

ejemplo

Cargue la tabla de empleados en la tabla de particiones VALUE del disco de DolphinDB.

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

Si necesita cargar datos en la tabla de particiones de memoria, solo necesita cambiar la ruta de la base de datos a una cadena vacía; si necesita cargar datos en una tabla distribuida, solo necesita modificar la ruta de la base de datos a una ruta que comience con " dfs: // ", por ejemplo," dfs: // mysql ". Es necesario utilizar tablas distribuidas en el clúster. Para la implementación de un clúster, consulte la implementación de un clúster de un solo servidor y la implementación de un clúster de varios servidores .

4. Conversión de tipos de datos

Al importar datos a DolphinDB utilizando el complemento MySQL, se realizará la conversión de tipo correspondiente. Las reglas de conversión específicas se muestran en la siguiente tabla:

Descripción:

(1) Los tipos enteros (SHORT, INT, LONG) en DolphinDB están todos firmados. Para evitar el desbordamiento, los tipos sin firmar en MySQL se convertirán a tipos con signo de orden superior en DolphinDB. Por ejemplo, unsigned tinyint se convierte en short, unsigned smallint se convierte en short, etc. Actualmente, el complemento MySQL no admite la conversión de tipos sin firmar de 64 bits.

(2) En DolphinDB, el valor mínimo de un número entero representa NULL: -128 de tipo CHAR, -32,768 de tipo SHORT, -2,147,483,648 de tipo INT y -9,223,372,036,854,775,808 de tipo LONG todos representan NULL.

(3) Para el tipo bigint unsigned en MySQL, se convertirá al tipo LONG de DolphinDB por defecto. Si se produce un desbordamiento, el usuario debe utilizar el parámetro de esquema y especificar el tipo como DOBLE o FLOAT.

(4) Los tipos char y varchar en MySQL, si la longitud es menor o igual a 10, se convertirán al tipo SYMBOL de DolphinDB, y si la longitud es mayor que 10, se convertirán al tipo STRING de DolphinDB. El tipo SYMBOL se almacena como un número entero dentro de DolphinDB, por lo que la eficiencia de la clasificación y comparación de datos será mayor y también puede ahorrar espacio de almacenamiento. Pero se necesita tiempo para asignar una cadena a un número entero, y la tabla de asignación también ocupa memoria. El usuario puede decidir si una columna usa el tipo SYMBOL de acuerdo con las siguientes reglas: Si el valor del campo se repetirá en números grandes, use el tipo SYMBOL. Por ejemplo, los códigos de acciones, las bolsas y los códigos de contrato en los datos financieros y los números de dispositivo en los datos de IoT son escenarios típicos que utilizan SYMBOL.

5. Prueba de rendimiento

Realizamos una prueba de rendimiento en una PC normal (memoria 16G, 4 núcleos y 8 subprocesos, usando SSD). El conjunto de datos utilizado son los datos de cotización diaria del mercado de valores de EE. UU. De 1990 a 2016. El volumen de datos es 6.5G, que contiene 22 campos, 50.591.907 filas de registros y el uso del disco en la base de datos MySQL es 7.2G. El uso de la función loadEx para importar datos de MySQL a la base de datos particionada de DolphinDB tomó solo 160.5 segundos, la velocidad de lectura alcanzó 41.4M / sy el uso del disco en la base de datos DolphinDB fue 1.3G. En la misma PC, el uso de ODBC para importar datos a la vez hará que se agote la memoria MySQL, por lo que importar 1 millón de datos cada vez toma 660 segundos. Importar los mismos datos a clickhouse tomó 171,9 segundos y la velocidad de lectura fue de 37,8 M / s. DolphinDB es más conveniente que clickhouse en el procesamiento de datos de series de tiempo y la administración de particiones. Si desea garantizar el rendimiento y, al mismo tiempo, admitir varios procesos de datos de series de tiempo y bases de datos distribuidas, DolphinDB será la mejor opción.

Supongo que te gusta

Origin blog.csdn.net/qq_41996852/article/details/110850701
Recomendado
Clasificación