Cómo usar el almacenamiento en caché con Azure Cosmos DB

Seminario web grabado
Por Ron Hussain y Sam Awan

Azure Cosmos DB es un multimodelo basado en la nube distribuido globalmente NoSQL database Servicio. Es muy popular NoSQL database servicio para aplicaciones de alta transacción debido a su simplicidad de implementación y los sólidos SLA de Microsoft.

Puede escalar aún más CosmosDB con NCache. NCache estar en la memoria significa que es súper rápido. Y, NCache estar distribuido significa que puede escalar linealmente. También, NCache se encuentra mucho más cerca de su aplicación y, por lo tanto, es mucho más rápido de acceder. Aprenda a incorporar el almacenamiento en caché distribuido en su aplicación de Azure Cosmos DB mediante NCache.

En este seminario web, aprenda cómo mejorar el rendimiento de Azure CosmosDB con NCache.

Este seminario web cubre:

  • Introducción a Azure Cosmos DB y sus operaciones comunes
  • Almacenamiento en caché de datos CRUD en la aplicación Azure Cosmos DB mediante NCache
  • Manejar el almacenamiento en caché de las colecciones
  • Administración de la sincronización de caché con Azure Cosmos DB
  • Ejemplos prácticos y demostraciones a lo largo

El tema de hoy será acelerar Microsoft Azure Cosmos DB con la ayuda de NCache. NCache es nuestro principal producto de almacenamiento en caché distribuido en Alachisoft. Puede usarlo dentro de .NET, .NET Core o aplicaciones Java o cualquier otra aplicación general y puede mejorar el rendimiento, la escalabilidad y la confiabilidad de su aplicación. Hoy hablaremos sobre las opciones de almacenamiento en caché que puede utilizar junto con Azure Cosmos DB. Porque Cosmos DB también se está volviendo muy popular. es muy importante NoSQL database. Entonces, he alineado algunos ejemplos prácticos para que comiencen a almacenar en caché con Cosmos DB y usar NCache como un producto de ejemplo para eso. Entonces, creo que todo se ve bien. Entonces, comencemos rápidamente y si hay alguna pregunta mientras presento diferentes funciones, no dude en detenerme y publicar todas las preguntas que necesite y Sam estará atento a esas preguntas y las responderemos. abajo de la línea.

Introducción a Azure Cosmos DB

Las primeras diapositivas son diapositivas bastante básicas sobre la introducción a Microsoft Azure Cosmos DB. Estoy bastante seguro de que todo el mundo sabe qué es Azure Cosmos DB. Pero solo por el bien de la integridad, es una base de datos multimodelo distribuida globalmente. Entonces, puedes usarlo en cualquier lugar. Es un servicio de base de datos alojado totalmente administrado dentro de Microsoft Azure y es una base de datos multimodelo. Básicamente, eso significa que puede usar el valor clave, puede usar la familia de tablas, puede usar la API SQL, hay un conector MongoDB y luego hay una API Gremlin también para gráficos. Por lo tanto, le brinda muchas formas diferentes en las que, usándolas, puede usar Cosmos DB dentro de su aplicación como base de datos.

Entonces, es esencialmente un NoSQL database pero Microsoft afirma que es una base de datos multimodelo. Entonces, es un poco más que NoSQL database en ese particular sentido. Por lo tanto, es una base de datos multimodelo según la definición y es muy flexible y fácil de implementar porque es un servicio de base de datos completamente administrado. Entonces, solo necesita usar los paquetes NuGet dentro de su aplicación y apuntar a su instancia de Cosmos DB en Microsoft Azure. Si se trata de una aplicación local, aún puede conectarse a Microsoft Azure Cosmos DB y está respaldado por SLA completos de Microsoft. Por lo tanto, está completamente administrado, por lo que no tiene que preocuparse por ninguna implementación ni por ningún otro problema. Admite un formato JSON muy flexible. Por lo tanto, puede utilizar datos de documentos no estructurados. Simplemente puede crear un documento usando el formato JSON y luego enviarlo a Cosmos DB y luego eso es lo que recupera. Por lo tanto, es muy flexible, muy fácil de usar, se necesita menos código para comenzar con esto y es muy popular en las aplicaciones transaccionales. Puedes tener tus aplicaciones web usándolo. Estos podrían ser servicios web, microservicios, aplicaciones de servidor back-end. Cualquier tipo de aplicación puede utilizar Microsoft Azure Cosmos DB, si es necesario procesar y manejar una gran cantidad de datos dentro de sus aplicaciones.

Aquí hay un diagrama que nuevamente habla de tabla, SQL, JavaScript, Gremlin, Spark. Entonces, los diferentes conectores que puede utilizar y luego el más común es el valor clave. Luego hay una familia de columnas, documentos con documentos anidados y luego Gremlin para gráficos también. Por lo tanto, puede almacenar gráficos.

msdn-diagrama

Entonces, es algo que también se distribuye globalmente. En Microsfot Azure puedes tener varios centros de datos. También puede tener varias particiones. Entonces, todas las cosas buenas que vienen con Microsoft Azure Cosmos DB.

Casos de uso comunes de Cosmos DB

Algunos de los casos de uso comunes. Puede usarlo en IoT y telemática para ingerir, procesar y almacenar una gran cantidad de datos y, por lo general, si se trata de aplicaciones con muchas transacciones en esta industria en particular, puede usar Cosmos DB y no tiene que preocuparse por administrar esa cantidad de datos y gestionar esa cantidad de solicitudes también. Marketing regional para almacenar información de catálogo, abastecimiento de eventos, procesamiento de pedidos, juegos donde el nivel de la base de datos es un componente crucial. Por lo tanto, puede tener múltiples aplicaciones de juegos que utilizan o puede haber diferentes jugadores interactuando entre sí. Información del torneo, tablas de clasificación de puntaje alto e integración de redes sociales para el caso.

Aplicaciones web y móviles, ese podría ser otro caso de uso para ello. Las aplicaciones sociales podrían ser otro ejemplo de integración con servicios de terceros. Por lo tanto, puede utilizarlo en casi cualquier aplicación que necesite manejar una gran cantidad de datos, procesar la ingesta y almacenar una gran cantidad de datos. Entonces, Cosmos DB podría ser una opción preferida para ello. Ahora, creo que esto es bueno, detalle en términos de introducción. Por favor, hágamelo saber si hay alguna pregunta.

El enfoque de hoy es cuáles son los requisitos para el almacenamiento en caché, ¿verdad? ¿Y por qué necesita el almacenamiento en caché? Y para eso, hay dos problemas con Microsoft Azure Cosmos DB y esto se basa en la prueba de rendimiento que hemos realizado y en las estimaciones de costos por unidad de solicitud que hemos realizado.

Problemas con Azure Cosmos DB

Por lo tanto, existen principalmente dos problemas con Microsoft Azure Cosmos DB.

Cuello de botella de rendimiento

El número 1 y el más crucial es el cuello de botella de rendimiento. Microsoft Azure afirma que Cosmos DB le dará un tiempo de respuesta de milisegundos, ¿verdad? Y eso es bastante cierto también según los resultados de nuestras pruebas, pero ¿qué pasa si necesita respuestas de menos de milisegundos? porque con NCache dentro de nuestras pruebas locales, incluso un caché local, no estamos hablando de particiones diferentes o tener múltiples servidores que alojan los datos del caché, incluso un caché local también podría estar en la red, puede obtener respuestas de menos de milisegundos y según nuestro comparaciones con las que probamos Cosmos DB NCache.

