La respuesta es, depende”.
Creo que el factor clave es qué tipo de aplicación es y quién es su público objetivo.
Por ejemplo, una aplicación de línea de negocio generalmente tiene una audiencia predecible, es decir, 200 usuarios / empleados. Es poco probable que necesite escalar rápidamente, y en muchos casos las aplicaciones LOB requerirán que modele un dominio complejo, y a veces esto es un poco más fácil con las bases de datos relacionales.
Por otro lado, si el back-end es para un sitio web público, uno que podría generar cantidades de tráfico grandes e impredecibles, entonces puede considerar usar alguna forma de NoSQL (si es posible), o si está usando una consideración relacional alojándolo en la nube, entonces, si la base de datos se está machacando, puede escalar verticalmente (tenga en cuenta que existen límites para el escalado vertical y el rendimiento no es lineal al costo, por lo que puede ser costoso).
- ¿Cuánto debo cobrar por el diseño gráfico independiente?
- Soy un adolescente y estoy interesado en el diseño industrial y el diseño de productos. ¿De qué maneras puedo aprender más sobre este campo?
- ¿Por qué las tarjetas de crédito son de ese tamaño?
- ¿Cómo decidimos qué forma de cabeza de tornillo usar en el diseño de un instrumento?
- ¿Cuál es la mejor manera de atraer tráfico a mi sitio Fiverr? Vendo mis servicios de diseño de camisetas y logotipos allí.
La alternativa para escalar bases de datos relacionales es utilizar una técnica conocida como fragmentación. Esto es esencialmente una partición horizontal de la base de datos. Le permitirá distribuir la carga en varias bases de datos, sin embargo, este enfoque es un poco más complicado de implementar y creo que es más difícil abstraer su lógica de negocios de la base de datos. Sin embargo, fragmentar le dará la capacidad de escalar más que de escalar. El uso de hardware comercializado y distribución horizontal es la forma en que la mayoría de las grandes empresas logran escalar en la web.
Debo señalar que tampoco hay ninguna razón por la que no puedas disfrutar lo mejor de ambos mundos. La persistencia políglota se refiere al uso de múltiples tecnologías de almacenamiento para el back-end. Por ejemplo, un db + NoSQL + xml relacional. Un ejemplo del mundo real sería usar una base de datos relacional para almacenar datos relacionales complejos y usar el NoSQL donde necesita rendimiento, es decir, lecturas rápidas.
Otras cosas a considerar:
- Si está creando prototipos, no importa tanto. Para los POC rápidos, me gustan los db NoSQL porque requieren menos esfuerzo. Sin embargo, también depende de la complejidad del modelo de datos.
- Almacenamiento en caché: ya sea utilizando NoSQL o relacional, el almacenamiento en caché puede mejorar drásticamente su rendimiento
- Optimización de consultas: preste atención a cómo crea sus consultas, puede tener un gran impacto en el rendimiento
- No tenga miedo de desnormalizar los datos. Durante mucho tiempo fue tabú no seguir las prácticas de normalización, pero en algunas situaciones está perfectamente bien desnormalizar algunos de sus datos en su base de datos relacional. Por ejemplo, podría tener tablas relacionales separadas para todas sus necesidades de escritura y luego replicar algunos de los datos en tablas de solo lectura para el rendimiento. Presenta cierta redundancia, pero reduce problemas como el bloqueo de la tabla, y también mejora el rendimiento de lectura si se diseña bien porque puede evitar combinaciones costosas. No dejes que los DBA te digan que es una mala idea. Puede ser muy útil a veces.