He estado leyendo sobre arquitecturas escalables recientemente. En ese contexto, dos palabras que siguen apareciendo con respecto a las bases de datos son particiones y particiones . Busqué descripciones pero aún así terminé confundido.
¿Podrían los expertos de stackoverflow ayudarme a entender lo básico?
- ¿Cuál es la diferencia entre fragmentar y particionar ?
- ¿Es cierto que 'todas las bases de datos fragmentadas están esencialmente particionadas (en diferentes nodos), pero todas las bases de datos particionadas no están necesariamente fragmentadas' ?
mysql
sharding
database-partitioning
Amit Sharma
fuente
fuente
Respuestas:
Particionar es más un término genérico para dividir datos entre tablas o bases de datos. El fragmentación es un tipo específico de particionamiento, parte de lo que se denomina particionamiento horizontal.
Aquí puede replicar el esquema en (típicamente) múltiples instancias o servidores, utilizando algún tipo de lógica o identificador para saber qué instancia o servidor buscar los datos. Un identificador de este tipo a menudo se denomina "Clave de fragmento".
Una lógica común sin clave es usar el alfabeto para dividir los datos. AD es la instancia 1, EG es la instancia 2, etc. Los datos del cliente son adecuados para esto, pero se tergiversarán en cierto tamaño en todas las instancias si la partición no tiene en cuenta que algunas letras son más comunes que otras.
Otra técnica común es utilizar un sistema de sincronización de claves o lógica que garantice claves únicas en todas las instancias.
Un ejemplo bien conocido que puede estudiar es cómo Instagram resolvió su partición en los primeros días (vea el enlace a continuación). Comenzaron con particiones en muy pocos servidores, utilizando Postgres para dividir los datos desde el primer momento. Creo que fueron varios miles de fragmentos lógicos en esos pocos fragmentos físicos. Lea su impresionante reseña de 2012 aquí: Ingeniería de Instagram - Sharding & IDs
Ver aquí también: http://www.quora.com/Whats-the-difference-between-sharding-and-partition
fuente
Parece que esto responde a sus dos preguntas:
Fuente: Wiki-Shard .
Fuente: MongoDB .
fuente
También me he sumergido en esto y, aunque soy con mucho la referencia en el tema, hay algunos 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 distintas partes independientes. La partición de la base de datos normalmente se realiza por razones de capacidad de administración, rendimiento o disponibilidad, como por ejemplo, el equilibrio de carga.
https://en.wikipedia.org/wiki/Partition_(database)
Sharding es un tipo de particionamiento, como el particionamiento horizontal (HP)
También hay Particionamiento vertical (VP) por el que 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á normalizado.
https://en.wikipedia.org/wiki/Shard_(database_architecture)
Realmente me gusta la respuesta de Tony Baco sobre Quora, donde te hace pensar en términos de esquema (en lugar de columnas y filas). Él dice que ...
" Particionamiento horizontal ", o fragmentación, es replicar [copiar] el esquema y luego dividir los datos en función de una clave de fragmento.
La " partición vertical " implica dividir el esquema (y los datos van a lo largo del recorrido).
https://www.quora.com/Whats-the-difference-between-sharding-DB-tables-and-partition-them
La Guía de particionamiento de bases de datos de Oracle tiene algunas buenas figuras. He copiado algunos extractos del artículo.
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm
Cuándo dividir una tabla
Aquí hay algunas sugerencias sobre cuándo particionar una tabla:
Poda de partición
La poda de partición es el medio más simple y también el más sustancial para mejorar el rendimiento mediante la partición. La poda de partición a menudo puede mejorar el rendimiento de la consulta en varios órdenes de magnitud. Por ejemplo, suponga 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 solicita pedidos para una sola semana solo accedería a una única partición de la tabla Pedidos. Si la tabla de pedidos 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 100 veces más rápido simplemente debido a la poda de partición.
Estrategias de partición
Puede leer su texto y visualizar sus imágenes que explican todo bastante bien.
Y, por último, es importante comprender que las bases de datos son extremadamente intensivas en recursos:
Muchos DBA se dividirá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 cómputo separadas y distintas (nodos), teniendo el 100% de la CPU, disco, E / S y memoria para sí mismo. Proporcionando su propio conjunto de ventajas y complejidades.
https://en.wikipedia.org/wiki/Shared_nothing_architecture
fuente
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:
0.4 millones de filas (tabla1), 0.6 millones de filas (tabla2)
1 millón de filas y 60 columnas (tabla1) y 1 millón de filas y 40 columnas (tabla2)
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, necesitamos mantener múltiples copias similares de esquemas, ya que ahora tenemos varias tablas.
fuente
Fragmentación en un caso especial de particionamiento horizontal , cuando las particiones se extienden a través de múltiples instancias de bases de datos. Si una base de datos está fragmentada, significa que está particionada por definición.
fuente
Cuando se habla de particionamiento, no utilice el término replicar o replicación. La replicación es un concepto diferente y está fuera del alcance de esta página. Cuando hablamos de particionar, mejor palabra se divide y cuando hablamos de fragmentación, mejor palabra se distribuye. En la partición (normalmente y en la comprensión común, no siempre), las filas de la tabla de conjunto de datos grandes se dividen en dos o más grupos disjuntos (sin compartir ninguna fila). Puede llamar a cada grupo una partición. Estos grupos o todas las particiones permanecen bajo el control de una vez una instancia de RDMB y todo esto es lógico. La base de cada grupo puede ser un hash o rango, etc. Si tiene datos de diez años en una tabla, puede almacenar cada uno de los datos del año en una partición separada y esto se puede lograr estableciendo límites de partición en función de un columna no nula CREATE_DATE. Una vez que consulte la base de datos, si especifica una fecha de creación entre el 01-01-1999 y el 31-12-2000, solo se ejecutarán dos particiones y será secuencial. Hice lo mismo en DB para más de mil millones de registros y el tiempo de sql llegó a 50 milis desde 30 segundos usando índices, etc. Sharding es que aloja cada partición en un nodo / máquina diferente. Ahora buscar dentro de las particiones / fragmentos puede ocurrir en paralelo.
fuente
La partición horizontal cuando se mueve a otra instancia de base de datos * se convierte en un fragmento de base de datos .
La instancia de la base de datos puede estar en la misma máquina o en otra máquina.
fuente