Change Data Capture — cada cambio, como un flujo
Zaris captura cada Put y Delete sobre el espacio de claves en un feed de cambios de primera clase, duradero y ordenado. Léelo desde un consumidor OpenChangeFeed, reanuda desde un cursor controlado por el servidor y mantén tus cachés, índices, modelos de lectura y sistemas posteriores perfectamente sincronizados con los datos.
Un feed ordenado, muchos consumidores
Las escrituras fluyen hacia un feed duradero a medida que se aplican. Los consumidores con nombre leen de él de forma independiente, filtran en el origen y recuerdan su posición — de modo que cada sistema posterior se mantiene sincronizado a su propio ritmo.
Unas pocas líneas para una proyección en vivo
- OpenChangeFeed(options, ct)Produce un flujo de ChangeEvents públicos — la clave, el tipo de operación (Put/Delete), el valor y sus metadatos (incluido el TTL) y la hora de escritura de origen.
- Reanuda, no reproduzcas de nuevoDefine un ConsumerName duradero y el servidor hace seguimiento de tu offset confirmado — reabre y continúa exactamente donde lo dejaste, incluso tras un fallo o un despliegue. Sin commit manual.
- Filtra en el servidorAcota el feed por prefijo de clave y tipo de operación, de modo que recibas solo los cambios que te interesan.
// A durable ConsumerName makes the server track this consumer's committed
// offset and lag — reopen the feed and it resumes automatically.
var options = new ChangeFeedOptions
{
ConsumerName = "search-indexer",
KeyPrefix = "product:", // server-side filter
Kinds = new[] { FeedEventKind.Put, FeedEventKind.Delete },
};
var feed = (IZarisChangeFeedClient)client; // the Zaris client is a feed consumer
await foreach (ChangeEvent e in feed.OpenChangeFeed(options, ct))
{
if (e.IsDelete)
await index.RemoveAsync(e.Key);
else if (e.Value is { } bytes) // raw bytes of a plain-value write
await index.UpsertAsync(e.Key, bytes, e.ExpiresAtUnixMs);
// No manual commit: the named consumer's offset is tracked server-side.
}No es pub/sub. No es un trabajo de sondeo. Un sistema de registro del cambio.
Pub/sub y Streams son explícitos y efímeros — tú publicas en ellos. El feed de cambios es implícito y duradero: registra lo que realmente le ocurrió a tus datos, en orden, para quien lo necesite.
Capturado automáticamente
Cada Put y Delete sobre el espacio de claves se convierte en un evento de cambio ordenado — sin fontanería en la aplicación, sin escrituras dobles. A diferencia de pub/sub o Streams, en los que publicas de forma explícita, el feed es un registro fiel de lo que realmente cambió.
Duradero y ordenado
Los cambios llegan a un feed duradero y replicado en el orden en que se aplicaron, de modo que un consumidor que arranca horas más tarde sigue viendo cada cambio, exactamente una vez por cursor, en secuencia.
Reanudable, por consumidor
Reanuda desde un offset de consumidor con nombre, duradero y controlado por el servidor. Cada consumidor tiene su propia posición, por lo que un destino lento nunca frena a los demás — y su lag es visible para los operadores.
Filtrado en el origen
Reduce el feed por prefijo de clave y tipo de operación en el servidor, de modo que un consumidor solo reciba la porción que le interesa — menos trabajo en la red y en tu código.
Eventos de cambio enriquecidos
Cada ChangeEvent lleva la clave, el tipo de operación, el valor y sus metadatos (incluido el TTL) y un token de cursor — todo lo que un sistema posterior necesita para aplicar el cambio y recordar su posición.
Seguro y opcional
El feed requiere autorización de lectura cuando la seguridad está activada, y toda la capacidad es aditiva y opcional — un almacén que nunca abre un feed no se ve afectado en absoluto.
Conecta tus datos con todo lo que viene después
Invalidación de caché y CDN
Impulsa una invalidación precisa desde la fuente de verdad — en cuanto una clave cambia, expulsa exactamente la entrada de caché o CDN correcta en lugar de adivinar con TTL genéricos.
Mantén un índice de búsqueda sincronizado
Transmite los Puts y Deletes directamente a Elasticsearch, OpenSearch o un almacén de vectores, para que tu índice vaya por detrás de los datos por milisegundos, no por un proceso por lotes nocturno.
Vistas materializadas y proyecciones
Mantén modelos de lectura desnormalizados y proyecciones CQRS plegando el flujo de cambios hacia adelante — reconstruye uno desde el inicio del feed cada vez que cambie la forma.
Registros de auditoría y event sourcing
Conserva un rastro ordenado y duradero de cada mutación para auditoría, reproducción y reconstrucción a un punto en el tiempo — capturado en el almacén, no añadido a cada servicio.
Outbox y ETL hacia sistemas posteriores
Usa el feed como un outbox fiable: envía cambios a un data warehouse, un bus de mensajes o un sistema de un socio sin escrituras dobles ni un frágil trabajo de sondeo.
Suscripciones de interfaz en vivo
Distribuye los cambios a paneles y clientes para que las pantallas se actualicen en el instante en que se mueven los datos subyacentes — sin bucle de sondeo, sin datos obsoletos.
Convierte tu almacén en un flujo de cambios
Change Data Capture es opcional y aditivo — abre un feed donde lo necesites y deja intacto cualquier otro almacén.