sql >> Base de Datos >  >> RDS >> Mysql

Actualización de alto volumen de contadores Mysql

¿Ha dividido al cliente en una máquina separada del servidor? Ese es un primer paso menor en la escala.

¿Tiene consultas de replicación y de solo lectura enviadas a esclavos? Eso puede permitir una lectura ilimitada escalada. (Pero esto no aborda la pregunta de ACTUALIZACIÓN, aparte de aligerar la carga en el Maestro).

115 IOP en un solo disco giratorio prácticamente lo saturarán. innodb_flush_log_at_trx_commit tiene como valor predeterminado 1, lo que genera al menos 1 IOP por transacción. Algunas soluciones temporales (hasta que su tráfico crezca otras 10 veces)...

SSD, tal vez 1000 IOP.

Agrupe las actualizaciones (como las mencionadas por @N. B.) Esto reduce 100 veces el número de "descargas".

innodb_flush_log_at_trx_commit =2 -- para eliminar virtualmente las descargas (con cierta pérdida de seguridad).

Pero, incluso si puede hacer las ACTUALIZACIONES lo suficientemente rápido, ¿no necesita también leer los valores? Es decir, habrá contención. Cuántos SELECT en el mismo mesa estas haciendo? 100/seg podría estar bien; 1000/seg podría causar tanta interferencia que no funcionará.

¿Qué tan grande es la mesa? Para que todo esto funcione, debe ser lo suficientemente pequeño como para almacenarse en caché todo el tiempo.

Reddit es otro enfoque:capturar las actualizaciones allí. Luego extraiga continuamente los recuentos acumulados y realice las ACTUALIZACIONES necesarias.

Fragmentación:aquí es donde divide los datos en varias máquinas. La división en un hash o búsqueda (o una combinación de las dos) del ID de usuario es común. Luego, la ACTUALIZACIÓN debe averiguar qué máquina actualizar y luego realizar la acción allí. Si tiene 10 fragmentos (máquinas), puede mantener casi 10 veces la tasa de actualización. En última instancia, esta es la única forma en que todos los grandes pueden manejar más de 100 millones de usuarios y miles de millones de consultas por día.

PARTICIONAR no es probable que ayude. El código de eliminación de particiones aún no es lo suficientemente eficiente como para evitar demasiada sobrecarga para una consulta tan pequeña.