tablas partición particiones particionar particionamiento particionadas ninguna ejemplos definida datos mysql sharding database-partitioning

mysql - particiones - Partición de base de datos vs particionamiento



particionamiento de tablas postgresql (4)

He estado leyendo sobre arquitecturas escalables recientemente. En ese contexto, dos palabras que siguen apareciendo en las bases de datos de wrt son fragmentación y partición . Busqué descripciones en los motores de búsqueda, wikipedia y stackoverflow, pero aun así terminé confundido.

¿Podrían los expertos de stackoverflow ayudarme a entender los conceptos básicos?

  • ¿Cuál es la diferencia entre fragmentación y partición ?
  • ¿Es cierto que "todas las bases de datos fragmentadas son esencialmente particionadas (sobre nodos diferentes), pero no todas las bases de datos particionadas están necesariamente fragmentadas" ?

Considere una tabla en la base de datos con 1 millón de filas y 100 columnas. En Particionamiento puede dividir la tabla en 2 o más tablas con propiedades como:

  1. 0.4 millones de filas (tabla 1), 0.6 millones de filas (tabla 2)

  2. 1 millón de filas y 60 columnas (tabla 1) y 1 millón de filas y 40 columnas (tabla 2)

    Podría haber múltiples casos como ese

Esta es una partición general

Pero Sharding se refiere al primer caso solo donde estamos dividiendo los datos en base a filas. Si estamos dividiendo la tabla en varias tablas, debemos mantener varias copias similares de esquemas, ya que ahora tenemos varias tablas.


Parece que esto responde a tus dos preguntas:

La partición horizontal divide una o más tablas por fila, generalmente dentro de una sola instancia de un esquema y un servidor de base de datos. Puede ofrecer una ventaja al reducir el tamaño del índice (y, por lo tanto, el esfuerzo de búsqueda) siempre que haya alguna forma obvia, sólida e implícita de identificar en qué tabla se encontrará una fila en particular, sin necesidad de buscar primero el índice, por ejemplo, el clásico ejemplo de las tablas ''CustomersEast'' y ''CustomersWest'', donde su código postal ya indica dónde se encontrarán.

Sharding va más allá de esto: divide las tablas problemáticas de la misma manera, pero lo hace en múltiples instancias del esquema. La ventaja obvia sería que la carga de búsqueda para la tabla particionada grande ahora se puede dividir en varios servidores (lógicos o físicos), no solo en múltiples índices en el mismo servidor lógico.

Fuente: Wiki-Shard .

Sharding es el proceso de almacenamiento de registros de datos en múltiples máquinas y es el enfoque de MongoDB para satisfacer las demandas de crecimiento de datos. A medida que aumenta el tamaño de los datos, una sola máquina puede no ser suficiente para almacenar los datos ni proporcionar un rendimiento de lectura y escritura aceptable. La fragmentación resuelve el problema con la escala horizontal. Con sharding, agrega más máquinas para soportar el crecimiento de datos y las demandas de las operaciones de lectura y escritura.

Fuente: MongoDB .



También me he metido en esto y, aunque soy de lejos la referencia al respecto, hay algunos datos clave que he reunido y puntos que me gustaría compartir:

Una partición es una división de una base de datos lógica o sus elementos constitutivos en partes independientes distintas. La partición de la base de datos se realiza normalmente por razones de capacidad de administración, rendimiento o disponibilidad, como para el equilibrio de carga.

https://en.wikipedia.org/wiki/Partition_(database)

Sharding es un tipo de partición, como la partición horizontal (HP)

También hay una partición vertical (VP) mediante la cual se divide una tabla en partes distintas más pequeñas. La normalización también implica esta división de columnas en las tablas, pero la partición vertical va más allá de eso y divide las columnas incluso cuando ya están normalizadas.

https://en.wikipedia.org/wiki/Shard_(database_architecture)

Realmente me gusta la respuesta de Tony Baco en Quora, donde te hace pensar en términos de esquema (en lugar de columnas y filas). Afirma que ...

La " partición horizontal ", o sharding, está replicando [copiando] el esquema, y ​​luego dividiendo los datos basándose en una clave de shard.

La " partición vertical " implica dividir el esquema (y los datos continúan para el recorrido).

https://www.quora.com/Whats-the-difference-between-sharding-DB-tables-and-partitioning-them

La Guía de partición de la base de datos de Oracle tiene algunas cifras interesantes. He copiado algunos extractos del artículo.

https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm

Cuándo particionar una mesa

Aquí hay algunas sugerencias para cuándo particionar una tabla:

  • Las tablas de más de 2 GB siempre deben considerarse como candidatos para la partición.
  • Tablas que contienen datos históricos, en las que se agregan nuevos datos a la partición más nueva. Un ejemplo típico es una tabla histórica donde solo los datos del mes actual son actualizables y los otros 11 meses son de solo lectura.
  • Cuando el contenido de una tabla debe distribuirse en diferentes tipos de dispositivos de almacenamiento.

Partición poda

La poda de partición es el medio más simple y también más importante para mejorar el rendimiento utilizando la partición. La poda de partición a menudo puede mejorar el rendimiento de la consulta en varios órdenes de magnitud. Por ejemplo, supongamos que una aplicación contiene una tabla de pedidos que contiene un registro histórico de pedidos y que esta tabla se ha dividido por semana. Una consulta que solicite pedidos para una sola semana solo accederá a una sola partición de la tabla Pedidos. Si la tabla Pedidos tenía 2 años de datos históricos, entonces esta consulta accedería a una partición en lugar de 104 particiones. Esta consulta podría ejecutarse 100 veces más rápido simplemente debido a la eliminación de particiones.

Estrategias de particionamiento

  • Distancia
  • Picadillo
  • Lista

Puedes leer su texto y visualizar sus imágenes que explican todo muy bien.

Y, por último, es importante comprender que las bases de datos requieren un gran uso de recursos:

  • UPC
  • Disco
  • I / O
  • Memoria

Muchos DBA se particionarán en la misma máquina, donde las particiones compartirán todos los recursos pero proporcionarán una mejora en el disco y la E / S al dividir los datos y / o el índice.

Mientras que otras estrategias emplearán una arquitectura de "nada compartido" donde los fragmentos residirán en unidades de computación separadas (nodos), con el 100% de la CPU, el disco, la E / S y la memoria para sí mismos. Proporcionando su propio conjunto de ventajas y complejidades.

https://en.wikipedia.org/wiki/Shared_nothing_architecture