Por lo tanto, la diferencia de rendimiento es enorme cuando compara Microsoft Azure Cosmos DB con NCache. Entonces, de segundos a milisegundos y de milisegundos a tiempos de respuesta de submilisegundos, puede ver que Cosmos DB necesita mejoras de rendimiento. Principalmente, una vez que lo analizamos un poco más, se debe principalmente al hecho de que dentro de su aplicación, cuando continuaría e implementaría en producción, su Microsoft Azure Cosmos DB es un servicio alojado. Por lo tanto, siempre estaría en VNET en su propia suscripción. Podría permitir parte de su suscripción y le cobran en función de la unidad de solicitud, pero está alojada en Microsoft Azure y su aplicación, si ya está alojada en una red virtual, si pasa por VNET, ahí es donde tiene que tener el costo de la red. agregado a él y eso también aumenta la parte de latencia.

Entonces, ese es uno y, en segundo lugar, si sus aplicaciones están en las instalaciones, sus aplicaciones también serán más lentas. Entonces, inicialmente hablé sobre la comparación básica entre Cosmos DB y NCache. NCache ya es más rápido porque está en la memoria y le brinda respuestas de submilisegundos en comparación con milisegundos y luego, además, cuando realmente lo implementaría y sus aplicaciones se alojarán en la nube. Cosmos DB de Azure va a estar a través de VNET y de la comunicación de VNET a VNET, hay una latencia significativa que podría entrar en juego y si tiene particiones múltiples y luego tiene dos centros de datos y los datos van y vienen y si terminan yendo a otra partición u otro centro de datos, las cosas serían más lentas en comparación y luego en las instalaciones. Ese no es un caso de uso muy común, donde las aplicaciones locales usan Microsoft Azure Cosmos DB, pero si ese es el caso, debe atravesar la WAN para acceder a Cosmos DB. Entonces, esa no es una opción muy rápida.

Entonces, ese es el problema número uno que Microsoft Azure Cosmos DB no está muy bien implementado en términos de rendimiento. Por lo tanto, su rendimiento se verá degradado específicamente en condiciones de alta transacción. Cuando recibe muchas solicitudes y necesita manejar esos datos de manera rápida y oportuna. Por lo tanto, puede ocasionar una degradación del rendimiento y la solución es muy simple, que cubriremos en la siguiente diapositiva en la que comienza a usar un sistema de almacenamiento en caché como NCache.

Unidad de solicitud costosa

El problema número dos es la unidad de solicitud costosa y eso es algo que te perjudica en dólares. Entonces, cada unidad de solicitud tiene un costo. Cada vez que accede a Microsoft Azure Cosmos DB, incluso para los datos de solo lectura. Si esos datos no se cambian con tanta frecuencia, es el mismo contenido, pero aún tiene la fuente maestra que proviene de Cosmos DB, esos son los datos que está buscando. Para esos datos, debe seguir yendo y viniendo a Microsoft Azure. Cosmos DB y ahí es donde paga en términos de unidad de solicitud y eso aumenta su costo. Por lo tanto, los costos aumentarían si aumenta la carga de solicitudes. Por lo tanto, es muy escalable, en cuanto a la carga de solicitudes que puede manejar, pero no será muy rentable en ese escenario. Por lo tanto, también afectará el factor de costo. Por lo tanto, podría ser un obstáculo potencial para escalar. Cuando planea escalar horizontalmente. Tiene múltiples particiones, su carga de datos aumenta, pero el factor de costo aumenta junto con eso.

Por lo tanto, es posible que deba considerar estos dos problemas cuando se trata de Microsoft Azure Cosmos DB.

La solución: NCache Caché distribuida

La solución a estos problemas es muy simple que utiliza un sistema de almacenamiento en caché distribuido como NCache. Ante todo, NCache está en la memoria. Entonces, todo lo que almacenas en NCache se almacenará en la memoria en comparación. Entonces, le brindará algunas mejoras de rendimiento de milisegundos de inmediato y luego hemos hecho una comparación entre Cosmos DB que se ejecuta en localhost, en la misma máquina y NCache corriendo en la misma máquina, NCache fue un factor más rápido. Fue mucho más rápido en comparación. Fue en submilisegundos en comparación con las respuestas de milisegundos para el mismo conjunto de datos.

En segundo lugar, también se puede alojar dentro de su aplicación de red y se puede usar además de Cosmos DB. No es un reemplazo de Cosmos DB. En este seminario web en particular, explicaré diferentes enfoques en los que puede usar Cosmos DB junto con NCache y NCache va a ser un producto de ayuda, en el que almacenará en caché la mayoría de sus datos y se asegurará de ahorrar costosos viajes a Cosmos DB en términos de costo y rendimiento. En segundo lugar NCache es un clúster de caché distribuido. Por lo tanto, puede escalar en consecuencia. La alta disponibilidad está integrada y también es muy confiable porque hay una cantidad de servidores y cada servidor también tiene una copia de seguridad en otro servidor y aquí hay un diagrama de implementación que ayuda a respaldar esto.

despliegue-arco

Puedes tener cualquier tipo de aplicación ASP.NET o ASP.NET Core aplicaciones web .NET o .NET Core servicios web y luego, de manera similar, cualquier otra aplicación de servidor, incluso aplicaciones Java. Anteriormente, si usaban Cosmos DB en la nube o sus aplicaciones estaban en las instalaciones o todo estaba en la nube, puede introducir un nivel de almacenamiento en caché en las mismas líneas. En Microsoft Azure solo puedes usar NCache en Azure usando .NET o .NET Core instalación. esta disponible en Microsoft Azure marketplace también y luego puede formar un clúster de caché y lo bueno de NCache es que se ubicará dentro de su propia VNET. Por lo tanto, la latencia de la red se mitigará por completo. Entonces, eso ya no es un problema y, además, NCache está en la memoria.

¿Entonces NCache ya es muy rápido en comparación. Por lo tanto, el rendimiento mejorará de inmediato y para sus aplicaciones locales, puede seguir NCache en las instalaciones también y Cosmos DB aún puede residir en la nube de Microsoft Azure y eso cambiaría todo en términos de rendimiento. En términos de unidades de costo, puede almacenar todos sus datos. Como puede ver, el 100% del tráfico se puede enrutar a NCache y eso, a su vez, ahorraría costosos viajes a Microsoft Azure Cosmos DB y, tan pronto como ahorraría viajes a Cosmos DB, eso lo ayudaría en términos de ahorro de costos porque la unidad de solicitud disminuiría. En comparación, tendría menos espacio para la unidad de solicitud y tendría menos costos asociados con el acceso y el uso de Microsoft Azure Cosmos DB. Solo el 20 % o incluso menos del tráfico puede ir a Microsoft Azure Cosmos DB y hablaremos sobre estas opciones de almacenamiento en caché que ayudarían a beneficiar a sus aplicaciones.

Así que, por favor, hágamelo saber, si hay alguna pregunta. Hemos creado algunos detalles básicos sobre por qué debería considerar usar un producto como NCache para mejorar su aplicación. Lo siguiente de lo que voy a hablar será un caso de uso común de NCache y luego tendremos algunas muestras, que me gustaría demostrar. Por lo tanto, hágamelo saber si hay alguna pregunta en este momento. Asumiendo que no hay preguntas en este punto. Entonces, voy a continuar.

Usos comunes de NCache

Algunos de los casos de uso comunes. Inicialmente hablamos sobre casos de uso en toda la industria. Entonces, todas estas aplicaciones pueden usar NCache así como. Como una cuestión de hecho, NCache tiene un conjunto más grande de clientes, variedad de clientes, que están usando NCache. Entonces, podría ser comercio electrónico, podría ser banca, podría ser financiero, podría ser automatización, podría ser IoT, sector de telecomunicaciones. Entonces, cada sector tiene potencial de NCache porque puedes utilizar NCache normalmente en todas las aplicaciones que tratan con datos. Necesitan rendimiento, necesitan escalabilidad, necesitan alta disponibilidad y confiabilidad y están lidiando con estos problemas. Por lo tanto, son los principales candidatos para NCache. Pero en lo que respecta a los casos de uso técnico, puede utilizar NCache para el almacenamiento en caché de datos de la aplicación.

