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
En la mayoría de los escenarios, este campo es el campo de consulta
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 ~