¿Cuál es la diferencia entre sub-biblioteca, sub-tabla y partición?

Pila de tecnología Java

www.javastack.cn

Excelente cuenta pública de tecnología Java

1. Divide y combina

He dicho muchas veces, no se adhieran a cierta tecnología, la tecnología es la misma. Lo importante es programar el pensamiento , y pensar es lo más importante.

Cuando la cantidad de datos es grande, debe tener una idea dividida para refinar la granularidad. Cuando la cantidad de datos está demasiado fragmentada, debe tener una idea razonable para mejorar la granularidad.

1.1 puntos

Muchas tecnologías usan la idea de programación de puntos, aquí hay algunos ejemplos, estas son las ideas de puntos

  • El desarrollo de servicios centralizados para servicios distribuidos.

  • Desde Collections.synchronizedMap (x) a 1.7ConcurrentHashMap a 1.8ConcurrentHashMap, refine la granularidad de la cerradura al tiempo que garantiza la seguridad del hilo

  • Desde AtomicInteger hasta LongAdder, el método size () de ConcurrentHashMap. Utilice el pensamiento descentralizado para reducir el número de cas y mejorar la acumulación de múltiples hilos de un número

  • El algoritmo G1 GC de JVM divide el montón en muchas regiones para la administración de memoria

  • En el Servidor de Región de HBase, los datos se dividen en múltiples regiones para su administración

  • ¿El desarrollo de grupos de subprocesos suele estar aislado de los recursos?


2.2 Él

Muchas técnicas también se aplican a las ideas de programación, aquí hay algunos ejemplos, estas son las ideas

  • TLAB (Buffers de asignación local de subprocesos), buffer de asignación local de subprocesos. Evite conflictos de subprocesos múltiples y mejore la eficiencia de asignación de objetos

  • Análisis de escape, asigne la memoria instanciada de la variable directamente en la pila, sin ingresar al montón, el subproceso termina y el espacio de la pila se recicla. Reduzca el número de objetos temporales asignados en el montón

  • Bajo el algoritmo CMS GC, aunque se utiliza la eliminación de marcas, también hay configuraciones para admitir la desfragmentación de la memoria. Tales como: -XX: UseCMS-CompactAtFullCollection (si ordenar después de FullGC, Stop The World se volverá más largo) y -XX: CMSFullGCs-BeforeCompaction (compresión y acabado después de varios FullGC)

  • El engrosamiento de bloqueo, cuando JIT encuentra que una serie de operaciones consecutivas bloquean y liberan repetidamente bloqueos en el mismo objeto, aumentará el alcance de la sincronización de bloqueo

  • La transmisión de datos de red de Kafka tiene algunas configuraciones de datos para reducir la sobrecarga de la red. Tales como: batch.size y linger.ms, etc.

  • ¿Se suele llamar interfaz de adquisición masiva para el desarrollo?

2. Partición

Este artículo está basado en MySql InnoDB

Habiendo dicho tanto, hablemos primero del cuerpo principal y hablemos primero de la partición, porque el blogger ha escrito un blog de partición MySql antes, así que no pasaré demasiado tiempo escribiendo

Para más detalles, consulte: ¡ un artículo que lo lleva a comprender la partición en MySQL!

2.1 Implementación

Cómo lograrlo está escrito en el enlace anterior. Aquí, solo recuerde que si hay una clave primaria o un índice único en la tabla, la columna de partición debe ser una parte integral del índice único.

Esto se divide en bases de datos, la aplicación es transparente y el código no necesita modificar nada.

2.2 Documentos internos

Vaya primero al directorio de datos, si no conoce la ubicación del directorio, puede ejecutar:

Siguiente vistazo a los archivos internos:

 

