Un estudio preliminar sobre las características de las instancias distribuidas TDSQL TCA: tablas distribuidas y transmisión transparente de SQL
TDSQL distribuido en tiempo real proporciona un método de conexión compatible con mysql a través de la interfaz Proxy. Los usuarios se conectan mediante dirección IP, número de puerto, nombre de usuario y contraseña:
(Nota: Público. Cloud TDSQL necesita solicitar una dirección de conexión de red pública en la página de instancia)
Ejemplo de conexión: mysql -h172.21.32.13 (dirección proxy) -P3306 (puerto proxy) -utest (cuenta de base de datos) - p
Igual que el método de conexión MySQL normal, la implementación distribuida es compatible con el protocolo y la sintaxis de MySQL, y admite cifrado SSL y otras funciones. Por supuesto, también puede utilizar navicat, jdbc, odbc, php, Python, etc. para conectarse a instancias TDSQL distribuidas.
1. Introducción a los tipos de tablas admitidas por las instancias distribuidas de TDSQL
a. Tabla distribuida: es decir, tabla dividida horizontalmente, también conocida como "tabla dividida de una empresa". En perspectiva, esta tabla es una tabla lógica completa, pero el backend distribuye datos a diferentes grupos de nodos físicos (SET) según el valor HASH de la clave fragmentada.
b. Tabla ordinaria: También conocida como tabla Noshard, es decir, una tabla que no necesita ser dividida, es consistente con las tablas de las bases de datos centralizadas tradicionales y no sufre ningún procesamiento especial. La implementación distribuida utilizará esta tabla. La tabla se almacena en el primer grupo de nodos físicos (conjunto) de forma predeterminada.
c. Tabla de transmisión: también conocida como tecnología de transmisión de tabla pequeña, es decir, después de configurarla como tabla de transmisión, todas las operaciones de la tabla se transmitirán al grupo de nodos de propiedad (conjunto). cada conjunto tiene Los datos completos de esta tabla se utilizan a menudo en tablas pequeñas o tablas de configuración con muchas consultas relacionadas y pocas modificaciones en los sistemas comerciales.
Notas sobre la selección del tipo de tabla:
En una instancia distribuida, si las claves de fragmentación de dos tablas son iguales, significa que las dos tablas tienen las mismas claves de fragmentación?**. , almacenado en el mismo grupo de nodos de objetos. Este escenario generalmente se denomina grupos duros, lo que mejorará en gran medida la eficiencia del procesamiento de consultas comerciales conjuntas y otras declaraciones. Dado que de forma predeterminada se coloca una sola tabla en el primer conjunto, si se establece una sola tabla grande en una instancia distribuida, la carga en el primer conjunto será demasiado grande. A menos que sea necesario lo contrario, intente utilizar tablas distribuidas en instancias distribuidas, que también es una de las características de las instancias distribuidas.
2. Creación de una tabla de instancia distribuida TDSQL
A continuación, echemos un vistazo al uso y las precauciones de los tres tipos de tablas admitidas por la base de datos distribuida TDSQL.
a. Uso de tablas distribuidas
Breve descripción: al crear una tabla fragmentada ordinaria, el valor de la clave fragmentada debe especificarse al final. Este valor es el nombre del campo de la tabla. in se utilizará para la selección posterior de enrutamiento SQL.
Después de conectarnos a la instancia distribuida de TDSQL, creamos una base de datos llamada testdb para esta operación
mysqlgt; crear base de datos testdb
mysqlgt
Siguiente; creamos una tabla distribuida, nombrada con la primera letra de pinyin distribuido
**Declaración de creación de tabla 1:**
MySQL testdbgt; c char(20), clave principal (a), clave única u_1(a, c) ) shardkey=a;
Consulta correcta, 0 filas afectadas (0,07 segundos)
* *Declaración de creación de tabla 2:**
MySQL testdbgt; crear tabla fbs2 (a int, b int, c char(20), clave primaria (a, b)) shardkey=a
;Consulta OK, 0 filas afectadas (0,09 seg)
b. Creación de tabla de difusión
Breve descripción: Admite la creación de tablas pequeñas (tablas de difusión), en este momento. , la tabla contiene todos los datos de todos los conjuntos. Este método principal se utiliza para operaciones de unión entre conjuntos. Al mismo tiempo, las transacciones distribuidas garantizan la atomicidad de las operaciones de modificación, lo que hace que los datos de todos los conjuntos sean completamente consistentes.
**Declaración:**
MySQL testdbgt; crear tabla gbb(a int, b int key) **shardkey=noshardkey_allset;**
Consulta OK, 0 filas afectadas (0,03 segundos)
c. Tabla ordinaria tradicional
Breve descripción: Admite la creación de tablas ordinarias. La sintaxis es exactamente la misma que la de MySQL tradicional. tiempo, los datos de la tabla La cantidad total se almacena en el primer nodo de conjunto, y todas las tablas de este tipo se colocan en el primer conjunto.
MySQL testdbgt; crear tabla ptb(a int, b varchar(10));
Consulta correcta, 0 filas afectadas (0,03 segundos)
Notas:
1. En una instancia distribuida, la clave fragmentada de la tabla distribuida corresponde al campo de partición de la base de datos back-end, por lo que debe ser parte de la clave principal y de todos los índices únicos; de lo contrario, la operación de creación de la tabla puede no se completará.
2. El valor del campo shardkey en la tabla distribuida no contiene chino; de lo contrario, el proxy convertirá el conjunto de caracteres y pueden producirse errores. Además, la sintaxis SQL es como: shardkey=a generalmente se escribe al final de la declaración SQL.
3. Operaciones de datos en tablas de instancias distribuidas TDSQL
Para aprovechar mejor la arquitectura distribuida, todavía existen algunas diferencias entre las operaciones SQL y las bases de datos tradicionales. A continuación, veamos las precauciones para insertar, actualizar y eliminar en la base de datos.
======INSERT operación de inserción========
**Insertar declaración 1:**
MySQL testdbgt; into fbs(a, b) value(10, 1000);
Consulta correcta, 1 fila afectada (0,00 segundos)
**Insertar declaración 2:**
MySQL testdbgt; insertar en valores fbs (1, 10, 1000
o
MySQL testdbgt; insertar en test1 (b, c) valores (100, "record3" );
ERROR 810 (HY000): ERROR de proxy: sql es demasiado complejo, es necesario enviarlo solo a la tabla noshard. La inserción de la tabla de fragmentos debe tener una especificación de campo
Nota: La declaración 2 informa un error. El motivo es que el campo debe contener la clave de fragmento al insertarlo; de lo contrario, se rechazará la ejecución del SQL porque el proxy no sabe a qué nodo de fragmentación de backend se envía el SQL.
===== ACTUALIZAR, ELIMINAR actualización, operaciones de eliminación ======
Declaración de actualización 1:
MySQL testdbgt actualiza fbs set b; = 2000 donde a=10;
Consulta correcta, 1 fila afectada (0,00 segundos)
Declaración de actualización 2:
MySQL testdbgt actualización fbs set b= 2000
ERROR 658 (HY000): ERROR de proxy: error interno de unión: la consulta de actualización no tiene cláusula donde
Operación de eliminación:
MySQL testdbgt; fbs ;
ERROR 913 (HY000): ERROR de proxy: Error interno de unión: la consulta de eliminación no tiene cláusula donde
Notas:
1. Para operaciones de datos en En términos de seguridad y para reducir la pérdida de datos causada por errores humanos, TDSQL prohíbe acciones de actualización sin condiciones de dónde.
2. La misma operación de eliminación estará prohibida sin una condición donde. Si confirma que desea eliminar datos de la tabla o tablas, se recomienda utilizar truncar o descartar después de la copia de seguridad.
3. Intente evitar actualizar el campo shardkey durante la misma operación de actualización, ya que afectará la actualización de enrutamiento en el Proxy y provocará errores.
1. Introducción a la función de transmisión transparente de TDSQL
Para instancias distribuidas, la sintaxis de SQL se analizará y existen ciertas restricciones si el usuario desea obtener datos de un solo nodo en un conjunto. , o para ejecutar SQL en un nodo específico, puede utilizar la función de transmisión transparente de SQL de TDSQL.
Para utilizar la función de transmisión transparente, debemos especificar la opción **-c** al volver a conectarnos para iniciar sesión en la instancia distribuida TDSQL. El método de inicio de sesión normal no admite la función de transmisión transparente de especificar nodos para ejecutar SQL.
Inicie sesión de la siguiente manera:
mysql -h172.21.32.13 (dirección proxy) -utest -P3306 -p -c (la transmisión transparente debe especificar -c)
2. Demostración de la operación de transmisión transparente de TDSQL
Primero, iniciamos sesión nuevamente en la instancia distribuida de TDSQL: mysql -h172.21.32.13 -utest -P3306 -p -c
Aún así cambie a la base de datos testdb.
a. Ver la información del nodo del conjunto de instancias distribuidas
Utilice /*proxy*/show status para ver la información del nodo de la instancia distribuida TDSQL actual. respectivamente para set_1605181898_1, set_1605181972_3
MySQL testdbgt /*proxy*/show status; -------------------------------------------------- ----- -----------------------
| nombre_estado | --- ----------------------- ------------------------ ---- -------------------------------------
| | grupo_1605181791_302290 |
| **set_1605181898_1:ip|10.53.179.14:4322;s1@10.53.178.227:4322@1@IDC_GZ_YDSS0301_79263@0 | 1 605181898_1: hash_range | 0--31 |
| **set_1605181972_3: ip | 10.53.179.14: 4323; s1@10.53.178.227: 4323@1@IDC_GZ_YDSS0301_79263@0 | 72_3: rango_hash | 32---63 |
| conjunto | conjunto_1605181898_1, conjunto_1605181972_3 | -------------------------------------------------- ------- -----------------------
6 filas en conjunto (0,00 seg)
b. Inserción de datos de demostración
Insertamos datos en la tabla distribuida de fbs creada previamente
MySQL testdbgt; 'AAA'), (20, 2, 'bbb'), (30, 3, 'ccc'), (40, 4, 'dddd'), (50, 5, 'eee'), (60, 6, 'fff'), (70, 7, 'ggg'), (80, 8, 'hhhh');
MySQL testdbgt; seleccionar * de fbs ordenar por 1; ---- ------ ------
| b |
---- ------ --- ---
| 10 |
| 20 | dddd | 50 | 5 |
| 60 | p>
---- ------ ------
8 filas en conjunto (0,00 segundos)
Transmisión transparente para ver datos. en Distribución de cada nodo
MySQL testdbgt /*proxy*/show status
-------------------- ------ -------------------------------------------- ------- --------------------------
| nombre_estado
----- ------------------------------------------- ------------- ------------------------------------- ----------
| grupo | grupo_1605181791_302290 |
| **set_1605181898_1:ip|10.53.179.14:4322;s1@10.53.178.227:4322@ 1@IDC_GZ_YDSS0301_79263@0 |
| set_ 1605181898_1: hash_range | 0 ---31 | s1@10.53.17 8.227: 4323 @1@IDC_GZ_YDSS0301_79263@0 |
| set_1605181972_3: hash_range |
| ------------------------- ------------------------- ---------------------- ---------------------- -
6 filas en conjunto (0.00 seg)
Ver datos en el nodo set_1605181898_1 Distribución
MySQL testdbgt /*sets: set_1605181898_1*/select * from orden de fbs por 1;
---- ------ ------ ------------------
| a | b | c | información
---- ----- -
---- ------------------
| 10 | ccc | conjunto_1605181898_1
| 40 | set_1605181898_1 |
---- ------ ------ ------------------
5 filas en conjunto (0,00 segundos)
Ver la distribución de datos en el nodo set_1605181972_3
MySQL testdbgt; /*sets: set_1605181972_3*/select * from fbs order by 1; /p> p>
---- ------ ------ ------------------
| a | b | c | información |
---- ------ ------ ------------------
| 20 | bbb | conjunto_1605181972_3 | 70 | >
---- ------ ------ ------------------
3 filas en conjunto ( 0,00 seg)
d. Ver datos a través del número de fragmento de clave de fragmento
MySQL testdbgt /*shardkey: 2*/select * from fbs order by 1; -- -- ------ ------
| b |
---- ------ --- -- -
| 20 |
| p> ---- ------ ------
3 filas en conjunto (0,00 segundos)
Admite tipos y formatos de transmisión transparentes:
1. El nombre del conjunto se puede consultar a través de /*proxy*/show status
2. /*sets: set_1 name*/ transmite de forma transparente el nodo especificado
3 /*sets: allsets*/ Transmitir de forma transparente todos los nodos
4. /*shardkey: 10*/ Transmitir de forma transparente al conjunto correspondiente al fragmento de clave de fragmento
5. Admitir transmisión transparente. de SQL al correspondiente o a varios s
et
Restricciones de declaración para la parte DDL de las tablas distribuidas:
CREATE TABLE... LIKE no se admite por el momento
CREATE TABLE... SELECT no se admite por el momento
CREATE TEMPORARY TABLE no se admite en este momento
CREATE/DROP/ALTER SERVER/LOGFILE GROUP/ no se admite en este momento
p>
ALTER clave de tabla dividida (shardkey) no se admite por el momento) para cambiar el nombre, pero el tipo se puede modificar
Restricciones de declaración en la parte DML de la tabla distribuida:
La exportación SELECT INTO OUTFILE/INTO DUMPFILE/INTO LOAD DATA no se admite actualmente
INSERT... SELECT no se admite por el momento
ACTUALIZAR los valores de las columnas de clave fragmentada distribuida. No son compatibles por el momento.
Esta operación es principalmente para desarrolladores o usuarios de DBA de bases de datos tradicionales. Permita que todos obtengan una comprensión preliminar de las características de las bases de datos distribuidas. Además, la base de datos distribuida proporciona un modo flexible de separación de lectura y escritura en la arquitectura. Admite operaciones globales de ordenación, agrupación y limitación en SQL, admite funciones agregadas, uniones de nodos de conjuntos cruzados, subconsultas y admite transacciones distribuidas. Tradicional La mayoría de las operaciones soportadas por una base de datos se heredan en bases de datos distribuidas. Las bases de datos distribuidas se desarrollan sobre la base de bases de datos tradicionales y tienen buena compatibilidad con las bases de datos centralizadas tradicionales. El uso de la sintaxis de declaraciones SQL es compatible con la mayoría de los estándares SQL1999 y SQL2003 y es compatible con las características ACID de SQL. La base de datos distribuida es lógicamente una base de datos independiente y completa, pero adopta un método de fragmentación de múltiples nodos en términos de arquitectura y física. Los datos se dispersan y distribuyen a diferentes nodos para almacenar datos a través de algoritmos internos, protegiendo el negocio front-end. La arquitectura compleja del back-end es una base de datos que tiene las características de acceso eventualmente consistente a los datos, disponibilidad y recuperación ante desastres de particiones. Espero que esta operación pueda brindarle cierta comprensión y ganancias sobre la base de datos distribuida TDSQL.
*Está prohibida la reimpresión, pero se permite el reenvío (indique la fuente al reenviar artículos)
Base de datos relacional distribuida de nivel empresarial TDPub