Almacenamiento en caché de datos de aplicaciones

Entonces, el primer caso de uso es el almacenamiento en caché de datos de la aplicación. En Microsoft Azure Cosmos DB, tiene Cosmos DB como fuente principal. Ahí es donde existirían la mayoría de sus documentos o todos ellos y luego algunos o todos pueden ser llevados a NCache para un acceso más rápido. Entonces, para mejorar los resultados y disminuir el efecto de la unidad de solicitud en su aplicación, puede tener diferentes tipos de enfoques de sincronización, que también trataré en este seminario web. Entonces, ese es nuestro caso de uso más común con respecto a las bases de datos relacionales, así como también con respecto a Cosmos DB.

Ron, tengo una pregunta para ti y la pregunta es cómo el mismo Cosmos DB con NCache, cambia con NCache? Está bien, acabo de hablar de eso. Entonces, tenemos un segmento preparado para esto. Tenemos un mecanismo dentro de Microsoft Azure Cosmos DB. Utiliza cambio de alimentación. Hay un patrón de observador. Por lo tanto, le permite administrar las adiciones y actualizaciones y realiza un seguimiento de esas adiciones y actualizaciones en la fuente de cambios. Entonces, tengo dos enfoques que se alinean en este seminario web, donde hablaré sobre cómo usar esas notificaciones de cambio de fuente para ayudar a aplicar esos cambios en NCache así como. Entonces, tan pronto como hubiera un cambio, la base de datos de Cosmos DB se aplicaría automáticamente en NCache así como. Entonces, eso es algo que he alineado en una de las demostraciones de hoy.

Caché de sesiones y SignalR Backplane

Algunos otros casos de uso también. Disponemos de ASP.NET y ASP.NET Core Las aplicaciones web también pueden usar NCache para sesiones, para SeñalR, para el almacenamiento en caché de respuestas, ver el estado y el caché de salida y luego NCache también es una plataforma de mensajería. Puedes usar Mensajes de publicación/suscripción. SignalR está respaldado por mensajería Pub/Sub. Tenemos eventos basados ​​en datos, tenemos eventos Pub/Sub y también tenemos eventos de consulta continua. Asi que, NCache se puede utilizar como bus de mensajes, como plataforma de mensajes y plataforma de intercambio de datos.

Demostración práctica

Muy bien, le mostraré rápidamente cómo comenzar con NCache. Entonces, solo creamos un caché y luego hablaremos sobre diferentes enfoques. ¿Cómo hacer el almacenamiento en caché y cómo empezar con esto? Entonces, algunos ejemplos básicos, luego, en realidad, construiremos sobre ellos y le mostraremos cómo usar la sincronización y cómo administrar las colecciones y las actualizaciones.

Entonces, antes que nada, voy a comenzar con mi entorno de demostración. NCache se puede alojar tanto en las instalaciones como en Microsoft Azure Cloud. La opción de implementación preferida para NCache es VM y tenemos una herramienta de administración basada en la web, que le permite administrar las cajas de Windows y las cajas de Linux. Entonces, con la ayuda de .NET Core puedes instalar NCache en Linux también. Entonces, depende completamente de ti. Ya sea que desee mantener su caché en VM en Windows o en el lado de Linux. Estoy usando cajas de Windows. Entonces, sigamos adelante y creemos un caché. Entonces, primero que nada, voy a crear.

Para crear

Voy a iniciar este asistente aquí mismo. Llamaré a mi caché Democache.

democaché

Mantendré todo predeterminado y los detalles sobre estas configuraciones están disponibles en nuestra documentación, así como en nuestros otros seminarios web, que se centran más en NCache arquitectura. Por lo tanto, mantendré el caché de réplica particionado. Ese es el más preferido.

réplica particionada

Replicación asíncrona entre la partición activa y la copia de seguridad de esta. Si hay dos servidores, el servidor uno tendría respaldo en dos y el servidor dos tendría respaldo en uno. Por lo tanto, el mantenimiento de esa copia de seguridad puede ser síncrono o asíncrono según las solicitudes que ingresen. Entonces, elegiré asíncrono porque también es muy rápido y preferido. Entonces, voy a especificar dos servidores, que alojarán mi caché.

cache-particionado

NCache ya está instalado. Estas son cajas de Windows. Mantendré todo predeterminado en cuanto a la configuración de TCP/IP, NCache es un protocolo basado en TCP/IP. Entonces, necesita una dirección IP y un puerto para comunicarse entre sí y lo toma desde allí y luego mantendré todo predeterminado en la pantalla también e iniciaré este caché al finalizar.

acabado

Entonces, esto se configura y se inicia de inmediato y llevará algún tiempo y crearía automáticamente el caché y tengo mi emulador de Azure Cosmos DB aquí. Estoy usando una implementación localhost de la misma. Tengo dos almacenes de documentos aquí, clientes y arrendamientos.

documentos

Arrendamientos es nuevamente para la sincronización a través de la fuente de cambios. Hablaré de ello en breve o en un momento posterior cuando hablemos de sincronización. Entonces, cliente, es un almacén básico de documentos de la tienda de clientes donde tenemos diferentes clientes. Si hago clic en los clientes, puede ver que tengo clientes con el nombre, ID, dirección, ciudad y país, y estos son los que voy a manipular a lo largo de esta demostración.

{
   "id": "Customer:CustomerID:TRAIH",
   "CustomerID": "TRAIH",
   "CompanyName": "Trail's Head Gourmet Provisioners",
   "ContactName": "Helvetius Nagy",
   "Address": "722 DaVinci Blvd.",
   "City": "Kirkland",
   "Country": "USA",
   "_rid": "Xpd7ANtwbZjSAAAAAAAAAA==",
   "_self":"dbs/Xpd7AA==/colls/Xpd7ANtwbZI=/docs/Xpd7ANtwbZjSAAAAAAAAAA==/",
   "_etag":"\"00000000-0000-0000-1649-a9a8daaa01d5"
   "_attachements": "attachements/"
   "_ts":1559153371
}

Entonces, volviendo aquí, mi caché está completamente iniciada. Puedo verificar esto y ver los detalles y puedo agregar mi caja como cliente. Ese es un paso opcional. Si está utilizando el paquete NuGet, puede omitir este paso, pero lo haré por la facilidad de uso. Entonces, simplemente agregaría todo desde el administrador de GUI, así que tengo la configuración poblada en mi máquina cliente. Creo que estamos bien. Haré otra cosa. Abriré la ventana de estadísticas y también abriré las herramientas de monitoreo que vienen instaladas con NCache. Estos me dan contadores de rendimiento y estas ventanas son NCache herramientas de monitoreo, vea un poco de los aspectos de monitoreo de NCache también y luego abriré una ventana de PowerShell y luego ejecutaré una aplicación de herramienta de prueba de estrés, que viene instalada con NCache y justo después de esto, hablaremos sobre la aplicación de muestra, que he preparado para Cosmos DB. Esa es la herramienta que simulará una carga ficticia en mi clúster de caché y tan pronto como llegue, debería poder ver alguna actividad. Un cliente está conectado.

salud del clúster

