MyCAT realiza la separación de lectura y escritura de MySQL (2) -configura MyCAT (1)

MyCAT realiza la separación de lectura y escritura de MySQL (2) -configura MyCAT (1)

1. Descripción general de MyCAT

Mycat es un sistema de base de datos distribuida de código abierto. Es un servidor que implementa el protocolo MySQL. Los usuarios de front-end pueden considerarlo como un proxy de base de datos, al que se puede acceder con herramientas de cliente MySQL y líneas de comando. El back-end puede usar el protocolo nativo MySQL. Comuníquese con varios servidores MySQL o utilice el protocolo JDBC para comunicarse con la mayoría de los servidores de bases de datos convencionales. Su función principal es la partición de tablas y bases de datos, es decir, una tabla grande se divide horizontalmente en N tablas pequeñas, que se almacenan en el servidor MySQL de back-end u otro En la base de datos. El backend de Mycat puede admitir bases de datos convencionales como MySQL, SQL Server, Oracle, DB2 y PostgreSQL, así como MongoDB, un nuevo tipo de almacenamiento NoSQL. Desde el punto de vista del usuario final, no importa qué tipo de método de almacenamiento, en Mycat, es una tabla de base de datos tradicional que admite declaraciones SQL estándar para operaciones de base de datos.

1. Para DBA, uno puede entender Mycat así: Mycat es MySQL Server, y MySQL Server conectado detrás de Mycat es como el motor de almacenamiento de MySQL, como InnoDB, MyISAM, etc. Por lo tanto, Mycat en sí no almacena datos. Los datos se almacenan en el back-end MySQL. Por lo tanto, MySQL garantiza la confiabilidad de los datos y las transacciones. En pocas palabras, Mycat es el mejor compañero de MySQL. Permite MySQL hasta cierto punto. Tener la capacidad de PK con Oracle.

2. Para los ingenieros de software, puede entender Mycat así: Mycat es un servidor de base de datos similar a MySQL. Puede conectarse a Mycat conectándose a MySQL (excepto por los diferentes puertos, el puerto Mycat predeterminado es 8066 en lugar de MySQL 3306 , Por lo que debe agregar información del puerto a la cadena de conexión). En la mayoría de los casos, puede usar Mycat con el marco de mapeo de objetos con el que está familiarizado, pero se recomienda usar declaraciones SQL básicas tanto como sea posible para tablas fragmentadas, porque esto puede lograr el mejor rendimiento , Especialmente en el caso de decenas de millones o incluso decenas de miles de millones de registros.

3. Para los arquitectos, puede entender Mycat de esta manera: Mycat es un potente middleware de base de datos, que no solo se puede utilizar para la separación de lectura y escritura, la partición de tablas y bases de datos, la copia de seguridad de recuperación de desastres, sino también para el desarrollo de aplicaciones de múltiples inquilinos. La infraestructura de la plataforma en la nube hace que su arquitectura sea altamente adaptable y flexible. Con la ayuda del módulo de optimización inteligente Mycat, los cuellos de botella de acceso a los datos del sistema y los puntos calientes son claros de un vistazo. De acuerdo con estos datos de análisis estadístico, puede ajustar automática o manualmente el backend Almacenamiento, mapee diferentes tablas a diferentes motores de almacenamiento, y no es necesario cambiar el código completo de la aplicación.

Dos, el principio básico de Mycat

El principio de Mycat no es complicado. La palabra más importante en el principio de Mycat es "interceptar". Intercepta la declaración SQL enviada por el usuario. Primero, realiza un análisis específico de la declaración SQL: como análisis de fragmentación, análisis de enrutamiento, análisis de separación de lectura y escritura , Análisis de caché, etc., y luego envíe este SQL a la base de datos real de back-end, y los resultados devueltos se procesarán correctamente y, finalmente, se devolverán al usuario.

Por ejemplo, divida la tabla Pedidos en tres nodos de datos de fragmentos (dn para abreviar), estos tres fragmentos se distribuyen en dos servidores MySQL (DataHost), datanode = database @ datahost, puede usar uno a N servidores para fragmentar , La regla de fragmentación es una regla de fragmentación de enumeración de cadenas, una regla se define como columna de fragmentación + función de fragmentación (función de regla), aquí, el campo de fragmentación es prov y la función de fragmentación es Método de enumeración de cadenas. Como se muestra abajo:

Inserte la descripción de la imagen aquí

