Англійською мовою: Drizzle ORM
Вивчіть англійську лексику для обговорення Drizzle ORM, у тому числі його SQL- схожий конструктор запитів, визначення схем і міграції, як легшої альтернативи Prisma.
Drizzle продає себе проти Prisma, тому багато словникового запасу навколо нього є порівняльним - що він робить по-іншому, і чому деякі команди вважають цю різницю перевагою.
Ключовий словник
** SQL-like query builder ** — підхід Drizzle до написання запитів, які близько відображають фактичний синтаксис і структуру SQL, на відміну від більш абстрактного API запиту Prisma, який деякі розробники вважають легшим для роздумів, оскільки він близько відображає SQL, який насправді працює. “Я віддаю перевагу SQL-подібному конструктору запитів Drizzle, тому що я можу по суті прочитати SQL, який буде запущений - з більш абстрагованим API ORM, я іноді повинен вгадати, який запит насправді генерується.”
** Визначення схеми ** — код TypeScript Drizzle, який описує таблиці, стовпчики і відносини, що є єдиним джерелом правди як для структури бази даних, так і для виведених типів TypeScript, які використовуються в інших місцях програми. “Спочатку оновити визначення схеми, а не базу даних безпосередньо — Drizzle генерує міграцію з цієї схеми TypeScript, а типи, які використовує решта програми, виводяться з того ж джерела.”
** Без рушія запитів ** — факт, що Drizzle компілює безпосередньо в SQL і розмовляє з драйвером бази даних без окремого бінарного або рушійного процесу, що працює під ним, на відміну від рушія запитів Prisma, що зменшує витрати і час холодного запуску. “Однією з причин, чому ми відмовилися від Prisma для цієї безсерверної функції, було те, що Drizzle не має рушія запитів - рушій Prisma додав помітну затримку холодного запуску, що мало велике значення для функції, викликаної на кожному запиті.”
** Migration ** — сформований файл SQL, який містить зміну у схемі бази даних, створену за допомогою порівняння поточного визначення схеми з попереднім, застосовану для синхронізації фактичної бази даних.
- “Запустити команду створення міграції після зміни визначення схеми — програма порівняє її з останньою міграцією і створить новий файл SQL, який ми переглянемо перед тим, як застосувати його до бази даних.” *
** Виведення типів ** — автоматичне виведення типів TypeScript для результатів запиту безпосередньо з визначення схеми, таким чином, тип повернення запиту відображає фактичні вибрані стовпчики без вручну внесених анотацій типів. “Ми не маємо потреби вручну вводити тип для цього результату запиту — виведення типу з визначення схеми означає, що повернені рядки вже правильно введено на основі того, які стовпчики ми обирали.”
Звичайні фрази
- Чи ми віддаємо перевагу цьому SQL-подібному конструктору запитів, чи буде більш абстрагований API більш зрозумілим тут?»
- «Чи було оновлено визначення схеми, або ми змінюємо базу даних безпосередньо?»
- Чи є архітектура без запитів насправді важливою для цієї мети розгортання?
- Чи була ця міграція переглянута перед тим, як ми її застосували?»
- Чи є типове виведення, що дає нам тип, який ми очікуємо від цього запиту?»
Приклади висловлювань
Пояснення параметра інструментів: “Мені подобається SQL-подібний конструктор запитів Drizzle для складних з’єднань, особливо - коли запит стає складним, я хочу побачити щось близьке до фактичного SQL, а не зневаджувати через кілька шарів абстракції ORM.”
Обґрунтування потоку дій перенесення:
- “Ніколи не змінюйте схему бази даних безпосередньо у цьому проекті — завжди спочатку змінюйте визначення схеми, створюйте міграцію з цього diff, переглядайте SQL, а потім застосовуйте її. Це зберігає визначення схеми як фактичне джерело істини.”*
Пояснення рішення щодо швидкодії без сервера: “Ми переключили цю конкретну функцію на Drizzle частково через відсутність рушія запиту - процес рушія Prisma додавав затримку холодного запуску на кожне холодне викликання, і ця функція викликається холодно достатньо часто, щоб це мало значення.”
Професійні поради
- Поясніть SQL-подібний конструктор запитів як навмисний компроміс, а не обмеження — він надає перевагу явності над абстракцією, яку деякі команди віддають перевагу для зневадження.
- Розглядати визначення ** схеми ** як єдине джерело правди, і ніколи не дозволяти базі даних відхилятися від нього за допомогою змін вручну — це порушує процес перенесення.
- Цитуйте no query engine особливо, коли обговорюєте розгортання, чутливі до холодного запуску, такі як безсерверні функції, де це справжня, вимірювана перевага.
- Завжди переглядати створену ** міграцію ** перед її застосуванням — автоматичне відмінювання зазвичай є правильним, але іноді може призвести до руйнівної дії, яку ви не планували.
- Покладатися на ** виведення типів ** зі схеми, а не на написання типів результатів від руки — це автоматично зберігає точність типів під час зміни схеми.
Практичні вправи
- Поясніть, чому відсутність рушія запитів у Drizzle може бути важливою для безсерверних холодних запусків.
- Описати правильний порядок дій для зміни схеми бази даних у Drizzle.
- Напишіть речення, у якому пояснюється, що означає виведення типу у контексті ORM.
Навігація та зв’язок
Як розробники, ми проводимо значну частину нашого часу спілкуючись - не тільки з кодом, але і з колегами. Часто, найскладнішою частиною є не написання самого коду, а вираження того, що ви робите і ефективне отримання зворотнього зв’язку. При роботі з такими інструментами, як Drizzle ORM, точна мова є ключовою для чіткого спілкування, особливо при співпраці над проектами або вирішенні проблем під час перегляду коду. Давайте подивимося, як це перекладається на звичайні сценарії.
Однією з найчастіших ситуацій є коментар до запиту на завантаження. Уявіть, що Сара переглядає код Джона, який використовує Drizzle для оновлення запису клієнта. Вона може залишити коментар на кшталт: “Цей запит може отримати користь від більш чіткого обробки помилок. Що буде, якщо customer_id не існує? Розгляньте можливість додавання перевірки на нуль або нуль перед спробою оновлення, а також записування інформаційного повідомлення у журнал. Це не лише * технічний * аспект забезпечення цілісності даних; це запит на конкретні зміни у такий спосіб, який є реалізованим і шанобливим. Важливо розглядати пропозиції як можливості для поліпшення, а не як критику. Замість того, щоб сказати «Це неправильно», що може бути негайно оборонним, формулювання його як «Чи можемо ми, можливо, додати чек тут до…?» демонструє співпрацю. Іншим поширеним виразом, з яким ви можете зіткнутися під час обговорення проектування баз даних, є « еволюція схеми ». Цей термін позначає процес зміни структури вашої бази даних з плином часу — додавання нових полів, зміна типів даних або навіть введення пов’ язаних таблиць — і чітке повідомлення про ці зміни. Описання причини для зміни схеми («Ми додаємо поле phone_number, щоб захопити більш докладну контактну інформацію клієнта») додає контекст і обґрунтування.
Крім того, розмови Slack часто включають обговорення складних запитів або міграцій. Наприклад, Девід може надіслати таке повідомлення: «Привіт команда, я працюю над міграцією таблиці користувачів, щоб включити last_login_timestamp. Я створив скрипт міграції за допомогою Drizzle, який обробляє оновлення схеми. Він розроблений для зворотної сумісності — тобто існуючі дані залишаться незмінними — і включає відповідне ведення журналу для відстеження прогресу. ” Зверніть увагу, як Девід використовує точну термінологію: “ зворотна сумісність ” “ оновлення схеми ” і згадує “ ведення журналу ” — всі терміни, які ви, ймовірно, почуєте в обговореннях про Drizzle. Вміння впевнено сформулювати ці поняття створює довіру і демонструє ваше розуміння інструменту і його можливостей.
-- Example Drizzle migration script (simplified)
-- This is a conceptual example; actual migrations would be more robust.
from drizzle.postgres import PostgresqlDatabase
def upgrade(db: PostgresqlDatabase) -> None:
# Add the last_login_timestamp column to the users table
db.execute("""
ALTER TABLE users
ADD COLUMN last_login_timestamp TIMESTAMP WITHOUT TIME ZONE;
""")
def downgrade(db: PostgresqlDatabase) -> None:
# Remove the last_login_timestamp column from the users table (for rollback)
db.execute("""
ALTER TABLE users
DROP COLUMN last_login_timestamp;
""")
Нарешті, пам’ятайте, що чітка і коротка мова є універсальним вмінням. Під час обговорення Drizzle, зосередження на конкретних діях - оновлення записів, створення міграцій, запит даних - допомагає уникнути неоднозначності і забезпечує, що всі знаходяться на одній сторінці. Це переклад технічного розуміння в комунікацію, яка сприяє ефективній командній роботі.