Con Couchbase Server 3.0, obtienes una nueva gran opción para cambiar la forma en que usamos la memoria para almacenar en caché tus claves y metadatos. La nueva opción se llama "full ejection". Así es como la eyección completa es diferente:
Con la versión 2.x, almacenamos en caché todas las claves y metadatos en memoria y sólo permitimos la expulsión de valores. Esto está muy bien para acceder con baja latencia a cualquier parte de los datos. Sin embargo, algunas cargas de trabajo no requieren acceso de baja latencia a todas las partes de los datos y prefieren tener memoria reservada para las partes más "calientes" del conjunto de trabajo. Imaginemos una base de datos masiva que recopila telemetría de sensores o un sistema IoT (Internet de las cosas) que recopila puntos de datos masivos de todos los dispositivos, pero que consulta principalmente los datos de las últimas 24 horas. Con la versión 3.0, para grandes bases de datos con un conjunto de trabajo activo más pequeño, puedes activar la "expulsión completa" y expulsar claves y metadatos para partes de tus datos a las que se accede raramente. Incluso si consideras que las claves y los metadatos son pequeños, con un gran número de claves, la memoria utilizada para claves y metadatos puede sumar. Con el modo de expulsión total, puedes utilizar la memoria de forma más eficaz para almacenar en caché partes más grandes de tu conjunto de trabajo.
- Activar la opción es fácil y puede hacerse por cubo en la consola de administración. El cambio es transparente para las aplicaciones, por lo que no es necesario hacer nada en el tamaño de la aplicación para aprovechar la configuración.

Veamos algunas cifras para comprobar hasta qué punto puede ser eficaz para bases de datos de gran tamaño. Los siguientes gráficos muestran la memoria consumida para almacenar metadatos durante la carga de datos para clusters 2.5.1 y 3.0 que tienen una configuración idéntica. Las versiones 2.5.1 y 2.x anteriores se comportan de la misma manera en la forma en que almacenan en caché por lo que esto es repetible con cualquier versión 2.x también.
- El gráfico de la izquierda muestra la cantidad de metadatos en memoria a lo largo del tiempo en 2.x que se ejecuta en el modo de expulsión de valores (ya que es el único modo de almacenamiento en caché permitido).
- El gráfico de la derecha muestra el comportamiento de la versión 3.0 en condiciones de eyección total.

A medida que los datos se acumulan puedes ver que Couchbase Server 2.x consume cada vez más memoria llegando a los 3GB. En el lado derecho, se ve el consumo de memoria alrededor de 80 MB con 3.0. Con la expulsión completa en Couchbase Server 3.0, la misma operación consume mucho menos memoria ya que continuamente expulsa claves y metadatos. La memoria liberada de la expulsión de claves y metadatos está disponible para nuevas claves y metadatos, así como para los valores de los datos que se están cargando. Órdenes de magnitud de reducción en la memoria utilizada para los metadatos ... La prueba se realiza con el recuento de réplica fijado en 1, el tamaño del valor promedio de alrededor de .5K, y, finalmente, ambas bases de datos alcanzan alrededor de 50Mil documentos durante la operación de carga de datos visualizados en los gráficos.
Entonces, ¿qué pasa cuando la aplicación necesita acceder a claves y metadatos que han sido expulsados en 3.0? Hay un compromiso aquí y Couchbase hace IO adicional para traer la clave y los metadatos, así como los valores de nuevo en la memoria bajo expulsión completa. Operaciones como Add, Delete, Touch, CAS todavía necesitan metadatos. Sin embargo Set tiene una optimización especial: Couchbase puede omitir la recuperación de la clave y los metadatos y simplemente asumir que la versión anterior está invalidada.
Antes de terminar quiero dejar claro que la nueva opción de expulsión completa aporta una gran eficiencia para grandes conjuntos de datos. Sin embargo, si tiene aplicaciones que necesitan bajas latencias agresivas para todos los accesos a datos, debería seguir utilizando la opción de expulsión de valores. Los almacenes de cookies o sesiones o las aplicaciones de carritos de la compra, los almacenes de perfiles son ideales para fijar todas las claves y metadatos en memoria, por lo que deberían utilizar la opción de expulsión de valores.
Muchas gracias y, como siempre, todos los comentarios son bienvenidos.
-cihan