¿Sugerencia de base de datos/lenguaje de secuencias de comandos para un proyecto que implica muchas inserciones? [cerrado]

Estoy investigando un proyecto que involucra una gran cantidad de inserciones diarias. Tendré una lista de usuarios (por ejemplo, un conjunto de usuarios de 500k), para lo cual necesito monitorear diariamente ciertas actividades asociadas con ellos.

Por ejemplo, que haya un conjunto de 100 usuarios, digamos U1,U2,...,U100

Necesito insertar sus puntajes diarios en mi base de datos.

Considere el puntaje total obtenido para un usuario U1 para el período del 30 de junio al 6 de julio, es el siguiente

June 30 - 99
July 1 - 100
July 2 - 102
July 3 - 102
July 4 - 105
July 5 - 105
July 6 - 107

La base de datos debe mantener puntajes diarios de cada usuario, como

Para el usuario U1,

July 1- 1pt (100-99)
July 2- 2pt (102-100) 
July 3- 0pt (102-102) 
July 4- 3pt (105-102) 
July 5- 0pt (105-105) 
July 6- 2pt (107-105) 

Del mismo modo, la base de datos debe contener detalles diarios del conjunto completo de usuarios.

Y en una fase posterior, preveo sacar informes agregados de estos datos, como el total de puntos obtenidos en cada día, semana, mes, etc. y compararlo con datos más antiguos.

Necesito comenzar las cosas desde cero. Tengo experiencia con PHP como script del lado del servidor y MYSQL. Estoy confundido en el lado de la base de datos? Dado que necesito procesar alrededor de un millón de inserciones diarias, ¿de qué se deben encargar todas las cosas?

¿Se ajusta MySQL a mis requisitos? Si es así, ¿qué motor de almacenamiento debería usarse? Inicialmente, imaginé crear una tabla de usuario con una identificación de usuario de clave externa y tablas de puntuación mensual con fechas como campos. Y luego recibí la sugerencia de escribir cosas en un csv/excel primero y luego cargarlas en la tabla después de un período particular.

¿La inserción de archivos hace que las cosas sean más favorables en este sentido?

¿O debería probar con otras bases de datos, métodos NoSQL?

Necesito mantener este almacén de datos y agregar esta información a informes semanales y mensuales. En un caso anterior, descubrí que las consultas de MySQL tardan mucho en ejecutarse.

Cualquier ayuda será muy apreciada. Gracias por adelantado.

Creo que obtendrías una mejor respuesta en DBA.SE. Aquí se trata más de cómo en lugar de qué (sí, tiene un componente qué, pero es limitado y muy específico para las bases de datos, por lo que el DBA tendría un mejor grado de experiencia disponible. Creo que también sería un tema allí, aunque he 't miró su lista sobre el tema últimamente.
Esto se parece más a un trabajo de registro/visualización de registros que a un trabajo de base de datos (muchas inserciones y ninguna selección, informes semanales).

Respuestas (1)

Para abordar su primer problema:

Tengo experiencia con PHP como script del lado del servidor y MYSQL. Estoy confundido en el lado de la base de datos?

Cuando estaba desarrollando en PHP, MySQL era la herramienta que usaba para administrar sus datos. Su aplicación lo usó para crear, leer, actualizar o eliminar (CRUD) registros/entidades/filas de información. Si su ISP le proporcionó una instancia/máquina virtual (vm)/motor de cómputo que usó su aplicación PHP, entonces esa herramienta a menudo se denomina motor de base de datos. Entonces, si entiendo correctamente su declaración, la base de datos que usó fue MySQL.

Con respecto a tu segundo problema:

¿Se ajusta MySQL a mis requisitos? Si es así, ¿qué motor de almacenamiento debería usarse?

En cuanto a qué base de datos, necesita funcionalidad segura para transacciones, alta capacidad y (dados sus registros diarios insertados) alta disponibilidad. MySQL, Oracle y Microsoft SQL son tres bases de datos ampliamente utilizadas. Están disponibles como implementaciones locales y en la nube. MySQL tiene sabores de motor de almacenamiento adecuados para esto, como su motor de base de datos en clúster. Con 500 000 usuarios que insertan 1 registro al día, se obtiene un promedio de 20 000 inserciones por hora. Si bien esta no es una tasa de inserción inusualmente alta, asumo que su picotasa de inserción será significativamente mayor. MS Sql y Oracle se adaptan bien a este entorno, pero generalmente requieren un nivel de conocimiento del administrador de la base de datos sobre su funcionalidad para aprovecharlas de manera efectiva. Habiendo dicho eso, siempre me han impresionado las capacidades computacionales de Oracle y MS Sql, aunque realmente no necesitas mucho de eso, solo una base de datos que pueda sumar columnas muy, muy rápido.

Tenga en cuenta que este requisito puede excluir ciertas soluciones de almacenamiento de datos en la nube que han establecido máximos de inserción. (Estos pueden superarse, pero deberá tener un conocimiento decente de la arquitectura de almacenamiento y las funciones de personalización).

Tengo un conocimiento mínimo de los entornos nosql, por lo que no puedo darle ninguna idea.

Como recomendación, dado que tiene algún conocimiento de MySql, sugeriría una exploración en profundidad de los problemas de rendimiento. Es posible que esté utilizando el motor de almacenamiento incorrecto para sus requisitos. Además, es posible que sus pruebas se hayan realizado en una instancia compartida, lo que significa que podría haber accedido al servidor junto con muchas operaciones de otros usuarios. Y si está utilizando una oferta de nivel inferior de las versiones MySql de su ISP, podría estar experimentando otros problemas relacionados con el servicio. Ya está en la curva de aprendizaje con MySql, por lo que puede encontrar y resolver cualquier problema rápidamente, en lugar de aprender un nuevo entorno operativo de base de datos.

¿Me sugieres InnoDB? teniendo en cuenta el enfoque de transacciones seguras.
Teniendo en cuenta sus requisitos, sí. Deberá leer sobre el procesamiento de transacciones para aprovechar las ofertas de ACIDity InnoDB.