Cuando Mycat recibe un SQL, primero analizará el SQL, encontrará la tabla involucrada y luego verá la definición de esta tabla. Si hay una regla de fragmentación, obtendrá el valor del campo de fragmento en el SQL y coincidirá con la función de fragmentación. Obtenga la lista de fragmentos correspondientes al SQL y luego envíe el SQL a estos fragmentos para su ejecución y, finalmente, recopile y procese los datos de resultado devueltos por todos los fragmentos y envíelos al cliente.
Por ejemplo, la declaración SQL: seleccione * de pedidos donde prov = 'Beijing';
De acuerdo con la función de fragmentación, Beijing devuelve dn1, por lo que el SQL se envía a MySQL1 para obtener los resultados de la consulta en DB1 y devolverlos al usuario.
Por ejemplo, la declaración SQL: seleccione * de las órdenes donde prov in ('Beijing', 'Shanghai');
Luego, SQL se enviará a MySQL1 y MySQL2 para su ejecución, y luego los resultados se recopilarán y enviarán al usuario. Pero normalmente nuestro SQL tendrá cláusulas Order By y Limit, que implican el procesamiento secundario del conjunto de resultados en el lado de Mycat.

Tres, los conceptos básicos en Mycat

1. Middleware de base de datos

Mycat es un sistema de base de datos distribuida de código abierto, pero debido a que Mycat no tiene un motor de almacenamiento, Mycat no es un sistema de base de datos distribuida en un sentido completo. Mycat es un middleware de base de datos, que es un servicio intermedio para el procesamiento de datos y la interacción entre la base de datos y la aplicación. Una vez que los datos se fragmentan, la base de datos original se divide en varias bases de datos fragmentadas y todos los grupos de bases de datos fragmentados constituyen un almacenamiento de base de datos completo. Como se muestra abajo:

Inserte la descripción de la imagen aquí

Una vez que los datos se dividen en varias bases de datos de particiones, si la aplicación necesita leer los datos, debe procesar los datos de varias fuentes de datos. Si no hay middleware de base de datos, la aplicación se enfrentará directamente al clúster de fragmentación, el cambio de fuente de datos, el procesamiento de transacciones, la agregación de datos, etc., gastará mucho trabajo para solucionar el problema de la fragmentación. Con el middleware de base de datos, el middleware maneja una gran cantidad de agregación de datos generales y conmutación de fuentes de datos, y las aplicaciones solo deben centrarse en el procesamiento comercial.

2. Biblioteca lógica (esquema)

Para aplicaciones prácticas, no es necesario conocer la existencia de middleware, los desarrolladores comerciales solo necesitan conocer el concepto de base de datos, por lo que el middleware de base de datos puede considerarse como una biblioteca lógica compuesta por uno o más clústeres de bases de datos. Como se muestra abajo:

Inserte la descripción de la imagen aquí

3. Tabla lógica (tabla)

(1) Tabla lógica

Para la aplicación, es la tabla lógica la que lee los datos. La tabla lógica se puede distribuir en una o más bibliotecas de fragmentos después de la segmentación de datos, o puede estar compuesta por una sola tabla sin segmentación o fragmentación de datos.

(2) Tabla de fragmentación

Las tablas fragmentadas se refieren a tablas con una gran cantidad de datos que deben dividirse en varias bases de datos. De esta manera, cada fragmento tiene una parte de los datos y todos los fragmentos constituyen datos completos. Por ejemplo: el siguiente código, los datos de la tabla t_node se dividen en dos nodos de fragmentos (dataNode) dn1 y dn2 de acuerdo con las reglas.

<table name="t_node" primaryKey="vid" autoIncrement="true" dataNode="dn1,dn2" rule="rule1" />

(3) Mesa no fragmentada

Si la cantidad de datos en una tabla no es muy grande, no es necesario segmentarla, las tablas no fragmentadas son relativas a tablas fragmentadas, es decir, aquellas tablas que no requieren segmentación de datos. Por ejemplo, el siguiente código guarda la tabla t_node en el nodo de fragmentación dn1.

<table name="t_node" primaryKey="vid" autoIncrement="true" dataNode="dn1" />

(4) ER 表

Mycat propuso una estrategia de fragmentación de datos basada en la relación ER. Los registros de la tabla secundaria y los registros de la tabla principal asociados se almacenan en el mismo fragmento de datos, es decir, la tabla secundaria depende de la tabla principal y pasa a través del grupo de tablas (Grupo de tablas) para asegurar la unión de datos. No opera en bibliotecas. La agrupación de tablas es una buena idea para resolver la unión de datos entre particiones y también es una regla importante para la planificación de la segmentación de datos.

(5) Tabla global

