تحلیل انتشار Prisma v8.0.0-rc.19
نمای کلی اجرایی و اهمیت معماری
نسخه v8.0.0-rc.19 از پریزما نشاندهنده یک تحول بزرگ معماری در نحوه مدیریت قراردادهای داده، اعتبارسنجی طرحواره (schema) و خطوط لوله اجرای زمان اجرا توسط ORM است. با بازتعریف اساسی مدیریت مقادیر پیشفرض — جداسازی محدودیتهای سطح پایگاه داده از مقادیر تولید شده توسط کلاینت از طریق صفات @onCreate و @onUpdate — این نسخه مرز مشخصتری بین طرحوارههای پایگاه داده و ارکستراسیون لایه برنامه ایجاد میکند. علاوه بر این، اعمال تایپینگ دقیق روی قراردادها در هنگام راهاندازی، حدس و گمان را از بین میبرد و تضمین میکند که نمایشهای زمان اجرا بهشدت از ساختارهای لایه داده زیرین تبعیت کنند.
از منظر طراحی سیستمها، ذخیره هر مقدار پیشفرض در قالبی که صراحتاً متعلق به نوع داده ستون آن است، روالهای رمزگشایی را بهطور قابلتوجهی ساده کرده و از اشکالات ظریف و پنهان تبدیل نوع جلوگیری میکند. با یکپارچهسازی تگگذاری بومی برای پیشفرضهای تاریخ، زمان، بازه زمانی (interval) و بایتها، پریزما دقت بالایی را در هنگام سریالسازی در مرزهای زبان و درایورهای پایگاه داده تضمین میکند. این اصلاحات ساختاری در نهایت سربار برنامهریزی و اجرای پرسوجو را کاهش میدهند و به لایههای میانافزار و کش اجازه میدهند فعالیتهای فردی ORM را به عنوان واحدهای منسجم و اتمیک، بدون اتکا به اتصالات فعال پایگاه داده، بازرسی کنند.
بهبودهای کلیدی و ارگونومی توسعهدهنده
ارگونومی توسعهدهنده در نسخه v8.0.0-rc.19 از طریق اعتبارسنجیهای معنایی دقیقتر در زبان طرحواره پریزما (PSL) به طور قابل توجهی تقویت میشود. آرگومانهای سازنده نوع اکنون به جای رشتههای تجزیه نشده، به عنوان مقادیر تحتاللفظی ارتقا یافته و ارزیابی میشوند (به عنوان مثال، انتقال از VarChar("255") به VarChar(255)) که از انحراف پیکربندی و تناقضات تجزیه در زمان اجرا جلوگیری میکند. علاوه بر این، اعضای enum اکنون مستقیماً به عنوان مقادیر تایپشده کدک زیرین خود تفسیر میشوند و معناشناسی مقایسهای دقیقی را فعال میکنند که در آن مقادیری مانند 0.5 و 0.50 به درستی به عنوان موارد تکراری در انواع عددی شناخته میشوند.
با معرفی اعلان Raw(sql...) انعطافپذیری بیشتر توسعه مییابد و به توسعهدهندگان اجازه میدهد تا انواع پایگاه داده دلخواه را به طور یکپارچه در کنار بازیابی بارگذاری طرحواره Prisma 7 برای فیلدهای Unsupported(...) هدف قرار دهند. نمونهسازی کلاینت نیز اصلاح شده است: به جای ارسال مستقیم پیکربندیهای عمومی خام یا درون خطی به توابع کانکتور، توسعهدهندگان اکنون قراردادها را به صراحت با استفاده از contractFromJson<Contract>(contractJson) از نقطه ورود /static نما (facade) نمونهسازی میکنند. این امر تضمینهای ایمنی نوع برتر را فراهم میکند و رفع اشکال زمان اجرا را شفافتر میسازد.
ماتریس مقایسه معماری
| بعد ویژگی | مبنای قبلی (v8.0.0-rc.18 و قبل از آن) | پریزما v8.0.0-rc.19 | تأثیر معماری |
|---|---|---|---|
| تأخیر پرسوجو | ارزیابیشده از طریق قراردادهای تجزیهشده با رشتههای پویا و جستجوهای زمان اجرا. | اعتبارسنجی قرارداد ایستا بهینهسازیشده با کستینگ نوع قطعی. | کاهش سربار و مسیرهای اجرای قابل پیشبینی برای پرسوجوهای پایگاه داده. |
| ردپای حافظه | تجزیه پویا رشتههای پیشفرض چندنوعی در زمان اجرا. | فرمهای ذخیرهسازی یکپارچه متعلق به نوع ستون با استفاده از تگهای تایپشده اختصاصی. | تخصیص کمتر هیپ (heap) و به حداقل رساندن فشار زبالهروب (garbage collection) در هنگام راهاندازی. |
| سطح API | پارامترهای درونخطی contractJson و صفات ژنراتور @default قدیمی. |
ابزار صریح contractFromJson و هوکهای متمایز @onCreate/@onUpdate. |
مرزهای نوع سختگیرانه را اعمال کرده و ابهام در مقادیر تولید شده را از بین میبرد. |
تغییرات اساسی و نکات مهاجرت
نسخه v8.0.0-rc.19 پریزما چندین تغییر اساسی را معرفی میکند که نیازمند بهروزرسانیهای سیستماتیک در سراسر پایگاه کد و نمونههای پایگاه داده شما است. ژنراتورهای کلاینت که قبلاً از طریق @default(uuid())، @default(nanoid()) و غیره تعریف شده بودند، اکنون به شدت رد میشوند و باید به @onCreate(...) مهاجرت داده شوند. به طور مشابه، اصلاحگر @noCheck به نفع معناشناسی پوچی آرایه بومی (به عنوان مثال، T?[]) به طور کامل منسوخ شده است که نیازمند بهروزرسانی فوری قراردادهای ذخیرهشده و اسنپشاتهای مهاجرت است.
سازندههای نوع، اعلانهای enum و مقادیر پیشفرض برای فیلدهای موقتی یا باینری اکنون قوانین تایپ سختگیرانهای را اعمال میکنند. اعداد نقلقولشده در سازندههای نوع و رشتههای بدون تگ برای تاریخها یا آرایههای بایت (bytea با استفاده از نحو هگزادسیمال به جای base64) باعث خطاهای کامپایل میشوند. توسعهدهندگان باید اسکریپتهای ارتقاء ارائهشده را اجرا کنند، قراردادها را مجدداً صادر کنند و دستور prisma db sign را روی تمام پایگاههای داده متصل برای بهروزرسانی امضاهای رمزنگاری اجرا نمایند.
راهنمای گام به گام ارتقاء
این مراحل عملی را برای ارتقاء ایمن برنامه خود به Prisma v8.0.0-rc.19 دنبال کنید:
اجرای اسکریپتهای ارتقاء خودکار: اسکریپتهای رسمی ارتقاء برنامه یا پسوند ارائهشده در مخزن را اجرا کنید تا فایلهای PSL را به طور خودکار بازنویسی کنید، راهاندازی قرارداد سمت کلاینت را جابجا کنید و نحو منسوخشده
@noCheckرا باT?[]جایگزین کنید.بهروزرسانی کد راهاندازی کلاینت: پیکربندیهای درونخطی
contractJsonرا با الگوی نمونهسازی ایستا جدید جایگزین کنید:
import { contractFromJson } from '@prisma/orm-postgres/static';
export const contract = contractFromJson<Contract>(contractJson);
export const db = postgres({ contract, url: process.env['DATABASE_URL']! });
- امضا و بررسی پایگاههای داده: پس از اعمال تغییرات طرحواره و صدور مجدد قراردادها، ابزار امضای پایگاه داده را برای بهروزرسانی هشها اجرا کنید:
prisma contract emit
prisma db sign