Y debería ver solicitudes por segundo apareciendo, mostrando también algo de actividad y, de hecho, puedo iniciar sesión en este cuadro aquí mismo, mostrarle esto desde una máquina diferente para que podamos obtener una vista más rápida de esto. Muy bien, puedes ver la actividad aquí. Creo que la herramienta GUI no puede actualizarse. Creo que hay algunos problemas de permisos. Sin embargo, puede ver cómo se actualiza el recuento y luego puede ver las solicitudes por segundo y eso es todo lo que necesitamos para esta demostración en particular.

statistics

Almacenamiento en caché de datos de aplicaciones con Azure Cosmos DB

Entonces, estoy listo para ir con la aplicación de muestra. Hablaré rápidamente sobre el caso de uso de almacenamiento en caché de datos de la aplicación y, como parte de eso, también explicaré cómo funciona mi aplicación de muestra y luego iremos paso a paso a depurar la aplicación de muestra y le mostraré los comandos. que he integrado para comenzar con el almacenamiento en caché. Es un programa muy sencillo y básico. Es un hola mundo inicialmente y luego progresa desde allí.

Entonces, tenemos almacenamiento en caché de datos de aplicaciones. Lo primero que debe hacer es tratar con datos de referencia. Datos que no cambian con tanta frecuencia y también podrían ser datos transaccionales, que están cambiando y para eso tengo un segmento separado alineado, pero para datos de referencia, se tratará principalmente con lecturas, ¿verdad? Por lo tanto, primero debe conectarse a Cosmos DB y luego conectarse a NCache. Debe realizar operaciones de obtención y luego también debe realizar operaciones de actualización. Dentro de las operaciones de obtención, puede almacenar en caché un solo documento o una colección de documentos y luego, dentro de la actualización, puede agregar, actualizar y eliminar documentos. Entonces, estos son los fragmentos de código y se resaltarán aquí.

//Add NCache Nuget and Include Namespaces  	
using Alachisoft.NCache.Client;
using Alachisoft.NCache.Runtime.Caching;

//Add Cosmos DB Nuget and Include Namespaces
using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
...
{	
	//NCache Connection call 	
	static ICache _NCacheClient = CacheManager.GetCache("DemoCache");

	//Cosmos DB Connection call
	static DocumentClient _CosmosDbClient = new DocumentClient(
		serviceEndpoint: new Uri("https://localhost:8081"),
		authKeyOrResourceToken:@"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==");
}...

Entonces, dentro de mi CRUD NCache Aplicación de muestra de Cosmos DB, tengo diferentes casos, diferentes casos de prueba. Entonces, antes que nada, continuaría y proporcionaría el nombre del caché, que es DemoCache. No distingue entre mayúsculas y minúsculas y luego tengo algunas configuraciones de conexión de Cosmos DB. Estoy usando el cliente SQL, como ejemplo para esto porque es el más relevante desde el punto de vista de los ejemplos que he elegido. Pero puede crear cualquier cliente de Cosmos DB y aún así poder usar NCache porque el NCache La API es bastante sencilla. Puede obtener la respuesta, que podría ser un objeto JSON y puede almacenarlo en caché, usando NCache API y dentro NCache también tenemos diferentes formas de interactuar con el caché. Por lo tanto, puede elegir entre ellos, pero la idea de almacenamiento en caché sigue siendo exactamente la misma.

Bien. Entonces, dentro de mi Cosmos DB, si viene aquí, dentro de esto puede ver la URL, la clave principal, las cadenas de conexión. Entonces, estas son las configuraciones que necesita especificar aquí y luego puede abrir una conexión. Entonces, así es como obtienes un identificador de caché "_cache", interfaz ICache, correcto. Si le muestro esto, esto también le brinda algunas de las API de administración, ¿verdad? Permítanme, está bien y la clase CacheManager también, le brinda una colección de caché. Tiene ICache, CacheHealth y algunos otros métodos StartCache y StopCache para el caso. Una vez que esté conectado a esto, lo primero que debe hacer es simplemente buscar un elemento de caché, correcto, buscar algunos documentos de Cosmos DB y luego también almacenarlos en caché. Pero como estamos usando NCache en el medio, entonces, nuestra aplicación debe diseñarse de tal manera que siempre debe verificar primero en el caché y así es como también ahorraría viajes costosos a Cosmos DB y esto es exactamente lo que está sucediendo en nuestro caso uno derecho aquí.

Lo que realmente estamos haciendo es obtener una identificación de cliente que planeamos obtener. Podría ser una identificación de cliente, una búsqueda basada en la identificación del cliente y, en primer lugar, haré una llamada "_cache.Get" y proporcionaré una clave. La clave es algo que se define en NCache. NCache almacena todo en un par de valores clave. Por lo tanto, la clave podría ser el cliente, la identificación del cliente podría estar en el parámetro de tiempo de ejecución y luego, si encuentra datos en el caché, no tiene que ir a Cosmo DB. Puedes volver desde este punto. Si no lo hace, siempre ejecuta la API de Cosmos DB. Por ejemplo, en este caso, obtiene una respuesta utilizando Cosmos DB "_client.ReadDocumentAysnc" y al proporcionar todos los detalles, por ejemplo, CollectionID y la clave, y en función de eso, obtendría registros de Cosmos DB y luego también los almacenaría en caché. Esto es para asegurarse de que la próxima vez ya tenga los datos en el caché.

Entonces, ejecutaré la muestra sin depurar por primera vez. Muéstrele todos los casos de prueba y luego revisaremos estos casos de prueba uno por uno y le demostraré que así es como va a funcionar. Por favor, hágamelo saber, si hay alguna pregunta?

Entonces, voy a agregar un cliente. Digamos que solo proporcionaré a Ross123, presionaré enter y luego revisará un cliente, nuevamente puedo dar a Ross123 y puede ver que creó un cliente ficticio Ross123 con el nombre de contacto, agregó la fecha y la hora a eso .

cmd

Puedo buscar otros clientes, que ya están en Cosmo DB también. Entonces, entendió eso y, en base a eso, mientras hacemos esto, debería poder ver dos elementos en el caché Ross y ALFKI ya agregados en el caché.

contar

Entonces, puedo seguir haciendo esto. Puedo actualizar este cliente. Por ejemplo, Ross123. No está tomando ningún parámetro. Simplemente está actualizando el valor de fecha/hora. Entonces, si presiono esto nuevamente, ahora puede ver 14:27:13 en comparación con 14:26:37. Entonces, actualizó esto en el caché y también en Cosmos DB y si les muestro esto aquí, puedo mostrarles rápidamente el cliente actualizado en el panel Explorer y tiene el valor actualizado. Entonces, se trata de estas dos fuentes una al lado de la otra. Puedo eliminar este cliente también. Puedo ver al cliente basado en realidad, déjame deshacerme de estos puntos de ruptura. De acuerdo, me dará todos los clientes, si llego a 5 y luego si llego a 6, obtendrá clientes según un país.

Entonces, lo primero que quería resaltar es obtener un cliente de la memoria caché usando Cosmos DB y NCache, almacenando en caché un solo documento. Entonces, repasemos esto rápidamente.

