Безперебійна міграція даних Couchbase, автоматизований підхід

text
pic

Створено за допомогою DALL·E ©

У цій статті ми розглянемо, як автоматизувати та оптимізувати процес переносу даних між двома кластерами Couchbase. Незалежно від того, чи об'єднуєте ви кластери, мігруєте середовище чи змінюєте архітектуру, цей посібник проведе вас через надійне рішення.

Чому автоматизувати міграцію даних Couchbase?

Ручне перенесення даних між кластерами Couchbase може бути нудним і схильним до помилок.

Автоматизація цього процесу дає:

  • Послідовність: Уникайте помилок, гарантуючи, що одна й та сама процедура буде виконуватись кожного разу.
  • Ефективність: Переносіть великі обсяги даних за допомогою оптимізованих пакетних запитів та повторних спроб.
  • Гнучкість: Налаштуйте міграцію через файл JSON для легкого повторного використання та налаштування.

Давайте розглянемо, як працює ця автоматизація.

Опис проблеми

Іноді вам потрібно перенести всі або деякі колекції з одного кластера Couchbase в інший.

Завдання включають:

  1. Перевірка, чи існують цільові простори та колекції.
  2. Ефективне оброблення великих наборів даних.
  3. Моніторинг процесу з корисними метриками.

Скрипт, представлений тут, вирішує ці проблеми, зберігаючи гнучкість та надійність.

Огляд рішення

Ми використаємо Python-скрипт, який:

  1. Читає конфігурації джерела та цільового кластера Couchbase з файлу JSON.
  2. Перевіряє, чи існують цільові простори та колекції, створюючи їх за необхідності.
  3. Запитує документи пакетами з джерела та переносить їх у ціль за допомогою операцій Key-Value (KV) Couchbase.
  4. Логує детальні метрики, включаючи час запитів, час KV GET/UPSERT та повторні спроби.

Особливості скрипта

Скрипт контролюється через вхідний файл JSON, який включає:

Кероване конфігурацією

{  
 "source": {  
 "connection_string": "couchbases://source-cluster",  
 "username": "source_user",  
 "password": "source_password",  
 "bucket": "source_bucket",  
 "scope": "source_scope",  
 "collections": ["collection1", "collection2"]  
 },  
 "target": {  
 "connection_string": "couchbases://target-cluster",  
 "username": "target_user",  
 "password": "target_password",  
 "bucket": "target_bucket",  
 "scope": "target_scope"  
 },  
 "optimizations": {  
 "batch_size": 50,  
 "log_interval": 100,  
 "retries": 3  
 }   
}

Оптимізовано для продуктивності

  • Пакетні запити: Одержуйте документи пакетами, щоб уникнути перевантаження пам'яті.
  • Логіка повторних спроб: Повторюйте операції KV до 3 разів при тимчасових помилках.
  • Інтервал логування: Логуйте прогрес після кожних 100 документів для прозорості.

Звітність за метриками

Після завершення переносу скрипт виводить:

  • Загальна кількість перенесених документів для кожної колекції.
  • Час, витрачений на запити, KV GET та KV UPSERT операції.

Огляд скрипта

Основні функції

1. Перевірка простору та колекцій

Перевіряє, чи існують цільові простори та колекції, створюючи їх за необхідності:

def ensure_target_scope_and_collection(cluster, bucket_name, scope_name, collection_name):  
 bucket = cluster.bucket(bucket_name)  
 cm = bucket.collections()  

 # Перевіряємо, чи існує простір  
 all_scopes = cm.get_all_scopes()  
 if not any(s.name == scope_name for s in all_scopes):  
 cm.create_scope(scope_name)  

 # Перевіряємо, чи існує колекція  
 cm.create_collection(scope_name, collection_name)

2. Перенос даних

Виконує операції KV GET та UPSERT:

for row in rows:  
 doc_id = row.get("doc_id")  
 if not doc_id:  
 continue  

 # KV GET з джерела  
 get_res = source_collection.get(doc_id)  
 doc_content = get_res.content_as[dict]  

 # KV UPSERT в ціль  
 target_collection.upsert(doc_id, doc_content)

3. Збір метрик

Відслідковує час, витрачений на кожну операцію:

metrics[src_coll_name]["query_time"] += query_time  
metrics[src_coll_name]["kv_get_time"] += kv_get_time  
metrics[src_coll_name]["kv_upsert_time"] += kv_upsert_time

Запуск скрипта

1.
text
Встановіть необхідні залежності:

pip install couchbase==4.x
  1. Підготуйте вхідний конфігураційний файл (наприклад, input_config.json).
  2. Виконайте скрипт:
python source_2_destination.py input_config.json

Приклад виводу

2025-01-21 10:35:55 [INFO] Підключення до джерела кластера...  
2025-01-21 10:35:56 [INFO] Джерело кластера готове (bucket='demo', scope='foo')
2025-01-21 10:35:58 [INFO] Цільовий кластер готовий (bucket='demo', scope='foo')  
2025-01-21 10:36:59 [INFO] --- Тепер реплікуємо з 'foo.music' -> 'music.music' ---  
2025-01-21 10:37:59 [INFO] Завершено перенесення 566 документів з 'music' -> 'music'.  
2025-01-21 10:38:40 [INFO] === Реплікація завершена ===  
2025-01-21 10:38:40 [INFO] Загальна кількість перенесених документів: 922  
2025-01-21 10:38:40 [INFO] --- Деталізовані метрики ---  
2025-01-21 10:38:40 [INFO] Колекція: music  
 Перенесено документів: 566  
 Час запиту: 20.87с  
 Час KV GET: 78.13с  
 Час KV Upsert: 36.93с

Висновок

Цей скрипт спрощує міграцію даних Couchbase, автоматизуючи створення простору/колекцій, ефективно переносячи документи та надаючи корисні метрики. Завдяки підходу, що базується на конфігураціях, ви можете адаптувати його до різних варіантів використання з мінімальними зусиллями. Почніть оптимізувати переноси даних Couchbase вже сьогодні!

Для повного скрипта та конфігурації, перегляньте мій репозиторій на GitHub або отримайте доступ до RAW файлів безпосередньо; source2destination.py

Не соромтеся адаптувати цей скрипт відповідно до ваших конкретних вимог і покращувати автоматизацію налаштування вашого середовища Couchbase.

Якщо у вас є питання чи відгуки, будь ласка, залиште коментарі нижче. Успіхів у програмуванні!

pic

https://www.couchbase.com/downloads/

Перекладено з: Seamlessly migrating Couchbase data, an automated approach

Leave a Reply

Your email address will not be published. Required fields are marked *