2. Cache Es una memoria temporal de rápido acceso , donde se guardan valores de uso frecuente .
3. Qué tan efectivo será un cache ? Hit ratio: % de pedidos que se resuelven en el caché, sin tener que consultar la memoria principal. Te = HitRatio * Tcache ,+ (1 - HitRatio) * Tmemoria
4. Qué tan efectivo será un cache ? Te = HitRatio * Tcache + (1 - HitRatio) * Tmemoria Suponiendo Tmemoria constante (sino...) ... tenemos dos formas de mejorar Te Aumentar el HitRatio Disminuir Tcache
5. WWW: Dónde almacenar? - La RAM y el problema de persistencia en la web ... - por request... - por proceso... - IPC local ? - por servidor - Soluciones de memoria distribuida - Memcached, ehCached (sun), etc. - SQL Memory tables
6. WWW: Qué almacenar? - Resultados de queries SQL - Resultados parciales de queries SQL. - Contenidos de archivos - Objetos y colecciones de objetos - Páginas HTML ( Resultados de rendering ) - Páginas HTML parciales ( Resultados de rendering ) - Resultados de WebServices (fb) - ...
7. Nuestra experiencia: Qué almacenar - Resultados de queries - No es muy útil - Confiar en el caché de la DB (Query cache) - Tips: - texto del query exacto. - ajustar la variables de configuración
8. Nuestra experiencia: Qué almacenar - Resultados parciales de queries - Desnormalizar la DB - (ej. cantidad de comentarios de un post). - Excelentes resultados - Para actualizar: - No usar triggers (escalabilidad) - Mejor usar procesos batch
9. Nuestra experiencia: Qué almacenar - Páginas HTML - Proxy reverso - Páginas “muy dinámicas” -> sin caché! - entonces para qué?? ( M + T) Clientes Proxy Application Servers
10. Nuestra experiencia: Qué almacenar - Páginas HTML parciales - Widgets - !!! - (cada widget provee su key, por ejemplo ts>>3, o sessionID, Idioma)
11. Nuestra experiencia: Dónde almacenar - RAM : No escala (tenemos cientos de app servers, al principio teníamos 4 , con tiempo de M<50ms). - IPC local ...
12. Nuestra experiencia: Dónde almacenar - SQL Memory tables (heap) - Sencillo (misma interfaz) - No es tan rápido (3x 4x un query sin query cache) - Memcached - Distribuido y simple. Muchos binds. - Lento vs. soluciones comerciales?