2010-11-17 12 views
5

Estamos en el proceso de escalar una de nuestras aplicaciones web de un único servidor a una granja de servidores web. La aplicación actualmente utiliza el caché de tiempo de ejecución Http para almacenar en caché los datos de referencia para la aplicación. El dato es 'similar' al catálogo de productos:AppFabric Cache 'Design': ¿almacenamiento en caché de elementos individuales o colecciones?

  • categorías (es decir, Lista)
  • productos (es decir, Lista)

Como los datos se actualizan con muy poca frecuencia, también pre-calculamos algunas búsquedas

  • ProductsByCategory (es decir. Diccionario)

T Las colecciones están actualmente almacenadas en caché como objetos completos ... es decir, toda la lista/diccionario es get y put. Las colecciones se usan normalmente, ya que generalmente necesito rellenar listas desplegables/cuadros de lista/etc.

Los datos de referencia deben mantenerse sincronizados en todos los servidores de la granja de servidores. Ingrese AppFabric ...

  1. ¿Es nuestro modelo de caché anterior aún apropiado para el almacenamiento en caché de AppFabric? Los ejemplos que he encontrado parecen poner un elemento individual en la memoria caché en lugar de colecciones enteras (con 'regiones' se utilizan para operaciones de obtención masiva)

  2. ¿Cuál es la mejor manera, si es que lo hace, de mantener la referencia datos actualizados 'juntos' ... es decir, si las categorías se actualizan, necesito que los productos se actualicen para reflejar las últimas categorías.

Respuesta

2

El soporte para la operación tipo 'bulk put' es un poco, eh, limitado en este momento (léase: inexistente). Pero un poco de pensamiento sugiere que esto es probablemente correcto: si arrojas una colección de objetos en el caché, no sabría cómo darles claves o etiquetas significativas (más de las cuales en un momento). Usted podría falsificarlo con un método de extensión que aceptaba una colección de objetos y miraba tal vez una propiedad Name o Id en cada objeto para poner los objetos en la memoria caché, pero bajo las cubiertas todavía se reduciría a poner objetos en el caché uno a la vez.

Para obtener un conjunto de objetos de la memoria caché, sin embargo, existe otra opción para el método GetObjectsInRegion(regionname). Si, en el punto donde se inserta el objeto en la memoria caché, se agrega una etiqueta, p. para un producto, etiquetarlo con la categoría, más adelante puede recuperar todos los objetos para una etiqueta en particular con el método GetObjectsByTag. Lo mejor (creo) de usar etiquetas es que puedes poner cualquier cantidad de ellas en un objeto en la memoria caché, p. para un producto, puede etiquetarlo con la categoría, pero también con el proveedor y, por ejemplo, una banda de precios. Esto le da mucha más flexibilidad sobre cómo puede consultar sus elementos almacenados en caché: puede consultar por cualquier etiqueta individual, o puede realizar consultas Y/O con los métodos GetObjectsByAllTags/GetObjectsByAnyTag.

+0

Si bien es útil tener etiquetas de inclusión, ¿qué sucede si necesita búsquedas más avanzadas como>

1

Encontré este mismo problema yo mismo. Utilice la memoria caché local, use entidades individuales en una región y use las devoluciones de llamadas de notificación a nivel de región

Cuestiones relacionadas