Як зробити кілька записів у транзакції

Посібник з виконання транзакційних записів

Передумови

Термінологія

Ось визначення деяких ключових термінів, що використовуються в Прикладі нижче.

ТерміниВизначення
etcdctlІнструмент командного рядка для взаємодії з сервером etcd.
команда txnКоманда txn є скороченням від “transaction” (транзакція). Вона зчитує кілька запитів etcd зі стандартного вводу та застосовує їх як єдину атомарну транзакцію. Транзакція складається з списку умов, списку запитів для застосування, якщо всі умови істинні, та списку запитів для застосування, якщо будь-яка умова хибна. Див. Команди ключ-значення etcdctl для отримання додаткової інформації.
compareУмова compare всередині транзакції (txn) слугує умовною перевіркою, яка визначає, чи слід продовжувати операції транзакції. Вона гарантує, що зміни застосовуються лише тоді, коли поточний стан сховища ключ-значення відповідає очікуваним умовам, тим самим підтримуючи узгодженість даних та запобігаючи конфліктам у одночасному середовищі. Щоб побачити структуру команди, перегляньте розділ Виконання транзакції нижче.

Транзакції

txn для обробки всіх запитів в одній транзакції:

etcdctl txn --help

Транзакції в etcd дозволяють виконувати кілька операцій атомарно, забезпечуючи, що або всі операції застосовуються, або жодна з них. Це важливо для підтримки узгодженості даних при виконанні повʼязаних оновлень. Дізнайтеся більше про транзакції в документації API.

Приклад

Розглянемо сценарій, коли ви хочете оновити електронну пошту та номер телефону користувача в одній транзакції. Це забезпечує, що обидва оновлення застосовуються разом.

05_etcdctl_transaction_2024101213

0. Змінні та прапорці

Змінні
/users/{<user_id>/email : ключ etcd, що представляє електронну адресу користувача.
/users/<user_id>/phone : ключ etcd, що представляє номер телефону користувача.
Прапорці
--interactive : Прапорець для дозволу ручного введення даних транзакції

1. Налаштування початкових даних

Спочатку створіть користувача з початковими даними.

etcdctl put /users/12345/email "old.address@johndoe.com"
etcdctl put /users/12345/phone "123-456-7890"

2. Виконання транзакції

Оновіть електронну пошту та номер телефону користувача в одній транзакції.

etcdctl txn --interactive

compares:
value("/users/12345/email") = "old.address@johndoe.com"

success requests (get, put, delete):
put /users/12345/email "new.address@johndoe.com"
put /users/12345/phone "098-765-4321"

failure requests (get, put, delete):
get /users/12345/email
  • Compare: Перевіряє, чи поточна електронна пошта “old.address@johndoe.com”. Це забезпечує, що транзакція продовжується лише якщо дані відповідають очікуваним.
  • Success: Якщо порівняння вірне, оновлюємо як електронну пошту, так і номер телефону.
  • Failure: Якщо порівняння не вдається, отримуємо поточну електронну пошту, щоб зрозуміти, чому транзакція не продовжилася.

Важливі моменти

  • Атомарність: Транзакція забезпечує, що як електронна пошта, так і номер телефону оновлюються разом. Якщо початкова умова (порівняння) не виконується, жодне з оновлень не застосовується.
  • Узгодженість: Використання транзакцій підтримує узгодженість даних, особливо при роботі з кількома повʼязаними оновленнями.
  • Уникайте кількох записів для одного ключа: Не записуйте кілька значень для одного ключа в одній транзакції, оскільки це може призвести до несподіваних результатів. Кожен ключ повинен оновлюватися лише один раз за транзакцію.

Востаннє змінено September 13, 2026: Add Ukrainian documentation and tutorials for etcd v3.5..v3.8 (45739f0)