Skip to content
EN

Что такое CRDT

Коротко:

CRDT (Conflict-free Replicated Data Types) — класс data structures, которые можно независимо обновлять на разных replicas и затем merge deterministically без conflict resolution. Основа collaborative editors (Notion, Figma, Linear). Типы: G-Counter (grow-only counter), LWW-Set (last-write-wins), RGA (replicated growable array для text). Библиотеки: Yjs, Automerge.

Ниже: подробности, пример, смежные термины, FAQ.

Проверить свой сайт →

Подробности

  • Commutative: A+B = B+A (порядок операций не важен)
  • Associative: (A+B)+C = A+(B+C)
  • Idempotent: apply тот же update дважды = same result
  • Vector clocks / Lamport timestamps для ordering
  • Use cases: collaborative editing, offline-first, distributed counters

Пример

// Yjs collaborative text
const ydoc = new Y.Doc();
const ytext = ydoc.getText('content');
ytext.insert(0, 'Hello');
// Syncs over WebSocket — other users see update

Смежные термины

Применение CRDT в разработке

CRDT (Conflict-free Replicated Data Types) активно используются в разработке распределённых систем и приложений, требующих синхронизации данных между несколькими узлами. Примеры применения:

  • Collaborative editors: Notion, Figma, Linear используют CRDT для обеспечения согласованности изменений в реальном времени.
  • Chat applications: мессенджеры, такие как Slack, могут применять CRDT для синхронизации сообщений между устройствами.
  • Distributed databases: некоторые NoSQL базы данных, например, Apache CouchDB, используют CRDT для обеспечения согласованности данных в распределённой среде.

Практическое применение CRDT позволяет разработчикам создавать более надёжные и масштабируемые приложения.

Типы CRDT

Существует несколько типов CRDT, каждый из которых предназначен для решения определённых задач. Основные типы:

  • G-Counter (grow-only counter): счётчик, который может только увеличиваться. Используется для подсчёта событий или изменений.
  • LWW-Set (last-write-wins): множество, в котором побеждает последнее записанное значение. Подходит для синхронизации списков или наборов данных.
  • RGA (replicated growable array для text): массив, который может расти и синхронизироваться между узлами. Используется для совместной работы с текстом.

Выбор типа CRDT зависит от требований к приложению и характера данных, которые необходимо синхронизировать.

Библиотеки и инструменты для работы с CRDT

Для работы с CRDT существует несколько библиотек и инструментов, которые упрощают разработку приложений. Некоторые из них:

  • Yjs: библиотека, которая предоставляет реализацию CRDT для совместной работы в реальном времени.
  • Automerge: инструмент, который позволяет синхронизировать данные между различными узлами без конфликтов.
  • CouchDB: NoSQL база данных, которая использует CRDT для обеспечения согласованности данных в распределённой среде.

Использование этих библиотек и инструментов позволяет разработчикам быстро и эффективно внедрять CRDT в свои проекты.

Больше по теме

Часто задаваемые вопросы

CRDT vs Operational Transform?

OT (Google Docs) — server-authoritative, transforms operations. CRDT — peer-to-peer compatible, merging без server. CRDT выигрывает для offline-first.

Performance?

Yjs handles thousands edits/sec. Automerge медленнее но более featureful. Both в production (Linear, Figma).

Нужно ли для простого todo app?

Нет — overhead. CRDT имеет смысл начиная с collaborative editing или true offline-first UX.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.