Soy un desarrollador solitario para una empresa de telecomunicaciones, y estoy buscando algún consejo de diseño de bases de datos con cualquier persona con un poco de tiempo para responder.Se necesita asesoramiento en el diseño de bases de datos
Estoy insertando en una tabla ~ 2 millones de filas cada día, estas tablas se archivan y comprimen mensualmente. Cada tabla mensual contiene ~ 15,000,000 filas. Aunque esto está aumentando mes a mes.
Para cada inserción que hago arriba, estoy combinando los datos de las filas que pertenecen juntas y creando otra tabla "correlacionada". Esta tabla no se está archivando actualmente, ya que necesito asegurarme de que nunca me pierdo una actualización de la tabla correlacionada. (Espero que tenga sentido) Aunque, en general, esta información debe permanecer bastante estática después de un par de días de procesamiento.
Todo lo anterior funciona a la perfección. Sin embargo, ahora mi compañía desea realizar estadísticas con estos datos, y estas tablas se están volviendo demasiado grandes para proporcionar los resultados en lo que se consideraría un tiempo razonable. Incluso con los índices apropiados establecidos.
Así que supongo que después de todo lo anterior, mi pregunta es bastante simple. ¿Debo escribir un script que agrupe los datos de mi tabla correlacionada en tablas más pequeñas? ¿O debería almacenar los conjuntos de resultados de consultas en algo como Memcache? Ya estoy usando la memoria caché de MySQL, pero debido a que tengo un control limitado sobre cuánto tiempo se almacenan los datos, no funciona de manera ideal.
Las principales ventajas que puedo ver de usar algo como Memcache:
- Sin bloqueo en mi mesa correlacionada después de la consulta ha sido cobrado.
- Mayor flexibilidad para compartir los datos recopilados entre el recopilador de fondo y el procesador de entrada. (es decir, los informes personalizados pueden escribirse en el backend y los resultados de estos almacenados en la memoria caché bajo una clave que luego se comparte con cualquiera que desee ver los datos de este informe)
- Redundancia y escalabilidad si comenzamos compartiendo esta información con una gran cantidad de clientes.
Las principales desventajas que puede ver de usar algo como Memcache:
- de datos no es persistente si la máquina se reinicia/caché se vacía.
Las principales ventajas de utilizar MySql
- de datos persistentes.
- cambios en el código Menos (aunque añadiendo algo así como Memcache es trivial de todos modos)
Las principales desventajas del uso de MySql
- tiene que definir las plantillas de mesa cada vez que quiero para almacenar proporcionar una nueva conjunto de datos agrupados.
- Tiene que escribir un programa que recorre los datos correlacionados y rellena estas nuevas tablas.
- Potencialmente seguirá creciendo más lentamente a medida que los datos continúen llenándose.
Disculpas por una pregunta bastante larga. Me ayudó a escribir estos pensamientos aquí de todos modos, y cualquier consejo/ayuda/experiencia con este tipo de problema sería muy apreciado.
Muchas gracias.
Alan
Bienvenido a StackOverflow. Las preguntas largas generalmente son buenas, ya que tienden a mostrar algunas cosas importantes, 1) realmente te importa obtener una buena respuesta en lugar de 'dame el código' 2) tienden a tener todas (o al menos la mayoría) de la información necesario para responder con precisión a la pregunta, después de todo basura en == basura fuera. – UnkwnTech