Suponga que en su aplicación web necesita hacer una serie de llamadas redis para renderizar una página, como obtener un montón de hashes de usuario. Para agilizar esto, puede terminar sus comandos de redis en una sección MULTI/EXEC, usando el pipeline, para evitar hacer muchos viajes de ida y vuelta. Pero también quiere fragmentar sus datos, porque tiene mucho de eso y/o desea distribuir escrituras. Entonces la canalización no funcionaría, ya que las claves diferentes podrían vivir en diferentes nodos, a menos que tenga una idea clara del diseño de datos de su aplicación y fragmento en función de las funciones en lugar de utilizar una función de control. Entonces, ¿cuáles son las mejores prácticas para fragmentar datos en diferentes servidores sin comprometer demasiado el rendimiento debido a que muchos servidores son contactados para completar un trabajo "conceptualmente único"? Creo que la respuesta depende de la aplicación web que se está desarrollando, y eventualmente haré algunas pruebas, pero sería útil saber cómo otros han lidiado con las concesiones que mencioné.redis sharding, pipelining y round-trips
Respuesta
MULTI/EXEC y la canalización son dos cosas diferentes. Puede hacer MULTI/EXEC sin ningún tipo de canalización y viceversa.
Si desea fragmentar y canalizar al mismo tiempo, debe agrupar las operaciones en la canalización por instancia de Redis y luego utilizar la canalización para cada instancia.
Aquí está un ejemplo sencillo usando Ruby: https://gist.github.com/2587593
Una forma de mejorar aún más el rendimiento es poner en paralelo el tráfico en los casos Redis una vez que las operaciones se han agrupado (es decir, que agrupe las operaciones, se le envía a todos instancias en paralelo, esperas las respuestas de todas las instancias).
Esto es un poco más complejo, porque se requiere un cliente no bloqueante asíncrono. Para un rendimiento máximo, C/C++ se debe utilizar en el lado del cliente. Esto se puede implementar fácilmente mediante el uso de hiredis + el bucle de evento de su elección.
- 1. Redis replication y redis sharding (clúster) diferencia
- 2. Redis en Heroku Sharding
- 3. Sharding y transacciones con MySQL
- 4. C++ Iterator Pipelining Designs
- 5. HTTP 1.1 Pipelining
- 6. Node.js http solicitud pipelining
- 7. NHibernate con Sql Azure y Sharding
- 8. Mongodb, sharding y múltiples servicios de Windows
- 9. En F #, ¿qué significa "pipelining"?
- 10. Redis y Memcache o solo Redis?
- 11. Auto sharding postgresql?
- 12. Sharding e índices
- 13. Emitir solicitudes múltiples utilizando HTTP/1.1 Pipelining
- 14. LuaSocket, Lua 5.2 y Redis
- 15. Redis y valores de consulta
- 16. Preguntas Redis y Node.js y Socket.io
- 17. Sharding por ObjectID, ¿es el camino correcto?
- 18. MySQL Partitioning/Sharding/Splitting: ¿qué camino tomar?
- 19. Sharding en el nivel de aplicación
- 20. replicación mongoDB + sharding en 2 servidores razonable?
- 21. redis: establecer una contraseña para redis
- 22. ¿Tiene sentido usar redis y mongodb?
- 23. Cómo implementar Redis Multi-Exec mediante Spring-data-Redis
- 24. MongoDB sharding, ¿cómo se equilibra al agregar nuevos nodos?
- 25. ¿El redis pub/submodelo requiere conexiones persistentes a redis?
- 26. Bibliotecas para partición de hash/Sharding con JPA
- 27. Mongo sharding no puede dividir una gran colección entre fragmentos
- 28. MongoDB v/s Redis
- 29. redis structure, performance
- 30. Redis DB exportación/importación
¡Gracias a un millón por la información, especialmente la cuestión de paralelizar el tráfico! – idrarig