Algunos datos de una base de datos permanecen presentes en todos los fragmentos, [a] pero otros aparecen solo en un único fragmento. Cada fragmento (o servidor) actúa como la única fuente para este subconjunto de datos. [1]
Arquitectura de base de datos
La partición horizontal es un principio de diseño de bases de datos según el cual las filas de una tabla de base de datos se mantienen por separado, en lugar de dividirse en columnas (que es lo que hacen la normalización y la partición vertical , en diferentes grados). Cada partición forma parte de un fragmento, que a su vez puede estar ubicado en un servidor de base de datos o ubicación física independiente.
El método de particionamiento horizontal tiene numerosas ventajas. Dado que las tablas se dividen y distribuyen en varios servidores, se reduce el número total de filas de cada tabla en cada base de datos. Esto reduce el tamaño del índice , lo que generalmente mejora el rendimiento de la búsqueda. Un fragmento de base de datos se puede colocar en un hardware separado y varios fragmentos se pueden colocar en varias máquinas. Esto permite una distribución de la base de datos en una gran cantidad de máquinas, lo que mejora enormemente el rendimiento. Además, si el fragmento de base de datos se basa en alguna segmentación del mundo real de los datos (por ejemplo, clientes europeos frente a clientes estadounidenses), entonces puede ser posible inferir la membresía apropiada del fragmento de manera fácil y automática, y consultar solo el fragmento relevante. [2]
En la práctica, la fragmentación es compleja. Aunque se ha realizado durante mucho tiempo mediante codificación manual (especialmente cuando las filas tienen una agrupación obvia, como en el ejemplo anterior), esto suele ser inflexible. Existe el deseo de admitir la fragmentación automáticamente, tanto en términos de agregar soporte de código para ella como para identificar candidatos que se fragmentarán por separado. El hash consistente es una técnica que se utiliza en la fragmentación para distribuir grandes cargas entre varios servicios y servidores más pequeños. [3]
La partición horizontal divide una o más tablas por fila, generalmente dentro de una única 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 exista una forma obvia, sólida e implícita de identificar en qué partición se encontrará una fila en particular, sin necesidad de buscar primero en el índice, por ejemplo, el ejemplo clásico de las tablas ' CustomersEast' y ' CustomersWest', donde su código postal ya indica dónde se encontrarán.
La fragmentación va más allá de esto. Particiona las tablas problemáticas de la misma manera, pero lo hace en varias 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 varios índices en el mismo servidor lógico.
Dividir fragmentos en varias instancias aisladas requiere algo más que una simple partición horizontal. Las ganancias esperadas en eficiencia se perderían si la consulta de la base de datos requiriera consultar varias instancias solo para recuperar una tabla de dimensiones simple . Más allá de la partición, la fragmentación divide tablas particionables grandes en los servidores, mientras que las tablas más pequeñas se replican como unidades completas. [ Aclaración necesaria ]
Esta es también la razón por la que la fragmentación está relacionada con una arquitectura de nada compartido : una vez fragmentada, cada fragmento puede vivir en una instancia de esquema lógico/servidor de base de datos físico/ centro de datos / continente totalmente independiente . No hay necesidad continua de conservar el acceso compartido (entre fragmentos) a las otras tablas no particionadas en otros fragmentos. [ cita requerida ]
Esto facilita la replicación entre varios servidores (la partición horizontal simple no lo hace). También es útil para la distribución mundial de aplicaciones, donde los enlaces de comunicaciones entre centros de datos de otro modo serían un cuello de botella. [ cita requerida ]
También se requiere algún mecanismo de notificación y replicación entre instancias de esquema, de modo que las tablas no particionadas permanezcan tan sincronizadas como lo exige la aplicación. Esta es una elección compleja en la arquitectura de los sistemas fragmentados: los enfoques varían desde hacer que sean efectivamente de solo lectura (las actualizaciones son poco frecuentes y se realizan por lotes), hasta tablas replicadas dinámicamente (a costa de reducir algunos de los beneficios de distribución de la fragmentación) y muchas opciones intermedias. [ cita requerida ]
Implementaciones
Altibase proporciona una arquitectura de fragmentación combinada (del lado del cliente y del lado del servidor) transparente para las aplicaciones del cliente.
Apache HBase puede fragmentarse automáticamente. [6]
Las herramientas de base de datos elástica de Azure SQL Database se fragmentan para escalar horizontal y verticalmente en el nivel de datos de una aplicación. [7]
ClickHouse , un sistema rápido de gestión de bases de datos OLAP de código abierto, fragmentos.
Couchbase se fragmenta de forma automática y transparente.
Característica de particionamiento de datos de Db2 (MPP), que es una partición de base de datos sin uso compartido que se ejecuta en nodos separados.
DRDS (Servicio de base de datos relacional distribuida) de Alibaba Cloud realiza fragmentación de bases de datos/tablas [8] y apoya el Día de los Solteros [9] .
Fragmentos del servidor de búsqueda empresarial Elasticsearch . [10]
eXtreme Scale es un almacén de datos de clave/valor en memoria de procesos cruzados (un almacén de datos NoSQL ). Utiliza fragmentación para lograr escalabilidad entre procesos, tanto para datos como para procesamiento paralelo de estilo MapReduce . [11]
Los fragmentos de IBM Informix desde la versión 12.1 xC1 forman parte de la tecnología MACH11. Informix 12.10 xC2 agregó compatibilidad total con los controladores MongoDB, lo que permite la combinación de tablas relacionales regulares con colecciones NoSQL, al tiempo que permite el fragmentado, la conmutación por error y las propiedades ACID. [14] [15]
MariaDB Spider, un motor de almacenamiento que admite la federación de tablas, la fragmentación de tablas, las transacciones XA y las fuentes de datos ODBC. El motor MariaDB Spider está incluido en el servidor MariaDB desde la versión 10.0.4. [16]
MySQL Cluster se fragmenta de forma automática y transparente en nodos básicos de bajo costo, lo que permite escalar horizontalmente las consultas de lectura y escritura sin necesidad de realizar cambios en la aplicación. [18]
Fragmentos de Oracle Database desde la versión 12c Release 2 y en una sola línea: combinación de las ventajas de fragmentación con las conocidas capacidades de Oracle Database multimodelo preparada para la empresa. [20]
Oracle NoSQL Database cuenta con fragmentación automática y expansión elástica y en línea del clúster (agregando más fragmentos).
ScyllaDB se ejecuta fragmentado en cada núcleo de un servidor, en todos los servidores de un clúster
Spanner , la base de datos distribuida a escala global de Google, se fragmenta en múltiples máquinas de estado de Paxos para escalar a "millones de máquinas en cientos de centros de datos y billones de filas de bases de datos". [22]
SQL Server , desde SQL Server 2005, fragmenta con ayuda de herramientas de terceros. [24]
Teradata comercializa un sistema masivo de gestión de bases de datos paralelas como un " almacén de datos ".
Vault, una criptomoneda , se fragmenta para reducir drásticamente los datos que los usuarios necesitan para unirse a la red y verificar las transacciones. Esto permite que la red se escale mucho más. [25]
ShardingSphere está relacionado con un sistema de agrupamiento de bases de datos que proporciona fragmentación de datos, transacciones distribuidas y gestión de bases de datos distribuidas. Es un proyecto de la Apache Software Foundation (ASF). [27]
Desventajas
La fragmentación de una tabla de base de datos antes de que se haya optimizado localmente provoca una complejidad prematura. La fragmentación se debe utilizar solo cuando todas las demás opciones de optimización son inadecuadas. [ ¿según quién? ] La complejidad introducida por la fragmentación de la base de datos provoca los siguientes problemas potenciales: [ cita requerida ]
Complejidad de SQL : aumento de errores porque los desarrolladores tienen que escribir SQL más complicado para manejar la lógica de fragmentación.
El software adicional que particiona, equilibra, coordina y garantiza la integridad puede fallar.
Punto único de falla : la corrupción de un fragmento debido a problemas de red, hardware o sistemas provoca la falla de toda la tabla.
Complejidad del servidor de conmutación por error : los servidores de conmutación por error deben tener copias de las flotas de fragmentos de base de datos.
Complejidad de las copias de seguridad : las copias de seguridad de la base de datos de los fragmentos individuales deben coordinarse con las copias de seguridad de los demás fragmentos.
Complejidad operativa : agregar/eliminar índices, agregar/eliminar columnas y modificar el esquema se vuelve mucho más difícil.
Etimología
En un contexto de base de datos, la mayoría reconoce que el término "fragmento" probablemente se deriva de una de dos fuentes: "Un sistema para datos replicados de alta disponibilidad" de Computer Corporation of America , [28] que utilizó hardware redundante para facilitar la replicación de datos (en oposición a la partición horizontal); o el videojuego MMORPG Ultima Online de 1997 aclamado por la crítica , que estableció 8 récords mundiales Guinness y fue designado por Time como uno de los 100 mejores videojuegos producidos de todos los tiempos. [29] [30]
Richard Garriott , creador de Ultima Online , recuerda que el término se acuñó durante la fase de producción cuando intentaron crear un sistema de ecología virtual autorregulado, mediante el cual los jugadores pueden aprovechar el nuevo acceso a Internet (una tecnología revolucionaria en ese momento) para interactuar y recolectar recursos del juego. [30] Aunque la ecología virtual funcionó como se esperaba durante las pruebas internas, su equilibrio natural falló "casi instantáneamente" debido a que los jugadores mataron a toda la vida silvestre viva en el área jugable más rápido de lo que podía operar el sistema de generación. El equipo de producción de Garriott intentó mitigar este problema separando la base de jugadores global en sesiones separadas y reescribiendo parte de la conexión ficticia de Ultima Online con el final de Ultima I: The First Age of Darkness , donde la derrota de su antagonista Mondain también condujo a la creación de "fragmentos" del multiverso . Esta modificación proporcionó al equipo de Garriott la base ficticia necesaria para justificar la creación de copias del entorno virtual. Sin embargo, el fuerte ascenso del juego a la aclamación crítica también significó que el nuevo sistema de ecología virtual del multiverso también se vio rápidamente abrumado. Después de varios meses de pruebas, el equipo de Garriott decidió abandonar la característica por completo y despojó al juego de su funcionalidad. [30]
Hoy en día, el término "fragmento" se refiere a la implementación y uso de hardware redundante en sistemas de bases de datos. [ cita requerida ]
^ Sadalage, Pramod J.; Fowler, Martin (2012). "4: Modelos de distribución". NoSQL Distilled . Pearson Education. ISBN978-0321826626.
^ Rahul Roy (28 de julio de 2008). "Shard: un diseño de base de datos".
^ Ries, Eric. "Fragmentación para startups".
^ Wang, Gang; Shi, Zhijie Jerry; Nixon, Mark; Han, Song (21 de octubre de 2019). "SoK". Actas de la 1.ª Conferencia de la ACM sobre avances en tecnologías financieras . págs. 41–61. doi :10.1145/3318041.3355457. ISBN9781450367325.S2CID204749727 .
^ Yu, Mingchao; Sahraei, Saeid; Nixon, Mark; Han, Song (18 de julio de 2020). "SoK: Sharding on Blockchain". Actas de la 1.ª Conferencia de la ACM sobre avances en tecnologías financieras . FC 2020: Criptografía financiera y seguridad de datos . págs. 114–134. doi :10.1145/3318041.3355457. ISBN .9781450367325.S2CID204749727 .
^ "Apache HBase – Página de inicio de Apache HBase™". hbase.apache.org .
^ "Presentación de la versión preliminar de Elastic Scale para Azure SQL Database". azure.microsoft.com . 2 de octubre de 2014.
^ "Centro de ayuda de Alibaba Cloud - Definición de la nube y explicación de los servicios basados en la nube - Alibaba Cloud". www.alibabacloud.com .
^ "Se centra en bases de datos en línea a gran escala: Alibaba Cloud". www.alibabacloud.com .
^ "Asignación de fragmentos de índice | Guía de Elasticsearch [7.13] | Elastic". www.elastic.co .
^ "Documentación de IBM".
^ "Fragmentos de hibernación". 8 de febrero de 2007.
^ "Hibernate Shards". Archivado desde el original el 16 de diciembre de 2008. Consultado el 30 de marzo de 2011 .
^ "Nuevas consultas de cuadrícula para Informix".
^ "Soporte NoSQL en Informix (almacenamiento JSON, API Mongo DB)". 24 de septiembre de 2013.
^ "Araña". Base de conocimientos de MariaDB . Consultado el 20 de diciembre de 2022 .
^ "Lanzamiento de la versión de julio de 2015 de MonetDB". 31 de agosto de 2015.
^ "Características y beneficios del clúster MySQL". 23 de noviembre de 2012.
^ "Guía de inicio rápido de fragmentación de MySQL Fabric".
^ Corbett, James C; Dean, Jeffrey; Epstein, Michael; Fikes, Andrew; Frost, Christopher; Furman, JJ; Ghemawat, Sanjay; Gubarev, Andrey; Heiser, Christopher; Hochschild, Peter; Hsieh, Wilson; Kanthak, Sebastian; Kogan, Eugene; Li, Hongyi; Lloyd, Alexander; Melnik, Sergey; Mwaura, David; Nagle, David; Quinlan, Sean; Rao, Rajesh; Rolig, Lindsay; Saito, Yasushi; Szymaniak, Michal; Taylor, Christopher; Wang, Ruth; Woodford, Dale. "Spanner: la base de datos distribuida globalmente de Google" (PDF) . Actas de OSDI 2012 . Consultado el 24 de febrero de 2014 .
^ "sqlalchemy/sqlalchemy". 9 de julio de 2021 – vía GitHub.
^ "Opciones de particionamiento y fragmentación para SQL Server y SQL Azure". infoq.com .
^ "Una criptomoneda más rápida y eficiente". MIT News . 24 de enero de 2019 . Consultado el 30 de enero de 2019 .
^ "Vitess". vitess.io .
^ "Esfera de fragmentación". shardingsphere.apache.org .
^ Sarin, DeWitt y Rosenberg, Descripción general de SHARD: un sistema para datos replicados de alta disponibilidad , Informe técnico CCA-88-01, Computer Corporation of America, mayo de 1988
^ Koster, Raph (8 de enero de 2009). "¿La "fragmentación" de bases de datos proviene de UO?". Sitio web de Raph Koster . Consultado el 17 de enero de 2015 .
^ abc "Ultima Online: La ecología virtual | Historias de guerra". Vídeos de Ars Technica . 21 de diciembre de 2017.