Estoy trabajando en una aplicación que involucra una ejecución muy alta de consultas de actualización / selección en la base de datos.
Tengo una tabla base (A) que tendrá alrededor de 500 registros para una entidad por un día. Y para cada usuario en el sistema, se crea una variación de esta entidad basada en algunas de las preferencias del usuario y se almacenan en otra tabla (B). Esto lo realiza un trabajo cron que se ejecuta a la medianoche todos los días.
Entonces, si hay 10,000 usuarios y 500 registros en la tabla A, habrá 5 millones de registros en la tabla B para ese día. Siempre guardo los datos de un día en estas tablas y a medianoche guardo los datos históricos en HBase. Esta configuración funciona bien y no tengo problemas de rendimiento hasta ahora.
Últimamente ha habido algún cambio en los requisitos comerciales y ahora algunos atributos en la tabla base A (para 15-20 registros) cambiarán cada 20 segundos y en función de eso tengo que volver a calcular algunos valores para todos esos registros de variación en la tabla B para todos los usuarios. A pesar de que solo cambian 20 registros maestros, necesito volver a calcular y actualizar 200,000 registros de usuarios, lo que lleva más de 20 segundos y, para entonces, la próxima actualización se produce finalmente y todas las consultas de Select se ponen en cola. Recibo alrededor de 3 solicitudes de obtención / 5 segundos de usuarios en línea, lo que resulta en 6-9 consultas de selección. Para responder a una solicitud de API, siempre uso los campos de la tabla B.
Puedo comprar más potencia de procesamiento y resolver esta situación, pero estoy interesado en tener un sistema a escala adecuada que pueda manejar incluso un millón de usuarios.
¿Alguien aquí puede sugerir una mejor alternativa? ¿Nosql + base de datos relacional me ayuda aquí? ¿Existen plataformas / almacenes de datos que me permitan actualizar los datos con frecuencia sin bloqueo y, al mismo tiempo, me den la flexibilidad de ejecutar consultas seleccionadas en varios campos de una entidad?