Англійською мовою: 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 особливо, коли обговорюєте розгортання, чутливі до холодного запуску, такі як безсерверні функції, де це справжня, вимірювана перевага.
  • Завжди переглядати створену ** міграцію ** перед її застосуванням — автоматичне відмінювання зазвичай є правильним, але іноді може призвести до руйнівної дії, яку ви не планували.
  • Покладатися на ** виведення типів ** зі схеми, а не на написання типів результатів від руки — це автоматично зберігає точність типів під час зміни схеми.

Практичні вправи

  1. Поясніть, чому відсутність рушія запитів у Drizzle може бути важливою для безсерверних холодних запусків.
  2. Описати правильний порядок дій для зміни схеми бази даних у Drizzle.
  3. Напишіть речення, у якому пояснюється, що означає виведення типу у контексті 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, зосередження на конкретних діях - оновлення записів, створення міграцій, запит даних - допомагає уникнути неоднозначності і забезпечує, що всі знаходяться на одній сторінці. Це переклад технічного розуміння в комунікацію, яка сприяє ефективній командній роботі.

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

Про що ця стаття "Англійською мовою: Drizzle ORM"?

Вивчіть англійську лексику для обговорення Drizzle ORM, у тому числі його SQL- схожий конструктор запитів, визначення схем і міграції, як легшої альтернативи Prisma.

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

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

Скільки часу займає читання "Англійською мовою: Drizzle ORM"?

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