Англійська мова для міграції схем баз даних

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

Міграції схеми знаходяться на справді ризикованому перетині коду і виробничих даних, тому неясний мова тут має реальні наслідки - “ми оновлюємо базу даних” не каже нічого про те, чи операція блокує таблицю, чи це зворотне, або чи потрібно виконувати разом зі старим кодом програми під час розгортання. Точний словник має найбільше значення при перегляді проекту перед переходом кораблів, а не після того, як щось вже пішло не так.

Ключовий словник

Миграція Версійна, скриптова зміна у схемі бази даних, наприклад, додавання стовпчика або створення індексу, призначена для застосування і відстеження поступових змін у коді програми.

  • Приклад: « Ця міграція додає новий стовпчик з типовим значенням, але у таблиці такого розміру типове заповнення може зайняти більше часу, ніж дозволяє наше вікно розгортання. » *

** Відновлення (відновлення міграції) ** Зворотна дія, яка скасує зміни, внесені під час перенесення, ідеально, якщо цей скрипт буде написано разом з перенесенням уперед, щоб можна було безпечно скасувати помилкове розгортання. Приклад: «Ця міграція не має відповідного скрипту відновлення — якщо нам потрібно відновити після розгортання, нам доведеться написати його під тиском під час інциденту.»

** Обратно- сумісна міграція ** Зміна схеми, розроблена так, щоб і старі, і нові версії коду програми могли працювати правильно під час розгортання.

  • Приклад: « Ми робимо це зворотньо сумісним перенесенням, додаючи спочатку нову колонку як нульову, тому старий код, який не знає про це, все ще працює під час розгортання. » *

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

  • Приклад: « Міграція без перерв для цього перейменування означає, що ми додамо нову колонку, заповнимо її, розгорнемо код, який записує в обидві, а потім викинути стару колонку в пізнішому випуску — не одне атомарне перейменування. » *

Замок стола Обмеження, яке забороняє виконання інших операцій з читання або запису таблиці (або певного діапазону рядків) під час виконання перенесення, що може призвести до видимого сповільнення програми або перевищення часу очікування.

  • Приклад: « Додавання цього індексу без параметра CONCURRENTLY призведе до блокування таблиці на час збирання, що заблокує запис до таблиці, яку вона активно використовує. » *

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

  • Приклад: “Ми виконуємо заповнення невеликими партіями протягом декількох годин, а не в одній транзакції, особливо для того, щоб уникнути довгого блокування в цій таблиці з високим трафіком.” *

Нездатна міграція Скрипт перенесення, розроблений для безпечного виконання декілька разів без виникнення помилок або дублювання змін, корисний, якщо після часткової невдачі перенесення може бути повторено.

  • Приклад: « Ми зробили цю міграцію ідемпотентною, перевіривши чи стовпчик вже існує перед спробою його додавання, щоб повторна спроба розгортання не завершилася невдачею через помилку дублікату стовпчика. » *

Розширення-зменшення шаблон Стратегія міграції для перетворення ризикованої схеми зміни на безпечні, поступові кроки — розширення схеми для підтримки як старих, так і нових форм, міграція використання, а потім скорочення для вилучення старої форми.

  • Приклад: « Ми використовуємо шаблон expand- contract для перейменування цього стовпчика: додаємо новий стовпчик, здійснюємо подвійний запис до обох, заповнюємо, переключаємо читання на новий стовпчик, а потім, нарешті, скидаємо старий стовпчик. » *

Звичайні фрази

В обзоре миграции:

  • «Ця міграція не має скрипту відновлення — чи можемо ми додати його до цього злиття, навіть якщо ми сподіваємося, що він ніколи не буде потрібен?»
  • «Додавання цього індексу буде мати блокування таблиці на весь час збирання — чи повинні ми використовувати одночасне збирання індексу замість цього, враховуючи, скільки запису трафіку ця таблиця бачить?»
  • «Це не є зворотньо сумісним з поточною версією розгорнутої програми — під час розгортання, деякі екземпляри не спрацювали б проти нової схеми»

В стоячих позах:

  • «Вчора я розділив цю зміну схеми на послідовність розширення-контракту через три розгортання; сьогодні я запускаю заповнення в виробництві в невеликих партіях»
  • «Я заблокований на міграції, яка повинна працювати проти таблиці з декількома сотнями мільйонів рядків — мені потрібно підтвердити, що тривалість блокування прийнятна, перш ніж ми заплануємо її»
  • «Я закінчив писати скрипт відновлення для міграції минулого тижня, оскільки у нас не було такого і нам пощастило, що він не був потрібен під час розгортання»

В записках про інцидент:

  • «Міграція тримала блокування таблиці протягом дванадцяти хвилин, під час яких запити запису в цю таблицю стояли в черзі і врешті-решт перевищували тайм-аут»
  • «Ми не мали готового скрипту відновлення, тому повернення поганої міграції вимагало написання і тестування одного живого під час інциденту, що продовжило відключення»
  • «Нова колонка була додана як не нульова без типового, що спричинило саму міграцію, щоб зазнала невдачі проти існуючих рядків, а не розгортання, що зазнало невдачі грациозно.»

Фрази, яких слід уникати