Podemos ver en la imagen de arriba que hay 2 tipos de archivos, archivos .frm y archivos .ibd

  • Archivo .frm : archivo de estructura de tabla

  • Archivo .ibd : en InnoDB, el índice y los datos están en el mismo archivo. ibdata (su resultado de ejecución puede ser un archivo de índice .MYD y un archivo de datos .MYI, no importa, este es el motor de almacenamiento MyIsAm, correspondiente al archivo InnoDB.ibd) . Debido a que la tabla de pedidos está dividida en 5 áreas, hay 5 de estos archivos

  • Archivo .par : el resultado de su ejecución puede o no ser un archivo .par. Nota: a partir de MySql 5.7.6, el archivo de definición de partición .par ya no se crea. Las definiciones de partición se almacenan en el diccionario de datos interno.


2.3 Procesamiento de datos

Después de particionar la tabla, se mejora el rendimiento de MySql. Si hay una tabla, solo hay un archivo .ibd y un gran árbol B +. Si la tabla se divide, se dividirá en diferentes áreas de acuerdo con las reglas de partición, es decir, un gran árbol B + se divide en múltiples árboles pequeños.

La eficiencia de la lectura definitivamente mejora. Si usa el índice de clave de partición, primero vaya al árbol de índice auxiliar B + de la partición correspondiente, y luego vaya al árbol de índice B + agrupado de la partición correspondiente.

Si no toma la clave de partición, se ejecutará una vez en todas las particiones. ¡Causará múltiples IO lógicas!

Si desea ver la consulta de partición de la instrucción sql, puede usar la instrucción select partitons select xxxxx. Puede ver que una instrucción select se ha ido varias particiones.

mysql> explain partitions select * from TxnList where startTime>'2016-08-25 00:00:00' and startTime<'2016-08-25 23:59:00';  
+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+-------------+  
| id | select_type | table             | partitions | type | possible_keys | key  | key_len | ref  | rows  | Extra       |  
+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+-------------+  
|  1 | SIMPLE      | ClientActionTrack | p20160825  | ALL  | NULL          | NULL | NULL    | NULL | 33868 | Using where |  
+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+-------------+  
row in set (0.00 sec)


3. Subtaboteca subtabla

Cuando una tabla crece con el tiempo y los negocios, aumentará la cantidad de datos en la tabla Curry. Las operaciones de datos también crecerán más y más.

Los recursos de una máquina física son limitados y, en última instancia, la cantidad de datos que se pueden transportar y la capacidad de procesamiento de los datos serán limitados. En este momento, utilizará subtablas de subbibliotecas para llevar a cabo tablas a gran escala , del tipo que no se puede colocar en una sola máquina.

La diferencia es que la partición generalmente se coloca en una sola máquina, y la partición de rango de tiempo se usa más para facilitar el archivado. Es solo que la sub-biblioteca y la sub-tabla necesitan código para darse cuenta, y la partición se implementa dentro de mysql. Las subtablas y particiones de la subbase de datos no entran en conflicto y se pueden usar en combinación.

3.1 Implementación

3.1.1 Sub-biblioteca y tabla estándar

  • 100G + almacenamiento

  • Incremento de datos 200w + por día

  • Número de mesa única 100 millones +


3.1.2 Campos de subtabla de subbase de datos

El valor del campo de subtabla de subbase de datos es muy importante

  1. En la mayoría de los escenarios, este campo es el campo de consulta

  2. Numérico

Generalmente use userId, puede cumplir con las condiciones anteriores

3.2 Middleware de base de datos distribuida

Hay dos tipos de middleware de base de datos distribuida, proxy y arquitectura del lado del cliente. El modo proxy incluye MyCat y DBProxy, y la arquitectura del lado del cliente incluye TDDL y Sharding-JDBC.

Entonces, ¿cuál es la diferencia entre el proxy y la arquitectura del lado del cliente ? ¿Cuáles son las ventajas y desventajas de cada uno? De hecho, mira una foto para saber.

En el modo proxy, nuestras declaraciones de selección y actualización se envían al agente, y el agente opera la base de datos subyacente específica. Por lo tanto, el agente en sí debe ser requerido para garantizar una alta disponibilidad, de lo contrario, la base de datos no estará inactiva y el proxy se bloqueará y luego desaparecerá.