En un sistema empresarial real, a menudo hay una gran cantidad de tablas similares a las tablas de diccionario. Estas tablas rara vez cambian. Las tablas de diccionario tienen las siguientes características: cambios poco frecuentes; pequeños cambios en los datos generales; pequeña escala de datos.
Para este tipo de tabla, en el caso de la fragmentación, cuando la tabla de negocios está fragmentada debido a la escala, la asociación entre la tabla de negocios y estas tablas de diccionario se vuelve un problema más difícil, Mycat resuelve este tipo de tablas mediante la redundancia de datos. La combinación, es decir, todos los fragmentos tienen una copia de los datos, y la tabla de diccionario o algunas tablas que cumplen las características de la tabla de diccionario se definen como tablas globales.

4. Nodo de fragmentación (dataNode)

Después de la segmentación de datos, una tabla grande se divide en diferentes bases de datos de fragmentos, y la base de datos donde se encuentra cada fragmento de tabla es el nodo de fragmentos.

5. Host de nodo (dataHost)

Después de dividir los datos, cada nodo de fragmentos (dataNode) no ocupa necesariamente una sola máquina y puede haber varias bases de datos de fragmentos en la misma máquina, por lo que la máquina donde se encuentran uno o más nodos de fragmentos (dataNode) es el host del nodo (DataHost), para evitar el límite en la cantidad de hosts de un solo nodo concurrentes, intente equilibrar los nodos de fragmentos (dataNode) con una alta presión de lectura y escritura en diferentes hosts de nodos (dataHost).

6. Reglas de fragmentación (regla)

Se requieren ciertas reglas para la segmentación de datos. La regla para la segmentación de datos de acuerdo con una regla de negocio determinada es la regla de fragmentación. Es muy importante elegir las reglas de fragmentación adecuadas cuando se dividen los datos.

7. Número de secuencia global (secuencia)

Después de la segmentación de datos, la restricción de clave principal en la base de datos relacional original no se puede utilizar en condiciones distribuidas, y es necesario introducir un mecanismo externo para garantizar la identificación única de los datos. Este mecanismo para garantizar la identificación única de los datos globales es el número de serie global.

8. Arrendamiento múltiple

La tecnología multiinquilino, o tecnología multiinquilino, es una tecnología de arquitectura de software. Es cómo compartir el mismo sistema o componentes de programa en un entorno multiusuario y garantizar el aislamiento de datos entre usuarios. Hay tres soluciones principales para el almacenamiento de datos de múltiples inquilinos:

(1) Base de datos independiente

Un inquilino tiene una base de datos. Esta solución tiene el nivel de aislamiento de datos de usuario más alto y la mejor seguridad, pero el costo también es alto. Esta solución es similar a la implementación tradicional de un conjunto de datos para un cliente. La diferencia es que el software se implementa de manera uniforme en el operador. Los inquilinos como bancos y hospitales que necesitan niveles de aislamiento de datos muy altos pueden elegir este modelo.
Ventajas: proporcionar bases de datos independientes para diferentes inquilinos ayuda a simplificar el diseño de expansión del modelo de datos para satisfacer las necesidades únicas de diferentes inquilinos; si ocurre una falla, es relativamente sencillo restaurar los datos.
Desventajas: Aumento del número de instalaciones de bases de datos y mayores costos de mantenimiento y adquisición.

(2) Base de datos compartida, estructura de datos aislada

Es decir, varios o todos los inquilinos comparten la base de datos, pero cada inquilino tiene un esquema.
Ventajas: proporciona un cierto grado de aislamiento lógico de datos para inquilinos con requisitos de seguridad más altos, no aislamiento completo; cada base de datos puede admitir más inquilinos.
Desventajas: Si hay una falla, la recuperación de datos es más difícil, porque restaurar la base de datos involucrará los datos de otros inquilinos. Si se requieren estadísticas entre inquilinos, habrá ciertas dificultades.

(3) Base de datos compartida, estructura de datos compartida

Es decir, los inquilinos comparten la misma base de datos y el mismo esquema, pero el ID de inquilino se usa para distinguir los datos de inquilinos en la tabla. Es el modelo con el mayor grado de compartición y el menor nivel de aislamiento.
Ventajas: los menores costos de mantenimiento y adquisición, permitiendo la mayor cantidad de inquilinos soportados por cada base de datos
Desventajas: El nivel de formato es el más bajo y la seguridad es la más baja Es necesario aumentar la cantidad de desarrollo de seguridad durante el diseño y desarrollo, la copia de seguridad y recuperación de datos son las más difíciles, requiriendo copia de seguridad y restauración una por una.

Supongo que te gusta

Origin blog.csdn.net/weixin_44377973/article/details/108202317
Recomendado
Clasificación