Скажите “мы обновляем базу данных” неопределенно перед отправкой переходного корабля. Замість цього скажіть: «Ця міграція додає нульову колонку з окремим заповненням, і не має блокування таблиці за межами початкового DDL-запиту» — конкретні механізми є саме тим, що потрібно рецензенту для оцінки ризику.

** Сказати « це має бути в порядку » без перевірки поведінки блокування в масштабі. ** Замість цього скажіть: «Давайте підтвердимо тривалість блокування на копії даних виробничого розміру перед запуском цього проти реальної таблиці» — припущення про безпеку міграції, які не перевіряються проти реального обсягу даних, є поширеним джерелом виробничих інцидентів.

** Сказати « просто перейменувати стовпчик » для живої схеми. ** Замість цього скажіть: « давайте використаємо шаблон expand- contract — додамо нову колонку, подвійний запис, заповнення, а потім скинемо стару пізніше » — одне атомарне перейменування проти живої схеми рідко буває безпечним, якщо якийсь код все ще розгортається проти старої назви.

Краткий справочник

TermHow to use it
migration”This migration adds a new column with a default value.”
rollback”Every migration needs a corresponding rollback script.”
backward-compatible”Adding the column as nullable keeps this backward-compatible during rollout.”
table lock”A concurrent index build avoids holding a table lock.”
backfill”We’re backfilling in small batches to avoid a long lock.”
expand-contract pattern”We’re using expand-contract to safely rename this column.”

Ключеві моменти

  • Завжди вказувати поведінку блокування перенесення і план відновлення у перегляді, а не лише те, що змінюється структурно.
  • Типово використовувати шаблон розширення- скорочення для будь- яких змін назви або типу у поточній таблиці, а не для однієї атомарної дії.
  • Перевірити час міграції за даними виробничого масштабу перед тим, як припустити, що міграція « має бути в порядку » на невеликій таблиці.
  • Створити імпотентні міграції, де це можливо, оскільки повторні спроби розгортання після часткової невдачі є досить поширеними, щоб їх було можливо запланувати.
  • Розглядати сумісність з попередніми версіями під час розгортання як обов’ язкову вимогу, а не як додаткове рішення — старий і новий код програми можуть виконуватися одночасно проти схеми.

Науковий напрямок: «Створення ефективних механізмів управління екологічними процесами»

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

Одна з найпоширеніших областей плутанини стосується фраз, пов’язаних з * планами відновлення *. Просто сказати «Ми повернемося, якщо щось піде не так» недостатньо. У ній немає деталей і не передається рівень підготовки, який здійснюється. Замість цього, скористайтеся більш описовою мовою, наприклад: « Після виявлення невідповідності схеми під час перенесення, ми виконаємо попередньо визначений скрипт відновлення, щоб повернути до попередньої стабільної версії, зменшивши до мінімуму потенційну втрату даних і забезпечивши негайну плинність операцій ». Або, у повідомленні Slack, у відповідь на занепокоєння колеги щодо впливу, ви можете сказати: « Ми розробили всеоб’ ємну стратегію відновлення — вона передбачає поетапне відновлення, починаючи з таблиць, на які впливає зміна, і перевірку цілісності даних на кожному кроці перед повним відновленням. Ми ретельно задокументували це в PR. Пам’ятайте, активне спілкування будує довіру і зменшує тривогу навколо потенційних змін.

Іншою критичною областю є чітке описання * обсягу * міграції. Використання нечітких термінів, таких як «оновити» або «змінити», неадекватно передають масштаб зміни. Використання більш точної мови демонструє ретельне розуміння. Наприклад, замість того, щоб сказати « Ми оновлюємо схему », розгляньте: « Ця міграція передбачає повне перебудування таблиці users, включаючи додавання нових стовпчиків для відповідності GDPR і оптимізацію стратегій індексування для поліпшення продуктивності запиту. » Аналогічно, в описі Запиту на завантаження ви можете написати: « Ця PR вводить нову таблицю audit_trail поряд з існуючою таблицею orders. Це поліпшення забезпечує гранулярне відстеження модифікацій замовлень, відповідно до змінних вимог регулювання. ”

Нарешті, будьте уважні до технічного жаргону і активно вибирайте мову, яка доступна для всіх членів команди. Не приймайте за правило, що всі розуміють акронім або певні команди бази даних без пояснень. Наприклад, замість того, щоб просто сказати «Ми використаємо ALTER TABLE», поясніть: «Ми використаємо команду ALTER TABLE в нашому скрипту міграції, щоб змінити структуру таблиці products, додавши нове булеве поле, що вказує, чи є елемент в наявності»

-- Example rollback script (PostgreSQL) - Illustrative only.
DROP TRIGGER audit_trail_insert;
DELETE FROM audit_trail WHERE order_id IN (SELECT id FROM orders WHERE id > 100); -- Rollback to older order IDs
ALTER TABLE orders RENAME TO orders_old;
CREATE TABLE orders (order_id SERIAL PRIMARY KEY, ...); -- Recreate the table

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

Поширені запитання

Про що ця стаття "Англійська мова для міграції схем баз даних"?

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

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "Англійська мова для міграції схем баз даних"?

Приблизно 8 min.