El modo de cliente generalmente crea una capa de encapsulación en el grupo de conexiones, se conecta con diferentes bibliotecas internamente y sql se entrega al cliente inteligente para su procesamiento. Por lo general, solo se admite un idioma. Si desea utilizar otros idiomas, debe desarrollar un cliente multilingüe.

Las ventajas y desventajas respectivas son las siguientes: 

3.3 Documentos internos

Encontré un ejemplo de sub-base de datos sub-tabla + partición, que es básicamente la misma que la de la tabla particionada, excepto que hay más archivos .ibd con más tablas.

[miaojiaxing@Grim testmydata]# ls | grep 'base_info'
base_info_00.frm
base_info_00#P#p_2018.ibd
base_info_00#P#p_2019.ibd
base_info_00#P#p_2020.ibd
base_info_00#P#p_2021.ibd
base_info_00#P#p_init.ibd
base_info_00#P#p_max.ibd
base_info_01.frm
base_info_01#P#p_2018.ibd
base_info_01#P#p_2019.ibd
base_info_01#P#p_2020.ibd
base_info_01#P#p_2021.ibd
base_info_01#P#p_init.ibd
base_info_01#P#p_max.ibd
base_info.frm
base_info.ibd


3.4 Problema

3.4.1 Problemas de transacción

Ahora que la base de datos está dividida en tablas, debe incluir transacciones distribuidas.Cómo garantizar que múltiples registros insertados en diferentes bases de datos puedan tener éxito o fallar al mismo tiempo.

Algunos estudiantes pueden pensar en XA, el rendimiento de XA es pobre y no necesita usar mysql5.7. Las transacciones flexibles son la solución principal actual, y el modelo TCC pertenece a las transacciones flexibles.

Cada compañía tiene su propia implementación para problemas de transacciones distribuidas. Huawei usa saga, Ali usa TXC y Ant usa DTX. Admite los modos FMT y TCC.


3.4.2 problema de unión

tddl, MyCAT, etc. admiten la unión de fragmentos cruzados. Pero trate de evitar las uniones entre bases de datos, como a través de la redundancia de campo.

Si esto sucede y el middleware admite la unión de fragmentos, se puede usar así. Si no es compatible, puede realizar consultas manualmente.

4. Resumen

La subtabla no es lo mismo que su uso. La subtabla es aceptar la tabla a gran escala , que no se puede colocar en una sola máquina. La partición generalmente se coloca en una sola máquina, y la partición de rango de tiempo se usa más para archivar fácilmente .

En términos de rendimiento estable, todas son subtablas. La diferencia es que la tabla de particiones es implementada internamente por mysql, y habrá menos interacción de datos que el esquema de subtabla.

Autor: GrimMjx

www.cnblogs.com/GrimMjx/p/11772033.html

FINAL

Materiales de aprendizaje:

Comparta una copia de los últimos materiales de aprendizaje de arquitectos Java

Artículos recientes:

1. Método de escritura Java 10 big pack B, ¡puedes presumir!

2. Coincidencia de patrones Java 14, ¡característica muy nueva!

3. ¡ 8 consejos prácticos de GitHub que debes dominar!

4. ¿Sigues usando Date? Use rápidamente LocalDateTime!

5. ¡ 5 preguntas difíciles para la entrevista de String!

6. ¡ 8 estructuras de datos que todo programador debe dominar!

7. ¡ Las 8 formas de escribir el modo singleton son muy completas!

8. ¡ Nginx tiene otra función Niu X! Copia del tráfico

9. Cuando voy, ¡mi colega realmente almacena la contraseña en texto plano! ! !

10. ¡ Una pieza de basura SQL que rápidamente bloqueó una CPU de 64 núcleos!

Hay demasiados productos secos en la cuenta pública. Escanee el código para prestar atención a la cuenta pública de la pila de tecnología Java . Lea más.

Haga clic en " Leer original " para llevarlo a volar ~

Se han publicado 495 artículos originales · 1032 aprobado · 1.46 millones de visitas

Supongo que te gusta

Origin blog.csdn.net/youanyyou/article/details/105525169
Recomendado
Clasificación