Customer GetCustomer (Customer customer) 
{	
	string key = $"Customer:CustomerID:{customer.customerID}"; 
	//Check data in NCache first
	Customer customer = _NCacheClient.Get<Customer>(key);

	if (customer != null) 
	{
		return customer;
	}
	//If data is not in NCache then get from Cosmos DB and Cache it
	else
	{
		ResourceResponse<Document> response =
		_CosmosDbClient.ReadDocumentAsync(UriFactory.CreateDocumentUri (DatabaseId,CollectionId,key)).Result;
		customer = (Customer)(dynamic)response.Resource;
		_NCacheClient.Insert(key, customer);
		return customer;

No voy a mostrar agregar en este punto porque ya es muy simple. Entonces, voy a presionar reproducir, llego a este punto de quiebre y antes de hacer esto, hago cambios. Voy a seguir adelante y borrar el contenido. Entonces, que empiezo de nuevo. Bueno. Entonces, los contenidos son cero en ambos servidores. Eso es lo que se espera. Entonces, vamos a golpear esto. Está en el punto de quiebre, a la derecha. Entonces, notará rápidamente que está esperando que busque un cliente ALFAKI y, en base a eso, si sigo presionando esto por primera vez, construirá una clave de cliente. Esa es la clave con la que estamos tratando y trataría de obtenerla del caché y, obviamente, encontraría un valor nulo porque es un nuevo comienzo.

En un valor nulo, lo obtendría de Cosmos DB y luego lo agregaría a la caché también y puede ver un elemento agregado y lo siguiente es que simplemente recuperaría y mostraría el valor en la pantalla también y si Ejecuto esto una vez más, esta vez está esperando el mismo cliente del caché porque ahora está en caché y cada vez que continúe y también puede especificar todo tipo de TTL, todo tipo de propiedades que tiene en Cosmo DB como bueno, y también obtienes al cliente del caché. Exactamente el mismo cliente y esta vez, no iría a Cosmos DB y también le mostraría esto en la pantalla.

Entonces, es un simple programa hola mundo, obteniendo los mismos valores del caché porque ahora, está en caché y así es como lo harías y es mucho más rápido. Puede ejecutar una prueba de comparación en paralelo entre Cosmos DB y NCache y puedes ver NCache es mucho más rápido y también puede ahorrar viajes a Cosmos DB y eso también afectaría el factor de costo. Simplemente lo reduciría. Entonces, ese es el primer caso de uso.

El segundo caso de uso es cómo administrar colecciones y hay dos opciones aquí. Tiene toda la colección como un elemento o también puede almacenar en caché cada elemento de la colección por separado. Entonces, para eso, en primer lugar, puede pasar por cinco y si le muestro el código aquí, puede almacenar una lista como un solo elemento. Entonces, solo llegaría a un punto de quiebre aquí. Esto no es esperar nada, solo le mostraría cómo obtenerlo del caché y luego presionar el botón de reproducción de inmediato.

Ron, tengo una pregunta para ti. ¿Hay alguna opción de búsqueda de tipo SQL disponible o algún otro tipo de característica especial? Sí, esa es una muy buena pregunta. Esta es una API básica que estoy mostrando. NCache también tiene un mecanismo de uso de etiquetas. También puede usar la búsqueda SQL, puede usar LINQ, también tenemos disponible la búsqueda de texto completo. Entonces, es muy comparable. Si están familiarizados con SQL, pueden usar la API de SQL de NCache. Se llama Lenguaje de consulta de objetos. Si están familiarizados con LINQ y eso es lo que prefieren, pueden obtener elementos basados ​​en LINQ y luego la búsqueda de texto completo es otra característica. Estamos mostrando un par de valores clave en aras de la simplicidad. Pero como dije, estas son todas las opciones que también puede utilizar como parte de esto.

Entonces, la primera vez que obtiene un valor nulo nuevamente y luego, si presiono reproducir, debería tener este cliente cargado como un solo elemento en el caché. Solo se carga un elemento. Si ejecuto esto una vez más, sin detener nada, esta vez me trae esta colección de clientes del caché. Entonces, tenemos 98 elementos de lista, pero esta es una lista de clientes de clientes como una tienda de un solo artículo. Entonces, esta es una opción. Si está interesado en el almacenamiento en caché del conjunto de resultados, puede almacenar en caché toda la colección como un elemento y estar seguro de que esta es la colección, que necesita todo el tiempo y no necesita ningún otro miembro de la lista o el conjunto de resultados que estás interesado en almacenarlos como un artículo no duele. Pero se recomienda principalmente para colecciones más pequeñas y también para el almacenamiento en caché de conjuntos de resultados.

El segundo y más preferido enfoque sería almacenar en caché cada elemento de la colección por separado también. Entonces, obtiene una consulta ejecutada, API ejecutada contra Cosmos DB, obtiene un montón de documentos, itera a través de esos documentos y los almacena individualmente y luego los agrupa lógicamente con la ayuda de una etiqueta. Entonces, por ejemplo, estamos haciendo esto aquí mismo.

void GetCustomersByCity (string country) 
{
    //Retrieve all customers from NCache first
    List<Customer> customers = new List<Customer>();
    var tagByCountry = new Tag($"Customer:Country:{country}");
    IDictionary<string, Customer> items = _NCacheClient.SearchService.GetByTags<Customer>(new[]{tagByCountry},
    TagSearchOptions.ByAnyTag);
    
    //If data is not in NCache then get from Cosmos DB and Cache it
    if (items != null && items.Count > 0)
    {
    IDocumentQuery<Customer> query = _CosmosDbClient.CreateDocumentQuery<Customer>(
    UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId), new FeedOptions { MaxItemCount = -1,
    EnableCrossPartitionQuery=true }).Where(c => c.Country == country
    ).AsDocumentQuery();

Si le muestro el código, por ejemplo, este es el caso de prueba aquí. Ingrese el nombre del país, algunas verificaciones en base a eso construiría la lista y también construye una etiqueta por país con el parámetro de tiempo de ejecución country y luego llama "_cache.SearchService" y como parte del servicio de búsqueda también tenemos OQL. También tenemos consulta continua, también tenemos LINQ y tenemos algún otro mecanismo de búsqueda que puede usar. Pero estoy usando obtener por etiqueta.

Por lo tanto, se espera que ya se almacenó en caché individualmente y todos esos elementos individuales no son una lista, pero puede colocarlos en una colección usando una etiqueta. Entonces, usando esa etiqueta puedes recuperar toda la colección. Por primera vez, verificaría en el caché, si encuentra que regresa, si no lo hace, iría a Cosmo DB, ejecutaría la consulta y luego iteraría a través de elementos de clientes individuales para cada cliente. Construya el elemento del caché y también adjunte la etiqueta a los elementos individuales y, en función de eso, los almacenaría en NCache también usando cache.InsertBulk y si traigo aquí mismo, el caso número seis aquí mismo. Está llamando a la colección, creando una lista de elementos de caché y cache.InsertBulk.

Entonces, ejecutemos esto una vez más. Si le proporciono la opción número seis, en este caso, permítame mostrarle también el recuento de caché y esta vez, simplemente seguiría adelante y esperaría un nombre de país, digamos Reino Unido, según esa primera vez, solo sería construir la lista. La lista estaría vacía debido a su primera iteración y luego ejecutaría Cosmos DB y luego construiría un elemento de caché, iterando a través de todos esos. Vamos a ver cuántos. Creo que de ocho a diez y también se insertó en el caché y puedes ver seis y más tres. Entonces, alrededor de seis elementos, creo que siete elementos se agregan individualmente pero con un grupo llamado etiqueta por país, con esa etiqueta que está etiquetada por país, que es un parámetro de tiempo de ejecución país, que es un tiempo de ejecución y tiene este formato para el caso y si ejecuto esto una vez más, significa que entré en este bloque central una vez más. Debería poder obtenerlos todos usando la etiqueta de la que acabo de hablar. Bien. Y esta vez, espero obtener todos estos artículos individuales, aunque almacenados individualmente pero categorizados con una etiqueta, decorados con la etiqueta. Entonces, esa etiqueta debería devolverme esos siete elementos como una colección, ¿verdad? Entonces, devuelve una lista de clientes como parte de eso. Por lo tanto, es IDictionary de clientes y luego puede iterar a través de ellos y si presiono reproducir, obtengo exactamente la misma respuesta del caché también y nuevamente, NCache va a ser, esta es una gran mejora en términos de rendimiento, en términos de espacio, incluso para siete unidades de solicitud. Para esta aplicación de muestra, piense en ella con millones de documentos, con millones de solicitudes que entran y salen. Entonces, así es como administraría las colecciones y las almacenaría como un solo elemento como una colección, completa o cada elemento de la colección por separado en el caché.

Almacenamiento en caché de operaciones de actualización con Azure Cosmos DB

A continuación, tenemos operaciones de actualización con Azure Cosmos DB. Estos son muy simples, cada vez que necesite agregar algunos documentos, puede llamar a cache.add en las mismas líneas. Solo voy a mostrarte esto para ahorrar algo de tiempo. Entonces, construye un documento, "CreateDocumentAsync" en Cosmo DB y luego llama a cache.Insert. Entonces, agrega en la base de datos, agrega en el caché también y para la actualización, siempre puede actualizar en el caché, en Cosmos DB y luego también en el caché y eliminar también es muy simple. Quite de Cosmos DB usando "DeleteDocumentAsync" y luego llame a "cache.remove" también. Entonces, esto debería completarse y tenemos estos ejemplos alineados. Entonces, si hay alguna otra pregunta, pasaré al siguiente segmento, que es la sincronización, y eso también llevará algo de tiempo. Entonces, hágamelo saber, si hay alguna pregunta, de lo contrario, cubriré la sincronización. NCache con Azure Cosmos DB. Ron, lo estamos haciendo bien con las preguntas. Creo que has hecho un gran trabajo presentando el producto. Si surge alguna pregunta, definitivamente te la lanzaré.

Sincronizar NCache con Azure Cosmos DB

ESTÁ BIEN. La sincronización es un gran aspecto. Cuando tiene datos existentes en dos lugares diferentes, en la memoria caché y en la base de datos, y eso es lo que también recomendamos, debe usar la memoria caché en combinación con Cosmos DB. Cada vez que hay un cambio en el caché, también aplica ese cambio en la base de datos. Hay una actualización, aplique esa actualización. Eliminar, aplicar esa eliminación. Pero, ¿qué sucede si los datos cambian directamente en Cosmos DB y ese será el escenario más natural en el que Cosmos DB puede estar siendo actualizado por otra aplicación, otro conector y los datos están siendo ingeridos por otra fuente y su aplicación solo lee esos datos y aunque los datos que su aplicación actualiza también se actualizan en Cosmos DB, pero para otras aplicaciones, eso es un cambio de datos directamente en Cosmos DB.

Entonces, ¿qué pasa si he almacenado algo en caché? Asumamos esto y realizo un cambio en Cosmos DB y ese cambio se realiza en Cosmos DB justo aquí. Pero ese cambio no se reflejará en el caché porque los datos existen en dos lugares diferentes y estas dos fuentes no están sincronizadas. Por lo tanto, debe tener algún tipo de sincronización entre Azure Cosmos DB y NCache y el concepto que usamos aquí se basa en el procesamiento de fuente de cambios de Microsoft Azure. Entonces, tenemos un mecanismo de alimentación de cambios y, en base a eso, tenemos dos opciones diferentes que puede probar.

Una es una función de Azure con desencadenador de Cosmos DB. Por lo tanto, es un procesamiento de alimentación de cambios implícito. Por lo tanto, it0 hace mucho trabajo por usted y administra agregar y actualizar para comenzar y puede encontrar una solución para eliminar. Microsoft afirma que es una eliminación suave. Por lo tanto, puede usar un enfoque de eliminación temporal, que es esencialmente una actualización, pero con el tiempo de vida adjunto, con alguna palabra clave adjunta, puede usar dentro de su aplicación alguna palabra clave y puede recibir una notificación de que este elemento ya no existe. va a estar en Cosmos DB.

La segunda opción es la implementación explícita de procesadores de alimentación de cambios. Usted mismo implementa esta interfaz en lugar de usar un desencadenador de Cosmos DB en la función de Azure. Tengo ambos ejemplos alineados. Entonces, primero centrémonos en la función de Azure.

Desencadenador de base de datos de funciones de Azure

Entonces, con el activador de base de datos de función de Azure, este es un diagrama muy simple.

operaciones

Una vez más, su Cosmos DB está justo aquí, NCache está justo aquí. Tu aplicación está usando NCache y Cosmos DB o en algún lugar aquí. ¿Qué sucede si hay un documento que se agrega, actualiza o elimina? Entonces, Microsoft Azure lo haría, puede implementar una fuente de cambios y puede basar un procesador encima de ella. Por lo tanto, esta fuente de cambios administra los eventos de adición y actualización. La eliminación aún no es compatible con Microsoft Azure Cosmos DB y puede implementar la función de Azure con el activador de base de datos. Eso puede agregar y actualizar esos cambios en cualquier fuente como NCache y tengo una implementación, donde estoy haciendo NCache agregar, actualizar y eliminar comando. Eliminación suave, que cubriremos de inmediato.

Entonces, esta es la implementación general. Lo que sucederá después de esta demostración es que cada vez que agregue un documento en Cosmos DB, se reflejará automáticamente en NCache. Si hay una actualización en Cosmos DB que se reflejaría automáticamente en NCache y de manera similar, si hay una eliminación, también tenemos una gestión para eliminar. Por lo tanto, tendría estas dos fuentes 100 % sincronizadas entre sí y esto garantizaría que no haya problemas de inconsistencia de datos y eso podría ser un gran problema para las aplicaciones, que necesitan que los datos estén en forma consistente y actualizados. datos y esos son datos de misión crítica y también datos muy confidenciales. Entonces, esa es la solución que estamos presentando para eso.

Entonces, antes que nada, permítame mostrarle la función de Azure aquí mismo con el activador de base de datos.

[FunctionName("AzureFunction1")]
	public static void Run([CosmosDBTrigger(
	databaseName: "CosmosDbNCacheDemo",collectionName: "Customers",
	ConnectionStringSetting = "CosmosDbConnection",
	LeaseCollectionPrefix ="NCache-CosmosDbTrigger-",
	LeaseCollectionName = "leases")]IReadOnlyList<Document> documents,
	ILogger log)
{
	using (var cache = CacheManager.GetCache("myCache"))
	{	
		Customer customer = null;
		foreach (var document in documents)
		{
			customer = new Customer{Address =
			document.GetPropertyValue<string>("Address"),
			City = document.GetPropertyValue<string>("City"),
			CompanyName =document.GetPropertyValue<string>("CompanyName"),
			ContactName =document.GetPropertyValue<string>("ContactName"),
			Country = document.GetPropertyValue<string>("Country"),
			CustomerID = document.GetPropertyValue<string>("CustomerID")
		};

Entonces, toma nuevamente el nombre del caché y esto es una implementación. Tiene un activador Cosmos DB. Déjame llevarte justo aquí. Por lo tanto, puede ver que tiene información de arrendamientos y arrendamiento. Tengo un almacén de documentos con el nombre arrendamientos. Puede nombrarlo cualquier cosa y eso le permite tener un puntero, por ejemplo, 158 es el último puntero. Por lo tanto, tiene un montón de parámetros. Entonces, el procesador de alimentos en cadena es otra cosa, pero tengo 158 como último indicador. Por lo tanto, mantiene un registro de todas las actualizaciones en la memoria desde la última vez que operó. Entonces, hay una colección de todos los documentos y que se agregan y actualizan desde la última vez que se monitorearon esos cambios. Por lo tanto, se basa en el patrón de observador de alimentación de cambios, al que Cosmo DB constantemente envía información y esa información se mantiene en la memoria y también hay una referencia a eso en Cosmos DB.

Entonces, aquí está la implementación de muestra para esto. Si traigo de vuelta la función de Azure. Por lo tanto, necesita este activador de Cosmos DB. Necesita el nombre de la base de datos, por supuesto. Colección que está tratando de monitorear a través de la fuente de cambios. La cadena de conexión también arrienda el prefijo de la colección, eso es algo, que se coloca dentro del documento de arriendos y luego se arrienda la colección denominada arriendos. Y luego necesito mi nombre de caché aquí también. Por ejemplo, ese es el nombre, estoy usando democache y luego lo que está haciendo es permitir que cada cliente en esta colección construya ese objeto de cliente y luego llame a cache.InsertAsync. Esa es una tarea de invocación asíncrona. Entonces, puede usar eso y para eliminar, hablaré de eso en un momento. Pero antes que nada revisemos la parte de inserción.

Entonces, si ejecuto esta aplicación, esperará los cambios. Usando ese mecanismo de alimentación de cambios y dentro de esos arrendamientos, esperaría todos los documentos que se agregaron y actualizaron desde la última vez y, en función de esa adición y actualización, haría una NCache Llamada API también. Entonces, déjame ejecutar esto. Tomaría algún tiempo para depurar. Seré reconstruido y luego, después de eso, debería poder aplicarlos. No he implementado ningún registrador para esto. Por lo tanto, es posible que obtenga algunos errores de registro en función de mi implementación de muestra. Pero también puede implementar algunos detalles de registro junto con eso. Es un código completo que he usado para mi propósito. Entonces, también puedo compartirlo hacia el final de la demostración. Esa es mi función de Azure. Faltan algunos de los parámetros y es por eso que obtiene valores nulos, pero en general, está haciendo el trabajo para la sincronización de NCache en caso de que ocurra algún cambio en Cosmos DB.

Y mientras tanto, permítanme preparar mi documento que voy a cambiar. Usemos Ross123 porque es uno de los que habíamos creado inicialmente. Digamos que agregaría algunos valores. Déjame ver si está funcionando ahora. Sí, está funcionando y está en modo de espera. Entonces, el host se inicializó y la aplicación se inició. Su función de ejecución desde la última vez porque estaba jugando, haciendo algunos cambios también. Entonces, deja que se complete. Ahí tienes Se está ocupando de Ross123 que actualicé. Entonces, ese documento de arrendamiento se actualizó.

Entonces, permítanme seguir adelante y borrar el contenido del caché una vez más y luego comenzar de nuevo. Entonces, tenemos cero elementos en el caché y esto está en un estado de ejecución. Entonces, lo mantendré aquí y esta vez, abriré Cosmos DB y agregaré algunos caracteres al final del país. Digamos Reino Unido varias veces y luego también agregaré Ross123, algunas cadenas aleatorias a la ciudad también y si presiono actualizar aquí, esto también debería activar Cosmos DB y puede ver que allí va Ross123 Reino Unido Reino Unido y Ross123 44. Entonces, está haciendo uso de esa colección de arrendamiento y luego ejecutará esa función y lo que ha hecho es agregar ese cliente aquí y si voy y presiono mi, esta aplicación se mantuvo ejecutándose . Entonces, si veo Ross123, necesito presionar reproducir en esto porque hay una depuración. Ese es el registrador que no he implementado. Esto debería tener Ross123 444 y Ross123 con algunos caracteres aleatorios agregados. Entonces, así de simple es implementar la función de Azure para Cosmos DB.

Ron, tenemos una pregunta sobre la función de Azure y la pregunta es, ¿es obligatorio usarlo como una función de Azure y cuál es el costo asociado? La función de Azure es nuevamente, no es obligatoria, también puede usar el otro enfoque, que voy a demostrar a continuación. Usted mismo puede implementar un observador de campo de cambio. Esa es una interfaz. Implemente todos los métodos y no use el activador de Azure Cosmos DB en la función de Azure. Entonces, esa es otra opción. Entonces, no es un deber. No es la única opción. La función de Azure está alojada en Microsoft Azure. Por lo tanto, también hay un costo asociado. Pero es mínimo para el caso. Es simplista en cuanto a su uso, pero no es la única opción.

Para eliminar, esto cubre agregar y actualizar. Si agrego un nuevo documento y eso debería traerse automáticamente aquí. Necesito mantener esto en ejecución porque estoy usando agregar y actualizar, la colección de arrendamiento se actualiza en las mismas líneas, pero la eliminación es un caso en el que Microsoft recomienda que use una eliminación temporal y para eso recomienda que use la actualización como alternativa y use una palabra clave, alguna palabra clave aleatoria, por ejemplo, esto se elimina dentro del documento y en lugar de eliminarlo en Microsoft Azure Cosmos DB, usa este atributo. Cualquier borrado aleatorio, descartado y luego usa un TTL y luego actualízalo. Y en base a eso, si ejecuto esto una vez más y, por cierto, también te muestro el código. Lo que se hace, si encuentra que hay un documento con la propiedad eliminada, llamará a la memoria caché o la eliminará y, según ese TTL, se eliminará de la base de datos de todos modos, pero se eliminará de la memoria caché. de inmediato.

Entonces, voy a ejecutar esto, creo que ya se está ejecutando, sí, lo está. Aunque, hay un código de error, pero eso es lo que hace el registrador. Si hago un cambio aquí y actualizo este documento, también se aplicará en el caché. El cliente de funciones Ross123 también se eliminó de la memoria caché. Si vengo aquí, verás que no está en el caché. Y ahora, lo siguiente es que ya que tenemos un TTL. Entonces, después de 10 segundos, Ross123 debe eliminarse de aquí. Entonces, así es como Microsoft Azure recomienda que administre la eliminación. Agregar y actualizar es la única opción para cambiar el observador de feeds en este momento. Por lo tanto, la eliminación tiene que ser una eliminación temporal y esa es la solución alternativa que también recomendaría, según las recomendaciones de Microsoft.

Cambiar procesador de alimentación

El siguiente segmento es sincronizar la memoria caché con Cosmos DB a través del procesador de fuente de cambios. Entonces, había una pregunta, la función de Azure no es la única opción. También puede usar el procesador de fuente de cambios explícitamente y esa es la interfaz IChangeFeedObserver que implementa. Déjame mostrarte el código para esto.

namespace Microsoft.Azure.Documents.ChangeFeedProcessor.FeedProcessing
{
	public interface IChangeFeedObserver
	{
		Task CloseAsync(IChangeFeedObserverContext context,
		ChangeFeedObserverCloseReason reason);
		
		Task OpenAsync(IChangeFeedObserverContext context);
		
		Task ProcessChangesAsync(IChangeFeedObserverContext context,
		IReadOnlyList<Document> docs);
	}
}

Te da mucho más control en comparación. Por ejemplo, esta es mi fábrica, aquí mismo. Entonces, implementé IChangeFeedObserverFactory. Déjame mostrarte esto desde aquí. OK, entonces, tiene un montón de métodos. He implementado este IChangeFeedObserver. Tiene un método que cierra las conexiones. Tiene un método que abre la colección y en el que estoy inicializando el caché y al cerrarlo, en realidad estoy llamando a cached. Dispose para eliminar los recursos y luego el método principal es ProcessChangesAsync. Por lo tanto, tiene IChangeFeedObserver Context, una lista, un token de cancelación y algunas cosas básicas. Entonces, lo que realmente estoy haciendo aquí es obtener eso dentro de los documentos de esta colección, lista de documentos. Ese es el que se va a compartir conmigo. Por lo tanto, implementé esto de tal manera que ChangeFeedObserverFactory me está brindando todos los recursos relevantes y luego, en función de eso, en función de toda la información de arrendamientos y la información de documentos que proporcioné, puedo procesar rápidamente eliminaciones, adiciones y actualizaciones. Entonces, esta vez permítame mostrarle la actualización, agregue el caso de uso también a través de esto, luego actualice y luego elimine y luego concluiremos la demostración.

Entonces, esta es una implementación explícita de IChangeFeedObserver. Eso es lo que usa la función de Microsoft Azure con la ayuda del disparador de Cosmos DB. Entonces, el disparador de Cosmos DB implementa eso automáticamente, lo cual es más fácil, pero debe tener una función de Azure. Pero, ¿y si su aplicación necesita encargarse de eso? Entonces puede implementarlo usted mismo. Entonces, el caché se ha iniciado. Déjame ver si es así, en realidad estaba usando otro caché. Déjame buscarlo, sí y, por cierto, estoy dando todos los detalles aquí, la demostración de Cosmo DB, el documento de arrendamiento y el documento de clientes que quiero monitorear y estoy configurando todos estos parámetros aquí, democache, guardar y ejecútelo y esta vez agregaré un documento, lo actualizaré y eliminaré y le mostraré que se aplicarán en el caché en consecuencia.

Déjame ejecutar el Operación CRUD así, pues, que tenemos. Cierro la función de Azure y luego lo hago. Esto ya está agregado. Bien, mi caché está aquí, ya que mantiene una referencia, así que un documento ya está allí. Quiero deshacerme de él, para que comencemos de nuevo, una vez más y esta vez agregaría algo en Cosmo DB y debería poder obtenerlo del caché de inmediato y puede ver desde aquí, solo copiaría este. Nuevo documento. Vamos a pegarlo aquí. En lugar de Ross123, permítanme decir Ron1122 y dar los mismos campos aquí también. Solo actualizando algunos valores porque este documento ya se eliminó, así que no importa. Y creo que estamos bien. Bien, guárdalo. Entonces, este documento está aquí Ron1122 y si les muestro el observador de cambio de fuente, automáticamente se encargó de eso. Ahora, todo lo que tengo que hacer es ver esto desde el caché. En primer lugar, ha estado en el caché. Entonces, si está en el caché, se cargará desde el caché de todos modos. Entonces, voy a decir Ron1122 y pueden ver, creo que arruiné la identificación. Es Ron1122. Ahí tienes Por lo tanto, tiene los mismos elementos.

Ahora voy a actualizarlo, para que también veamos el caso de uso actualizado. Nuevamente, voy a actualizar algunos personajes dentro de la ciudad. Digamos, NYK NYK y esta vez en lugar de Reino Unido, solo diría EE. UU. EE. UU. EE. UU. Entonces, eso aplicaría una actualización y eso iría a los arrendamientos y, en base a eso, debería aplicarse automáticamente. Vean cuán instantáneamente está lidiando con esto. Entonces, si solo ejecuto esto una vez más y doy el ID de cliente Ron1122, puede ver el valor actualizado aquí, que es con NYK NYK USA y USA.

Para la eliminación, nuevamente necesito usar la eliminación, que es una eliminación suave y para eso todo lo que tengo que hacer es agregar un atributo aleatorio. Por cierto, será cualquier atributo y también le dará algo de TTL. Por ejemplo, eliminado con TTL 10 que debería actualizarlo pero, a su vez, lo eliminaría porque mi código tiene un manejo para la palabra clave eliminada y el tiempo de vida se encargará de la eliminación de Cosmo DB y la palabra clave eliminada tan pronto como encuentre uno, sé que mi aplicación está diseñada de tal manera que Cosmo DB se deshará de este documento. Entonces, necesito deshacerme del caché. Entonces, es una eliminación temporal para Cosmos DB y si se da cuenta aquí, ahí lo tiene. Se eliminaron las siguientes claves, lo que significa que esto ya no existirá en el caché. Si tuviera que ingresar artículo con ID dado no existe. Por lo tanto, no le brinda ningún dato obsoleto, si usa NCache con estos dos enfoques.

Entonces, permítanme resumirlo rápidamente. Sam, me tomaría dos minutos más. Entonces, inicialmente hablamos sobre el almacenamiento en caché de datos, obtener operaciones. Puede comenzar con API simples. En lo que respecta a obtener un documento, llame a cache.Get. Primero verifique desde el caché, no lo encuentre, obténgalo de Cosmos DB y también agréguelo en el caché. Entonces, eso completa el ciclo. Colecciones, almacenar en caché toda la colección es un elemento o almacenar en caché cada elemento de la colección por separado y hablamos sobre los méritos de estos dos enfoques y luego el aspecto más importante es agregar actualizaciones a través de estas mismas API. sincronización de NCache es posible con Cosmos DB. Es bastante sencillo. Tenemos dos opciones, la función de Azure con activador de base de datos o la interfaz IChangeFeedObserver implementada explícitamente. Por lo tanto, se discutieron ambos enfoques y puede elegir entre estos.

Hacia el final, NCache es una caché distribuida de .NET altamente disponible, linealmente escalable y muy confiable. Tenemos un montón de topologías de almacenamiento en caché. Caché del cliente, puente de replicación WAN. Por lo tanto, puede usarlo para Microsoft Azure Cosmos DB en las instalaciones, dentro de la nube y también en las instalaciones. Por lo tanto, diferentes opciones están disponibles como parte de eso. Por favor, hágamelo saber si tiene alguna pregunta, en lo que respecta a los detalles técnicos, de lo contrario, se lo pasaría a Sam.

Ron, hay una pregunta que ya abordamos, pero la pregunta es, ¿serías más recomendable, cuál sería la opción más recomendada? ¿IChangeFeed o una función de Azure? Hablaste de eso, pero si quieres arrojar algo de luz al respecto. Claro, eso es un debate por cierto. Si quiere facilidad de uso, se siente más cómodo con la función de Azure, elija eso y si es un desarrollador que quiere usar componentes y mantener las cosas bajo control porque la interfaz IChangeFeedObserver es algo en lo que tiene control total al abrir las conexiones. , cerrando la conexión y aplicando. Entonces, si desea más control, use IChangeFeedObserver y use la implementación personalizada. Si desea tener facilidad de uso, use la función de Azure con activador de base de datos.

Bien, tenemos otra pregunta, ¿hay un seminario web para explicar más sobre NCache arquitectura y trabajo? Sí hay. En nuestro seminario web grabado, tenemos una serie de seminarios web disponibles y uno de los seminarios web en realidad se llama NCache Arquitectura. Entonces, puedes echar un vistazo a eso. Y todos estos están disponibles en nuestro sitio web, ¿verdad, Ron? Sí, de hecho, esta grabación se publicará en los próximos días. OK perfecto. Entonces, solo tenemos un minuto. Entonces, muchachos, muchas gracias por unirse a todos. Espero que esto haya sido útil. Tratamos de responder tantas preguntas como pudimos. Si hay alguna pregunta adicional, comuníquese con support@alachisoft.com. Si quieres que lo hagamos agenda una demo personalizada, estaremos más que felices de hacer eso por usted también. Si tiene alguna pregunta relacionada con las ventas, siempre puede acercarse a nuestro equipo de ventas en sales@alachisoft.com. Dicho esto, me gustaría agradecer una vez más a todos por unirse. Comuníquese con nosotros si tiene alguna pregunta y apreciamos su tiempo. Gracias y que tengas un buen día.

¿Qué hacer a continuación?

 
© Copyright Alachisoft 2002 - Todos los derechos reservados. NCache es una marca registrada de Diyatech Corp.