معاملات و نمایش داده های دسته ای

ساخت وبلاگ

معامله پایگاه داده به دنباله ای از عملیات خواندن/نوشتن اشاره دارد که تضمین می شود که موفق به موفقیت یا عدم موفقیت شوند. در این بخش شیوه هایی که API مشتری Prisma از معاملات پشتیبانی می کند ، شرح می دهد.

  • برای مثال های عمیق تر و موارد استفاده ، به راهنمای معاملات مراجعه کنید.
  • برای کسب اطلاعات در مورد معاملات به طور کلی و استدلال در مورد راه حل های فعلی Prisma ، به وبلاگ: How Prisma از معاملات پشتیبانی می کند.

در مورد معاملات در Prisma

PRISMA گزینه های زیر را برای استفاده از معاملات ارائه می دهد:

  • : از API مشتری Prisma برای پردازش چندین عملیات در یک یا چند سوابق مرتبط در همان معامله استفاده کنید.: یک یا چند عمل را به صورت عمده با UpdateMany ، Deletemany و CreateMany پردازش کنید. API معامله مشتری Prisma $:
    • : با استفاده از معامله $ (پرس و جو: Prismapromise []): Promise Array of Client Prisma را که به صورت متوالی در یک معامله اجرا می شود ، عبور دهید.. : pass a function that can contain user code including Prisma Client queries, non-Prisma code and other control flow to be executed in a transaction, using $transaction(fn: (prisma: PrismaClient) =>r ، گزینه ها ؟: شی): r

    نوشتن تو در تو به شما امکان می دهد یک تماس API مشتری Prisma را با چندین عملیات انجام دهید که چندین سوابق مرتبط را لمس می کنند. به عنوان مثال ، ایجاد یک کاربر به همراه یک پست یا به روزرسانی سفارش همراه با فاکتور. مشتری PRISMA تضمین می کند که همه عملیات به طور کلی موفق یا شکست می خورند.

    مثال زیر نشانگر نوشتن تو در تو با ایجاد:

    مثال زیر نشانگر نوشتن تو در تو با بروزرسانی است:

    عملیات فله زیر به صورت معاملات انجام می شود:

    • حذف
    • به روزرسانی
    • ایجاد کننده

    API معامله $

    API معامله $ به دو روش قابل استفاده است:

    عملیات پی در پی: عبور از مجموعه ای از نمایش داده های مشتری Prisma که به طور متوالی در داخل یک معامله اجرا می شود.

    $ معامله (نمایش داده شد: Prismapromise []): وعده

    معاملات تعاملی: عملکردی را که می تواند حاوی کد کاربر از جمله نمایش داده های مشتری Prisma ، کد غیر PRISMA و سایر جریان های کنترل باشد ، در یک معامله اجرا کنید.

    $transaction(fn: (prisma: PrismaClient) =>r): r

    عملیات مشتری متوالی Prisma

    پرس و جو زیر تمام پست هایی را که با فیلتر ارائه شده مطابقت دارند و همچنین تعداد همه پست ها را برمی گرداند:

    همچنین می توانید از پرس و جوهای خام در داخل یک معامله $ استفاده کنید:

    به جای اینکه بلافاصله منتظر نتیجه هر عملیاتی در هنگام انجام باشد ، این عملیات ابتدا در یک متغیر ذخیره می شود که بعداً با روشی به نام $ معامله به پایگاه داده ارسال می شود. مشتری PRISMA اطمینان خواهد داد که هر سه عملیات ایجاد می کنند و یا هیچ یک از آنها موفق نمی شوند.

    توجه: عملیات مطابق ترتیب قرار داده شده در معامله انجام می شود. استفاده از یک پرس و جو در یک معامله بر ترتیب عملیات در خود پرس و جو تأثیر نمی گذارد.

    برای مثال های بیشتر به راهنمای معاملات مراجعه کنید.

    از نسخه 4. 4. 0 ، API معامله عملیات متوالی یک پارامتر دوم دارد. می توانید از گزینه پیکربندی اختیاری زیر در این پارامتر استفاده کنید:

    • IsolationLevel: سطح جداسازی معامله را تعیین می کند. به طور پیش فرض این مقدار روی مقدار تنظیم شده در پایگاه داده شما تنظیم شده است.

    بعضی اوقات شما نیاز به کنترل بیشتری بر آنچه در یک معامله انجام می شود. معاملات تعاملی به منظور فراهم کردن دریچه فرار به شما ارائه می شود.

    معاملات تعاملی در نسخه های زیر PRISMA موجود است:

    • معاملات تعاملی به طور کلی از نسخه 4. 7. 0 در دسترس است.
    • در نسخه 4. 6 ، پشتیبانی پروکسی داده برای معاملات تعاملی در پیش نمایش در دسترس بود.
    • از نسخه 2. 29. 0 تا نسخه 4. 5 ، معاملات تعاملی در پیش نمایش در دسترس بودند ، اما از پروکسی داده ها پشتیبانی نمی کردند.

    اگر از معاملات تعاملی در پیش نمایش از نسخه 2. 29. 0 تا 4. 6. 1 استفاده می کنید (شامل) ، باید ویژگی پیش نمایش interactivetransactions را به بلوک ژنراتور طرح Prisma خود اضافه کنید.

    برای استفاده از معاملات تعاملی ، می توانید یک تابع ASYNC را به معامله $ منتقل کنید.

    اولین استدلال که در این عملکرد ASYNC گذشت ، نمونه ای از مشتری Prisma است. در زیر ، ما این نمونه TX را صدا خواهیم کرد. هر تماس Prisma که در این نمونه TX فراخوانی شده است ، در معامله محصور می شود.

    بیایید به یک مثال نگاه کنیم:

    تصور کنید که در حال ساخت یک سیستم بانکی آنلاین هستید. یکی از اقدامات انجام دادن ارسال پول از یک شخص به شخص دیگر است.

    به عنوان توسعه دهندگان باتجربه ، ما می خواهیم اطمینان حاصل کنیم که در هنگام انتقال ،

    • مقدار ناپدید نمی شود
    • مقدار دو برابر نمی شود

    این یک مورد استفاده عالی برای معاملات تعاملی است زیرا برای بررسی تعادل باید منطق را بین نویسندگان انجام دهیم.

    در مثال زیر ، آلیس و باب هرکدام 100 دلار در حساب خود دارند. اگر آنها سعی کنند پول بیشتری از آنچه که دارند ارسال کنند ، انتقال رد می شود.

    انتظار می رود آلیس بتواند 1 انتقال را برای 100 دلار انجام دهد در حالی که انتقال دیگر رد می شود. این امر باعث می شود آلیس 0 دلار و باب 200 دلار داشته باشد.

    در مثال بالا ، هر دو نمایش داده به روزرسانی در یک معامله پایگاه داده اجرا می شوند. هنگامی که برنامه به انتهای عملکرد می رسد ، معامله به پایگاه داده متعهد می شود.

    اگر برنامه شما در طول مسیر با خطایی روبرو شود ، عملکرد ASYNC یک استثنا را پرتاب می کند و به طور خودکار معامله را باز می گرداند.

    برای گرفتن استثنا ، می توانید معامله $ را در یک بلوک امتحان کنید:

    API معامله دارای یک پارامتر دوم است. برای معاملات تعاملی می توانید از گزینه های پیکربندی اختیاری زیر در این پارامتر استفاده کنید:

    • MaxWait: حداکثر زمانی که مشتری Prisma منتظر خواهد بود برای دستیابی به معامله از پایگاه داده. مقدار پیش فرض 2 ثانیه است.
    • Timeout: حداکثر مدت زمانی که معامله تعاملی می تواند قبل از لغو و بازگرداندن آن انجام شود. مقدار پیش فرض 5 ثانیه است.
    • IsolationLevel: سطح جداسازی معامله را تعیین می کند. به طور پیش فرض این مقدار روی مقدار تنظیم شده در پایگاه داده شما تنظیم شده است.

    از معاملات تعاملی با احتیاط استفاده کنید. باز نگه داشتن معاملات برای مدت طولانی به عملکرد پایگاه داده آسیب می رساند و حتی می تواند باعث بن بست شود. سعی کنید از انجام درخواست های شبکه و اجرای نمایش داده های آهسته در کارکردهای معامله خود خودداری کنید. توصیه می کنیم در اسرع وقت وارد و خارج شوید!

    سطح جداسازی معامله

    این ویژگی در MongoDB در دسترس نیست ، زیرا MongoDB از سطح انزوا پشتیبانی نمی کند.

    شما می توانید سطح جداسازی معامله را برای معاملات در نسخه های Prisma زیر تنظیم کنید:

    • برای معاملات تعاملی از نسخه 4. 2. 0
    • برای عملیات متوالی از نسخه 4. 4. 0

    در نسخه های قبلی

    در نسخه های قبل از 4. 2. 0 (برای معاملات تعاملی) یا 4. 4. 0 (برای عملیات پی در پی) ، شما نمی توانید سطح جداسازی معامله را در سطح PRISMA پیکربندی کنید. سطح جداسازی صریحاً توسط PRISMA تعیین نشده است ، بنابراین از سطح جداسازی پیکربندی شده در پایگاه داده شما استفاده می شود.

    سطح انزوا را تنظیم کنید

    برای تنظیم سطح جداسازی معامله ، از گزینه جداسازی سطح در پارامتر دوم API استفاده کنید.

    برای عملیات متوالی:

    برای یک معامله تعاملی:

    سطح جداسازی پشتیبانی شده

    مشتری PRISMA در صورت موجود بودن در پایگاه داده زیرین از سطح جداسازی زیر پشتیبانی می کند:

    • خواندنی
    • خوانده شده متعهد
    • تکرار کردن
    • عکس فوری
    • سریال پذیر

    سطح جداسازی موجود برای هر کانکتور بانک اطلاعاتی به شرح زیر است:

    مجموعه پایگاه دادهخواندنیخوانده شده متعهدتکرار کردنعکس فوریسریال پذیر
    پس از✔️✔️✔️No✔️
    mysql✔️✔️✔️No✔️
    سرور SQL✔️✔️✔️✔️✔️
    سوسکNoNoNoNo✔️
    ساق پاNoNoNoNo✔️

    به طور پیش فرض ، مشتری PRISMA سطح جداسازی را به مقدار موجود در پایگاه داده شما تنظیم می کند.

    سطح جداسازی پیکربندی شده به طور پیش فرض در هر پایگاه داده به شرح زیر است:

مقالات آموزش فارکس...
ما را در سایت مقالات آموزش فارکس دنبال می کنید

برچسب : نویسنده : بهزاد فراهانی بازدید : 36 تاريخ : شنبه 12 فروردين 1402 ساعت: 15:59