Particionamiento de bases de datos
Como se indica en la página Cómo se almacenan los datos página, bases de datos particionadas permiten a su aplicación co-localizar documentos en el mismo utilizando la clave de partición del documento. Esta página le ayudará a determinar si su modelo de datos es adecuado para su uso con bases de datos particionadas.
IBM® Cloudant® for IBM Cloud® admite dos tipos de bases de datos:
- No particionado: el tipo por defecto. La base de datos asigna automáticamente los documentos a los fragmentos para equilibrar la carga de trabajo.
- Particionado: los ID de documento contienen una clave de partición especificada por la aplicación que afecta a cómo se asignan los datos a los fragmentos.
IBM Cloudant recomienda utilizar una base de datos particionada solo cuando el modelo de datos permita la partición lógica de los documentos en numerosas particiones (más de 500). Consulte Determinar la idoneidad de una base de datos particionada para saber si su aplicación puede utilizar bases de datos particionadas.
Desde el punto de vista de la aplicación, la diferencia clave entre una base de datos no particionada y una particionada es cómo se pueden consultar los datos:
- Una base de datos no particionada sólo permite crear y consultar índices secundarios globales.
- Una base de datos particionada permite crear y consultar índices secundarios tanto globales como particionados.
Este documento contiene más detalles sobre los casos de uso de cada tipo de índice.
Límites para bases de datos particionadas
Las bases de datos particionadas tienen límites en el número de índices y el tamaño total de todos los documentos con la misma clave de partición.
Las consultas por partición tienen un tiempo de espera forzado por el servicio más corto que las consultas globales y un límite menor en el total de documentos que pueden recuperarse en una sola consulta y un límite menor en el total de documentos que pueden recuperarse en una solicitud HTTP solicitud.
Consulte IBM Cloudant Límites para más detalles sobre estas restricciones.
Razones para utilizar una base de datos particionada
Las bases de datos particionadas son ideales cuando su aplicación se beneficia de la agrupación de documentos relacionados y necesita un rendimiento de consulta predecible y escalable.
Una base de datos particionada permite realizar consultas tanto a nivel de partición como globales. La consulta por partición aprovecha la ubicación conjunta de los documentos con una clave de partición determinada, lo que permite un rendimiento de consulta más eficiente y escalable una clave de partición determinada, lo que permite realizar consultas más eficientes y escalables. Para las cargas de trabajo que pueden expresarse en términos de una clave de partición, esto puede reducir significativamente la latencia de las consultas y disminuir los costes.
El particionamiento es especialmente valioso cuando su aplicación necesita un rendimiento predecible a escala predecible a escala. Las consultas basadas en particiones que hacen un uso eficaz de los índices siguen siendo rápidas incluso cuando el conjunto de datos crece índices siguen siendo rápidas aunque crezca el conjunto de datos, y pueden escalarse eficientemente hasta 64 fragmentos. Esto hace que las bases de datos particionadas sean idóneas para cargas de trabajo de alto rendimiento y baja latencia.
Normalmente, cuando el conjunto de datos requiere muchos fragmentos de base de datos, las aplicaciones utilizan consultas de partición para operaciones sensibles a la latencia, mientras que las consultas globales se reservan para tareas en las que el tiempo es menos crítico, como el procesamiento por lotes.
Razones por las que las bases de datos particionadas pueden no ser adecuadas
Las bases de datos particionadas requieren un cuidadoso modelado de datos y pueden requerir duplicar índices. Para muchos casos de uso, este esfuerzo adicional no compensa.
Aunque las bases de datos particionadas ofrecen ventajas de rendimiento cuando se utilizan adecuadamente, introducen restricciones que pueden no ajustarse a todas las cargas de trabajo. Debe definir una clave de partición significativa para sus aplicaciones que agrupe relacionados y que permita una consulta eficaz. Si cada documento tiene una clave única, o o si hay muy pocas claves de partición, es probable que las bases de datos particionadas funcionen que las bases de datos no particionadas.
Las consultas particionadas requieren la creación de índices particionados. Esto puede global y particionado, dependiendo de los patrones de acceso de su aplicación de su aplicación.
Determinar la idoneidad de una base de datos particionada
Ahora ya conoces las ventajas y desventajas de las bases de datos particionadas, el siguiente paso es saber si su modelo de datos funcionará bien con una base de datos particionada base de datos particionada.
Evalúe su modelo de datos y las necesidades de su aplicación en función de estos criterios para determinar la idoneidad de una base de datos particionada:
- Es esencial que la cardinalidad de las claves de partición sea alta: el número de claves de partición distintas debe ser mucho mayor que el número de fragmentos.
- La carga de las consultas debe distribuirse uniformemente: si la mayoría de las consultas se dirigen a una sola clave de partición, pueden crearse puntos calientes y degradar el rendimiento.
- Las claves de partición deben agrupar documentos relacionados: si cada clave se asigna a un solo documento, la partición ofrece pocas ventajas.
Ejemplos clave de particiones buenas y malas
Para fundamentar esto, veamos algunos casos de uso y algunas buenas y malas elecciones para una clave de partición.
| Caso de uso | Clave de partición | Bueno o malo | Razón |
|---|---|---|---|
| Sistema de comercio electrónico - pedidos | customer_id |
Good | La cardinalidad es alta y las consultas se reparten entre muchos clientes. |
| Sistema de comercio electrónico - pedidos | order_id |
Incorrecto | Un documento por partición; sin agrupación ni reutilización. |
| Sistema de comercio electrónico - pedidos | status |
Incorrecto | La baja cardinalidad de los valores de estado (provisional, pagado, reembolsado, cancelado) crea muy pocas particiones. |
| Sistema de comercio electrónico - pedidos | country_code |
Incorrecto | Baja cardinalidad; unos pocos países dominan el tráfico. |
| IOT - lecturas de sensor | device_id |
Good | Muchos dispositivos generan datos, distribuyendo la carga uniformemente. |
| IOT - lecturas de sensor | reading_id |
Incorrecto | Único por documento; las particiones sólo contienen un elemento. |
| IOT - lecturas de sensor | date |
Incorrecto | La mayoría de las consultas se centran en fechas recientes, lo que provoca puntos calientes. |
| IOT - lecturas de sensor | region |
Incorrecto | Unas pocas regiones pueden dominar el tráfico, provocando desequilibrios. |
Existen algunos casos de uso en los que no hay ninguna opción viable para una clave de partición. En estas situaciones, una base de datos sin particiones es la mejor opción. Por ejemplo, una base de datos de usuarios que almacena direcciones de correo electrónico, hashes de contraseña y fechas del último inicio de sesión. Ninguno de estos campos resulta adecuado como clave de partición, por lo que se debe utilizar, en su lugar, una base de datos no particionada.
Creación de bases de datos particionadas e índices
Debes decidir si quieres crear particiones en el momento de crear la base de datos. Al crear una base de datos, utilice el parámetro de serie de consulta partitioned para establecer si la base de datos se particiona o no. El valor
predeterminado para partitioned es false.
Del mismo modo, un índice puede ser global o particionado crear un índice utilizando el campo partitioned en su documento de diseño. Todos los índices índices del documento de diseño heredan el campo partitioned del documento de diseño del documento de diseño. Cuando se consulta un índice particionado, se utilizan consultas con ámbito de partición que incluyen la clave de partición a consultar en la petición.
El tipo de partición de un índice o de una base de datos no puede modificarse después de su creación.
Sólo se pueden realizar consultas a índices particionados. Del mismo modo, las consultas globales sólo pueden hacerse a índices globales.
Consultas
IBM Cloudant admite consultas globales y a nivel de partición. Para utilizar eficazmente ambos tipos, deben crearse índices distintos para cada ámbito de consulta para cada ámbito de consulta.
Las consultas globales funcionan bien en bases de datos con un número bajo de fragmentos (16 o menos), pero son menos adecuadas para operaciones sensibles a la latencia a medida que aumenta el número de fragmentos de fragmentos. Por el contrario, las consultas con partición escalan de forma eficiente con y son la opción preferida para aplicaciones que requieren un rendimiento un rendimiento predecible y de baja latencia para grandes conjuntos de datos.
Para beneficiarse de las consultas de partición, la mayoría de las consultas de aplicaciones deben dirigirse a claves de partición específicas. Esto permite a la base de datos aprovechar de la coubicación de documentos y ofrecer un rendimiento constante a escala.
Consulte Cómo afecta la fragmentación al rendimiento de la base de datos para obtener más información sobre cómo afectan las consultas globales y de partición al rendimiento de las operaciones de la base de datos.
Consultas globales
Puede realizar consultas globales utilizando:
La creación de un índice global es el valor predeterminado, pero puede crear explícitamente un índice global utilizando "options.partitioned": false en su documento de diseño:
{
"options": {
"partitioned": false
},
"views": {
"by-device": {
"map": "function(doc) { emit(doc.deviceID, doc.infrastructureID) }"
}
}
}
Consultas a nivel de partición
Puedes hacer consultas con partición usando:
Para crear un índice particionado que admita consultas particionadas, especifique "options.partitioned": true en el documento de diseño:
{
"options": {
"partitioned": true
},
"views": {
"by-device": {
"map": "function(doc) { emit(doc.deviceID, doc.infrastructureID) }"
}
}
}
Guías de aprendizaje de bases de datos particionadas
Las bases de datos particionadas pueden ser difíciles de entender en abstracto. Puede ver los conceptos en acción en estos dos ejemplos:
- Lea Crear un historiador IoT utilizando bases de datos particionadas para profundizar en las bases de datos particionadas con ejemplos en varios lenguajes de programación.
- Infórmate sobre las bases de datos particionadas y Node.js en este artículo del blog, que explica cómo crear una base de datos particionada, realizar búsquedas, utilizar vistas y crear un índice global.