Fragmentación De bases De datos Vs particionamiento


He estado leyendo acerca de arquitecturas escalables recientemente. En ese contexto, dos palabras que siguen mostrando bases de datos wrt son shardingy partitioning. Busqué descripciones en los motores de búsqueda, wikipedia y stackoverflow, pero aún así terminé confundido.

¿Podrían los expertos de stackoverflow ayudarme a entender lo básico?

  • ¿Cuál es la diferencia entre fragmentación y partición ?
  • Es cierto que 'todos las bases de datos fragmentadas son esencialmente particionadas (sobre diferentes nodos), pero todas las bases de datos particionadas no son necesariamente fragmentadas' ?
Author: Amit Sharma, 2013-12-25

4 answers

El particionamiento es más un término genérico para dividir datos entre tablas o bases de datos. El sharding es un tipo específico de partición, es decir, la partición horizontal.

Vea aquí también: http://www.quora.com/Whats-the-difference-between-sharding-and-partition

 49
Author: Canis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-25 12:22:12

Parece que esto responde a ambas preguntas:

El particionamiento 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 ofrezca una ventaja al reducir el tamaño del índice (y, por lo tanto, el esfuerzo de búsqueda) siempre que haya una forma obvia, robusta e implícita de identificar en qué tabla se encontrará una fila en particular, sin necesidad de para buscar en el índice, por ejemplo, el ejemplo clásico del 'CustomersEast' y Tablas 'CustomersWest', donde su código postal ya indica donde serán encontrados.

El sharding va más allá de esto: particiona la (s) tabla (s) problemática (s) en de la misma manera, pero lo hace a través de varias instancias potencialmente del esquema. La ventaja obvia sería que la carga de búsqueda para el la tabla particionada grande ahora se puede dividir en varios servidores (lógico o físico), no solo múltiples índices en la misma lógica servidor.

Fuente: Wiki-Shard .

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

Fuente: MongoDB.

 27
Author: NoChance,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-27 05:55:47

He estado buceando en esto también y aunque soy de lejos la referencia en el asunto, hay pocos hechos 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 la carga equilibrio.

Https://en.wikipedia.org/wiki/Partition_ (base de datos)

Sharding es un tipo de partición, como Horizontal Partitioning (HP)

También existe el Particionamiento vertical (VP) mediante el cual se divide una tabla en partes distintas más pequeñas. La normalización también implica esta división de columnas a través de tablas, pero el particionamiento vertical va más allá y las particiones columnas incluso cuando ya normalizar.

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

Me gusta mucho la respuesta de Tony Baco en Quora donde te hace pensar en términos de esquema (en lugar de columnas y filas). Dice eso...

"Horizontal partitioning ", o sharding, es replicar [copiar] el esquema, y luego dividir los datos basados en una clave shard.

"Vertical partitioning" implica dividir el esquema (y los datos van a lo largo de la paseo).

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

La Guía de Partición de bases 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 tabla

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

  • Las tablas de más de 2 GB deben ser siempre considerados como candidatos para particionar.
  • Tablas que contienen datos históricos, en las que se agregan nuevos datos a la partición más reciente. 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 necesita ser distribuido a través de diferentes tipos de dispositivos de almacenamiento.

Poda de particiones

La poda de particiones es la más simple y también la más medios sustanciales para mejorar el rendimiento mediante el particionamiento. La poda de particiones a menudo puede mejorar el rendimiento de las consultas en varios órdenes de magnitud. Por ejemplo, supongamos que una aplicación contiene una tabla de órdenes que contiene un registro histórico de órdenes, y que esta tabla ha sido particionada por semana. Una consulta que solicita pedidos para una sola semana solo accedería a una sola partición de la tabla de pedidos. Si la tabla Orders tuviera 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 potencialmente 100 veces más rápido simplemente debido a la eliminación de particiones.

Estrategias De Partición

  • Rango
  • Hash
  • List

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

Y por último, es importante entender que las bases de datos son extremadamente recursos intensivo:

  • CPU
  • Disco
  • I/O
  • Memoria

Muchos DBA 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 dividiendo los datos y/o el índice.

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

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

 17
Author: Jeach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-09 13:58:53

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 tabla que tiene propiedades como:

  1. 0.4 Millones de filas(cuadro 1), 0,6 millones de filas (cuadro 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

Esto es particionamiento general

Pero Sharding refiérase solo al 1er caso donde estamos dividiendo los datos sobre la base de filas. Si estamos dividiendo la tabla en varias tablas, necesitamos mantener varias copias similares de esquemas, ya que ahora tenemos varias tablas.

 0
Author: vikas bhandari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-22 17:52:44