Tabla de contenido
PalancaPrefacio
Este artículo ¿Cómo optimiza la replicación de datos la base de datos? - Diseño del sistema 09 Se explica la importancia de la replicación de bases de datos. Podemos optimizar la base de datos mediante técnicas de replicación de bases de datos. La partición de datos es otro concepto muy importante para optimizar la base de datos. Este artículo también explicará en profundidad la partición de la base de datos y explicará diferentes métodos de fragmentación (Database Sharding). El nombre chino de este artículo, que incluye partición de datos y fragmentación de bases de datos, se refiere actualmente a la traducción de los documentos oficiales de Azure, pero se recomienda que los lectores utilicen el texto original para referirse a estos términos.
¿Qué es la partición de datos?
La partición de datos es el proceso de dividir los datos de una base de datos en subbloques más pequeños y manejables. Estos subbloques se denominan particiones. La segmentación de datos puede basarse en una variedad de factores, como el tiempo, la identificación del cliente o la categoría de producto.
¿Por qué necesitamos particionar los datos?
Para cualquier sistema que no se expanda, la cantidad de datos seguirá creciendo y el tráfico de lectura y escritura en la base de datos será cada vez mayor, lo que ejercerá presión de escalabilidad sobre las bases de datos tradicionales. Por lo tanto, podemos utilizar la segmentación de datos para hacerlo. Utilice varios nodos, cada uno de los cuales gestiona una parte del perfil completo.
Ventajas de la partición de datos
- Mejorar el rendimiento: Facilite la consulta de datos dividiéndolos en partes más pequeñas. Esto es especialmente útil para sistemas que manejan grandes cantidades de datos.
- Mejorar la escalabilidad: A medida que aumenta la cantidad de datos, se pueden agregar fácilmente más particiones para almacenar los nuevos datos, lo que permite que la base de datos continúe expandiéndose sin cambios importantes.
- Mejorar la usabilidad: Si una partición falla, solo los datos de esa partición se verán afectados. Se pueden seguir utilizando otras particiones, lo que ayuda a reducir el tiempo de inactividad general del sistema.
- Simplifique la gestión: La partición de datos puede simplificar la gestión de la base de datos. Por ejemplo: se puede realizar una copia de seguridad y restaurar cada partición individualmente, y las consultas se pueden optimizar para cada partición.
Desventajas de la partición de datos
- Añadir complejidad: La partición de datos aumenta la complejidad de la base de datos. Es necesario desarrollar y mantener estrategias de segmentación, y es posible que sea necesario realizar algunos cambios en el sistema para acomodar los datos segmentados.
- aumentar el costo: La partición de datos puede requerir hardware y software adicional, y los costos de administrar bases de datos divididas pueden ser mayores.
fragmentación
Para distribuir el tráfico y la carga entre múltiples nodos, necesitamos particionar los datos mediante Partición o Fragmentación. Dividiremos grandes colecciones de datos en bloques de datos más pequeños y los almacenaremos en diferentes nodos.
Sin embargo, dado que se va a dividir, es necesario equilibrar las particiones para garantizar que cada partición almacene aproximadamente la misma cantidad de datos. Si las particiones están desequilibradas y la mayoría de las consultas de la base de datos caen en unas pocas particiones, las particiones sobrecargadas no podrán soportar la carga, lo que provocará un cuello de botella en el sistema. Además, también llamaremos puntos de acceso a estos nodos de partición con carga excesiva.
En términos generales, utilizaremos los dos métodos siguientes para fragmentar: fragmentación vertical y fragmentación horizontal.
Fragmentación vertical
La fragmentación vertical consiste en colocar diferentes tablas en diferentes bases de datos. Este método puede ejecutarse en diferentes servidores. Aquí primero proporciono ilustraciones de otros documentos oficiales para que los usuarios puedan comprender mejor los principios.
Por lo general, la fragmentación vertical (Vertical Sharding) se utiliza para mejorar la velocidad de recuperación, por ejemplo: una tabla compuesta de Blobs (el contenido relacionado con Blob se presentará en detalle en el futuro). En este caso, las columnas con datos de texto grandes o blobs se dividirán en diferentes tablas.
La fragmentación vertical es adecuada para la partición manual, principalmente porque este método de fragmentación es relativamente complejo y el administrador de la base de datos necesita determinar cómo particionar los datos a través de estas correlaciones de datos. Por el contrario, la fragmentación horizontal (Horizontal Sharding), que se presentará a continuación, es adecuada para la automatización incluso en condiciones dinámicas.
Fragmentación horizontal
Además de la fragmentación vertical introducida en el primero, existe otro método de fragmentación llamado fragmentación horizontal (Horizontal Sharding). Si algunas tablas de la base de datos son demasiado grandes y afectan el rendimiento de lectura/escritura, la fragmentación horizontal es un buen método de fragmentación para resolver este problema.
La fragmentación o partición horizontal consiste en dividir una tabla en varias tablas dividiendo los datos, y también es fácil de entender. Si hay 500 filas de datos, se pueden dividir directamente en dos bases de datos y cada base de datos tiene sus propias doscientas. cincuenta líneas.
También adjunté una imagen para que los lectores comprendan mejor el concepto de fragmentación horizontal. Por lo general, tenemos los siguientes métodos de fragmentación horizontal, a saber: fragmentación basada en claves y fragmentación basada en rangos, fragmentación basada en hash, estas traducciones al chino se basan en mi referencia. Los documentos técnicos de Tencent, por supuesto, en circunstancias normales usaremos el inglés como nombre.
Fragmentación basada en claves
La fragmentación basada en claves es un método para dividir datos en múltiples particiones según los campos clave de la tabla de datos. Por ejemplo: los datos del cliente se pueden dividir en varias particiones según el ID del cliente, de modo que cada partición contenga datos de un cliente específico.
ventaja
La ventaja de utilizar el método de fragmentación basada en claves es que la consulta es muy eficiente y fácil de implementar, y puede saber exactamente dónde buscar un rango específico de claves (qué nodo, qué fragmento).
defecto
Si la selección de clave no es correcta, es posible que algunos nodos tengan que almacenar más datos debido a una distribución desigual del tráfico. En resumen, la probabilidad de que se produzca una fragmentación desigual es mayor.
Fragmentación basada en rango
La fragmentación basada en rango divide los datos en múltiples particiones según un determinado campo de rango en la tabla de datos. Por ejemplo: los datos del producto se pueden dividir en varias particiones según el precio, de modo que cada partición contenga datos sobre un producto específico.
ventaja
La ventaja de utilizar la fragmentación basada en rango es que el equilibrio de la fragmentación es mejor y también podemos decidir qué base de datos buscar basándose únicamente en el rango.
defecto
Por lo general, cuando se consultan datos con un rango más pequeño, este método de fragmentación de datos es menos eficiente.
Fragmentación basada en hash
La fragmentación basada en hash consiste en realizar un hash de la tabla de datos según el valor de un determinado campo (función hash) y luego asignar los datos a diferentes particiones según el resultado del hash.
ventaja
La ventaja de la fragmentación basada en Hash es que tiene un equilibrio muy alto y una eficiencia de consulta relativamente alta.
defecto
Puede haber puntos críticos. Revise también lo mencionado anteriormente. Si las particiones están desequilibradas y la mayoría de las consultas de la base de datos caen en unas pocas particiones, las particiones sobrecargadas no estarán dispuestas a soportar la carga, lo que provocará cuellos de botella en el sistema. Además, también llamaremos puntos de acceso a estos nodos de partición con carga excesiva.
división de reequilibrio
Cuando la carga de consultas de la base de datos en sí está desequilibrada, provocará un rendimiento deficiente de la base de datos. En este momento, debemos profundizar en las razones para tener la oportunidad de corregir el problema. Las razones del desequilibrio pueden incluir:
- Los datos no están distribuidos uniformemente.
- Demasiada carga en una sola partición.
- A medida que aumenta el tráfico de consultas, necesitamos agregar más nodos para soportar el tráfico del sistema.
A continuación se muestran algunas formas en las que puede reequilibrar sus divisiones:
Número fijo de particiones
En este método, cuando configuramos la base de datos al principio, creamos un número fijo de particiones. Normalmente, se crean y asignan a los nodos más particiones que el número de nodos. Por lo tanto, cuando un nuevo nodo se une al sistema, puede tomar algunas particiones de los nodos existentes hasta que las particiones se dividan uniformemente.
Por supuesto, cada método tiene ventajas y desventajas. La desventaja de este enfoque es que cuando el tamaño de cada partición aumenta con la cantidad total de datos en el clúster, también crecerá porque todas las particiones solo contienen una pequeña porción de los datos totales. Además, si una partición es muy pequeña, el costo de la partición será demasiado grande, porque cada partición cuesta algo de dinero. Si las particiones son muy grandes, el costo de reequilibrar los nodos y recuperarse de las fallas de los nodos será alto. Elegir el número correcto de particiones es muy importante.
partición dinámica
En la partición dinámica (partición dinámica), cuando el tamaño de la partición alcanza el valor establecido, la partición original se dividirá uniformemente en dos particiones. A diferentes particiones se les asigna un nodo y, finalmente, la carga se distribuirá uniformemente. El número de particiones se equilibrará dinámicamente con el volumen total de datos. Esta es la ventaja de la partición dinámica.
Sin embargo, la partición dinámica tiene un inconveniente. Es difícil reequilibrar dinámicamente cuando la base de datos se lee y escribe simultáneamente. El reequilibrio dinámico durante la lectura y la escritura es muy complicado porque los datos leídos y escritos se mueven en diferentes nodos. Si se realiza el equilibrio dinámico en este momento, provocará conflictos o incluso retrasos. Para garantizar la coherencia y disponibilidad de los datos, se introducirá complejidad, lo que afectará el rendimiento y la confiabilidad del sistema. MongoDB es una de las bases de datos más conocidas que utiliza este tipo de partición dinámica.
Si no conoce la coherencia, la disponibilidad y la confiabilidad, puede consultar este artículo. Características no funcionales del diseño de software – Diseño de sistemas 03
Solicitar enrutamiento
Anteriormente se introdujeron varias particiones de datos, pero antes de que los datos se transfieran a la base de datos, debemos hacer una pregunta: cuando el cliente realiza una solicitud, ¿cómo sabe el sistema a qué nodo conectarse? Después del reequilibrio, la distribución de particiones a los nodos cambia. Si queremos leer una base de datos específica, ¿cómo sabemos a qué dirección IP debemos conectarnos para poder leerla? Este problema también se denomina descubrimiento de servicios. Aquí está la solución a este problema:
- Permite a los clientes solicitar cualquier nodo de la red. Si el nodo no contiene los datos solicitados, la solicitud se reenvía a un nodo que sí los contiene.
- Establezca una capa de enrutamiento para transmitir todas las solicitudes a la capa de enrutamiento y luego la capa de enrutamiento decide a qué nodo conectarse para satisfacer la solicitud.
- El cliente ya tiene información sobre las particiones y qué partición está conectada a qué nodo. Por lo tanto, pueden contactar directamente con el nodo que contiene la información que necesitan.
guardián del zoológico
Si queremos rastrear las modificaciones de ciertos clústeres en un sistema distribuido, podemos usar algunas herramientas. Una de las herramientas más conocidas, ZooKeeper, puede hacer lo anterior. ZooKeeper es un servicio de coordinación descentralizado de código abierto proporcionado por Apache para sistemas descentralizados. Esta herramienta también puede rastrear todas las asignaciones en la red y cada nodo está conectado a ZooKeeper para obtener información. Cada vez que cambia una partición, o se agrega o elimina un nodo, ZooKeeper actualizará y notificará a la capa de enrutamiento del cambio. ZooKeeper lo utilizan empresas como Yelp, RackSpace, Yahoo!, Reddit, Facebook y Twitter.
en conclusión
La partición de datos es una técnica que divide los datos de una base de datos en subconjuntos más pequeños y manejables, lo que puede mejorar el rendimiento, la escalabilidad, la disponibilidad y la capacidad de administración de la base de datos.
Cuando la carga de consultas de la base de datos está desequilibrada, es necesario reequilibrar las particiones para mejorar el rendimiento de la base de datos. El proceso de reequilibrio de una división generalmente implica los pasos de identificar divisiones desequilibradas, desarrollar un plan de reequilibrio y ejecutar el plan de reequilibrio.
El particionamiento se ha convertido en un estándar para todos los sistemas distribuidos hoy en día y es algo que la mayoría de los ingenieros de software deben saber. Además, debido a que la cantidad de datos en el sistema continúa aumentando, tiene sentido particionar los datos. Esto puede acelerar la escritura y la lectura, mejorando aún más la disponibilidad, la escalabilidad y el rendimiento del sistema.
Artículos relacionados
¿Cómo optimiza la replicación de datos la base de datos? - Diseño del sistema 09
Introducción a los conceptos básicos de bases de datos: diseño de sistemas 08
Explicación del equilibrador de carga: diseño del sistema 07
¿Qué es DNS? Introducción al sistema de nombres de dominio – Diseño del sistema 06
Introducción al bloque de construcción de componentes de diseño de sistemas: diseño de sistemas 05
Cálculo del reverso del sobre: diseño del sistema 04
Características no funcionales del diseño de software – Diseño de sistemas 03
Aplicación de la abstracción en el diseño de sistemas – Diseño de sistemas 02
Introducción al diseño de sistemas modernos – Diseño de sistemas 01
Cita
DigitalOcean: comprensión de la fragmentación de bases de datos
Tencent Cloud: explicación detallada de la fragmentación de bases de datos