MongoDB Single Database vers Collection por cliente frente a la base de datos por cliente

StackOverflow https://stackoverflow.com/questions/8307676

  •  25-10-2019
  •  | 
  •  

Pregunta

Quiero crear un servicio web usando MongoDB y Lithium. Qué es mejor:

  • Almacene los datos de todos los clientes en una sola colección (por ejemplo, todos los documentos de transacción de múltiples clientes en una transacciones de recopilación)

  • Cree múltiples colecciones, por ejemplo, transacciones_client1, transacciones_client2 etc.

  • Un db por cliente

El sistema debe ser escalable y debe ser fácil de implementar

¿Fue útil?

Solución

Para proporcionar dirección, uno tendría que saber mucho más sobre lo que desea lograr exactamente.

Sin embargo, descartaría la opción 2 (múltiples colecciones) porque realmente no veo ninguna ventaja de este enfoque: tendrá que determinar el nombre de la colección en tiempo de ejecución, es un poco más complicado escribir sus consultas y Hay un límite difícil en la cantidad de colecciones que puede tener (aproximadamente 1,5 millones de colecciones con 2 GB archivo del espacio de nombres)

La opción 1 puede ayudar a aislar a los clientes y puede mejorar la seguridad, pero aún existe el riesgo de errores de programación en la selección de la base de datos. Sin embargo, aislar ese código es fácil.

Ambas opciones tienen la desventaja que no puede consultar en todas las colecciones. Sin embargo, siempre querrá tener acceso a algunas colecciones que se comparten esencialmente en todos los clientes (por ejemplo, registros, estadísticas, etc.) para que tenga la carga adicional de separarlos.

Por eso yo normalmente Vaya a la opción 1.

Otros consejos

Sugiero comenzar desde una colección DB y una. Por lo general, es más simple administrar una base de datos. En el futuro, si necesita crear una base de datos separada (para acelerar algún cliente) puede vertedero Datos de este cliente y ponerlo en un servidor de base de datos separado (o simplemente en una recopilación separada). Simplemente tome esta función en la mente cuando diseñe la arquitectura de su aplicación. Entonces, mi opinión es Opción 1. Desde otro punto de vista, puede escalar con una colección a través de fragmentos y replicación.

El sistema debe ser escalable y debe ser fácil de implementar

Su base de datos será escalable solo porque está utilizando MongoDB, que fue diseñado para escalar. Y puede implementar fácilmente la base de datos porque es Skemaless. En general, es posible que necesite una copia simple de algunos datos de un servidor a otro. Hay muchas maneras de hacerlo: colección de copias, datos importación y exportación, Copiar base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top