Subbase de datos y subtabla para mejorar el rendimiento de lectura y escritura de mysql

tabla de sub-biblioteca mysql

En el último artículo, presentamos la separación de la lectura y escritura de maestro-esclavo de mysql, aquí presentamos la aplicación de la subtabla de sub-base de datos.

¿Qué es la subtabla sub-base de datos? La sub-separación significa dividir una tabla de datos (biblioteca) en múltiples. ¿Cuál es el efecto? Puede dispersar el tráfico. Al igual que el maestro-esclavo, el maestro-esclavo debe separar el tráfico de lectura y escritura para una fácil expansión. Aquí se debe separar la tabla (biblioteca) para una fácil expansión. Al mismo tiempo, el tráfico está disperso, como una tabla con cientos de millones de datos, entonces la consulta es definitivamente lenta, pero si se divide horizontalmente en varias tablas, el volumen de datos de cada tabla será pequeño y la velocidad de consulta será más rápida.

La tabla de la subbiblioteca generalmente se divide en dos tipos, uno es una división horizontal y el otro es una división vertical.

División vertical

División vertical, por ejemplo, si todas sus tablas están ahora en una biblioteca, entonces esta biblioteca será muy grande, entonces podemos dividirla en múltiples bases de datos según el negocio, como la biblioteca de usuario relacionada con el usuario, la biblioteca de transacción relacionada con la transacción, etc. Etc.

Este concepto dividido es similar al concepto de microservicios, que también se dividen según el negocio.

De esta forma, tratar con usuarios solo accederá a la biblioteca de usuarios y no generará presión sobre otras bases de datos, de manera similar, nuestra biblioteca de usuarios también es fácil de expandir debido a la presión.

La división vertical de la tabla es la misma, pero generalmente se ha dividido durante el diseño de la tabla, y no debería haber una situación en la que una tabla pueda dividirse.

División horizontal

División horizontal: por ejemplo, si la cantidad de datos en su tabla es demasiado grande y una tabla tiene cientos de millones de datos, debe dividir una tabla en varias tablas.

Cómo dividirlo, generalmente hay dos métodos, como

El método restante

Supongamos que ahora dividimos decenas de millones de tablas en 100 tablas, y los datos de cada tabla probablemente sean del orden de 100,000. Entonces, ¿cómo determinamos en qué tabla debe existir un dato? Podemos tomar la operación restante en la identificación de los datos, es decir, id% 100 = 1, luego se almacena en la primera tabla, 2 se coloca en la segunda tabla, y así sucesivamente . También puede hacer hash y luego tomar el resto, como hash (id)% 100.

Método de segmento

Es decir, determinamos el intervalo, por ejemplo, los primeros 100,000 usuarios existen en la tabla número uno, y luego la analogía de 100,000, o de acuerdo con el tiempo, cada mes los usuarios pueden ser una tabla.

unir problema

Ahora hay un problema, por ejemplo, cuando se consulta al usuario, se debe consultar el saldo del usuario. En el pasado, utilizamos el método conjunto de unión, pero ahora es imposible unirse después de dividirlo en varias tablas. Solo podemos consultar primero la información del usuario, y luego Luego revisa el saldo de este usuario

Consulta condicional

Después de dividir la tabla, los datos se distribuyen en diferentes lugares. Si consultamos al usuario cuya identificación es 5, es muy simple, 5% 100 puede saber qué tabla, pero qué sucede si queremos consultar al usuario cuyo nombre es Zhang San. ¿Qué tabla vamos a consultar? En este momento, necesitamos hacer una asignación. Por ejemplo, hay una tabla para almacenar la asignación de id y nombre. Consultamos esta tabla con la ID de Zhang San, y determinamos la consulta en id% 100 Cual mesa. Esta tabla de mapeo también debe dividirse en tablas, entonces, ¿cómo determinamos en qué tabla de mapeo está Zhang San? Podemos determinar qué tabla de mapeo está en el hash al 100%.

Problema único de clave principal

Hay otro problema. Resulta que mientras la clave primaria sea única en una tabla, ahora tenemos 100 tablas. ¿Cómo podemos asegurarnos de que la identificación de la clave primaria de este registro sea única entre las 100 tablas?

Hay una manera, podemos generar un líquido único, pero esto tiene varios problemas

  • Ordenada

En general, usaremos la identificación de auto-incremento, mantendremos la identificación ordenada y monotónicamente en aumento, ¿por qué? Porque el motor innoDb de mysql usa el árbol B + para almacenar datos de índice, y la clave primaria es un índice.

Los datos del índice se almacenan en orden en las especies de árboles B +, por lo que la eficiencia tanto de la escritura como de la consulta será muy alta, y si está fuera de orden, la eficiencia de la escritura y la consulta se reducirá.

Porque hay muchos algoritmos de búsqueda que pueden usarse para mejorar la eficiencia de la consulta cuando se ordena.

  • Expresividad

Uuid no tiene ninguna expresividad, y no hay forma de ver a qué negocio pertenece este uuid.

Conociendo el problema, podemos resolverlo.

En el próximo artículo presentaremos el algoritmo snowFlake para resolver este problema.

Gracias a la columna "Diseño de sistema de alta concurrencia" creada por el maestro Tang Yang de Geek Time. El contenido aquí es todo mi resumen, refinamiento y pensamiento después de aprender.

Publicado 30 artículos originales · elogiado 6 · 50,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/Thepatterraining/article/details/105262144
Recomendado
Clasificación