Creo que entiendo que fragmentar es volver a colocar sus datos cortados (los fragmentos) en un agregado fácil de manejar que tiene sentido en el contexto. ¿Es esto correcto?
Actualización : supongo que estoy luchando aquí. En mi opinión, el nivel de aplicación no debería tener ningún negocio para determinar dónde se deben almacenar los datos. En el mejor de los casos, debería ser un cliente de fragmentos de algún tipo. Ambas respuestas respondieron al qué, pero no al por qué, es un aspecto importante. ¿Qué implicaciones tiene fuera de las obvias ganancias de rendimiento? ¿Son estas ganancias suficientes para compensar la violación de MVC? ¿El sharding es más importante en aplicaciones de gran escala o se aplica a las de menor escala?
database
terminology
ojblass
fuente
fuente
Respuestas:
Sharding es solo otro nombre para "particionamiento horizontal" de una base de datos. Es posible que desee buscar ese término para aclararlo.
De Wikipedia :
Alguna información más sobre el fragmentación:
Actualización: No romperás MVC. El trabajo de determinar el fragmento correcto donde almacenar los datos sería realizado de manera transparente por su capa de acceso a datos. Allí tendría que determinar el fragmento correcto en función de los criterios que utilizó para fragmentar su base de datos. (Como debe fragmentar manualmente la base de datos en algunos fragmentos diferentes en función de algunos aspectos concretos de su aplicación.) Luego debe tener cuidado al cargar y almacenar los datos desde / en la base de datos para utilizar el fragmento correcto.
Tal vez este ejemplo con código Java lo hace algo más claro (se trata del proyecto Hibernate Shards ), cómo funcionaría esto en un escenario del mundo real.
Para abordar el "
why sharding
": es principalmente solo para aplicaciones a gran escala, con muchos datos. Primero, ayuda a minimizar los tiempos de respuesta para las consultas de la base de datos. En segundo lugar, puede usar máquinas más baratas y de "gama baja" para alojar sus datos, en lugar de un gran servidor, lo que podría no ser suficiente.fuente
Si tiene consultas a un DBMS para el cual la localidad está bastante restringida (por ejemplo, un usuario solo dispara selecciones con un 'donde nombre de usuario = $ mi_nombredeusuario') tiene sentido poner todos los nombres de usuario que comienzan con AM en un servidor y todos desde NZ en el otro. De este modo, se obtiene una escala lineal para algunas consultas.
Larga historia corta : Sharding es básicamente el proceso de distribuir tablas en diferentes servidores para equilibrar la carga en ambos por igual.
Por supuesto, es mucho más complicado en realidad. :)
fuente
Sharding es una partición de base de datos horizontal (en sentido de fila ) en oposición a una partición vertical (en sentido de columna ) que es Normalización . Separa bases de datos muy grandes en partes más pequeñas, más rápidas y más fáciles de administrar llamadas fragmentos de datos. Es un mecanismo para lograr sistemas distribuidos.
¿Por qué necesitamos sistemas distribuidos?
Puede leer más aquí: Ventajas de la base de datos distribuida
¿Cómo los fragmentos ayudan a lograr un sistema distribuido?
Puede particionar un índice de búsqueda en N particiones y cargar cada índice en un servidor separado. Si consulta un servidor, obtendrá 1 / Nth de los resultados. Por lo tanto, para obtener un conjunto completo de resultados, un sistema de búsqueda distribuido típico utiliza un agregador que acumulará los resultados de cada servidor y los combinará. Un agregador también distribuye consultas en cada servidor. Este programa agregador se llama MapReduce en terminología de big data. En otras palabras, Sistemas distribuidos = Sharding + MapReduce (aunque también hay otras cosas).
Una representación visual a continuación.
fuente
El fragmentación es una preocupación si y solo si sus necesidades escalan más allá de lo que puede servir un único servidor de base de datos. Es una herramienta excelente si tiene datos definidos y tiene requisitos de escalabilidad y rendimiento increíblemente altos. Supongo que en mis 12 años completos he sido un profesional del software, me he encontrado con una situación que podría haberse beneficiado de la fragmentación. Es una técnica avanzada con una aplicabilidad muy limitada.
Además, el futuro probablemente será algo divertido y emocionante como una "nube" de objetos masivos que borra todas las limitaciones potenciales de rendimiento, ¿verdad? :)
fuente
Sharding fue originalmente acuñado por ingenieros de Google y puedes ver que se usó bastante cuando escribiste aplicaciones en Google App Engine. Dado que existen grandes limitaciones en la cantidad de recursos que pueden usar sus consultas y debido a que las consultas tienen limitaciones estrictas, la arquitectura no solo fomenta el fragmentación, sino que casi lo impone.
Otro lugar en el que se puede usar el fragmentación es para reducir la contención en las entidades de datos. Al construir sistemas escalables, es especialmente importante tener cuidado con los datos que se escriben con frecuencia porque siempre son el cuello de botella. Una buena solución es dividir esa entidad específica y escribir en copias de varios archivos, luego leer el total. Un ejemplo de este "contador fragmentado wrt GAE: http://code.google.com/appengine/articles/sharding_counters.html
fuente
Sharding hace más que solo particionar horizontalmente. Según el artículo de Wikipedia ,
También,
fuente
Esta es una buena regla, pero como la mayoría de las cosas no siempre es correcta.
Cuando haces tu arquitectura comienzas con responsabilidades y colaboraciones. Una vez que determina su arquitectura funcional, debe equilibrar las fuerzas no funcionales.
Si una de estas fuerzas no funcionales es la escalabilidad masiva, debe adaptar su arquitectura para satisfacer esta fuerza, incluso si eso significa que su abstracción de almacenamiento de datos ahora se filtra en su nivel de aplicación.
fuente