تراکنش های جاوا اسکریپت

ساخت وبلاگ

تراکنش های جاوا اسکریپت به شما امکان می دهد تراکنش های تک درخواستی را ارسال کنید که از API جاوا اسکریپت ArangoDB برای اجرای عملیات پیچیده ای استفاده می کند که می تواند چندین سند را از چندین مجموعه بخواند و تغییر دهد.

تراکنش های جاوا اسکریپت با تراکنش های SQL متفاوت است.

در SQL، تراکنش ها با دستور واضح BEGIN یا START TRANSACTION شروع می شوند. پس از هر سری از عملیات بازیابی یا اصلاح داده ها، یک تراکنش SQL با یک فرمان COMMIT به پایان می رسد یا با یک دستور ROLLBACK برگشت داده می شود. ممکن است بین شروع و commit/rollback یک تراکنش SQL ارتباط مشتری/سرور وجود داشته باشد.

در ArangoDB، یک تراکنش همیشه یک عملیات سمت سرور است و بدون هیچ گونه تعامل کلاینت بر روی سرور یکباره اجرا می شود. تمامی عملیاتی که قرار است در داخل یک تراکنش اجرا شوند باید هنگام شروع تراکنش توسط سرور شناخته شوند.

در ArangoDB هیچ دستور تراکنش فردی BEGIN، COMIT یا ROLLBACK وجود ندارد. در عوض، یک تراکنش در ArangoDB با ارائه توضیحاتی از تراکنش به تابع جاوا اسکریپت ()db. _executeTransaction آغاز می شود:

این تابع به طور خودکار یک تراکنش را شروع می کند، تمام عملیات بازیابی و/یا اصلاح داده های مورد نیاز را اجرا می کند و در پایان تراکنش را به طور خودکار انجام می دهد. اگر در حین اجرای تراکنش خطایی رخ دهد، تراکنش به طور خودکار لغو می شود و همه تغییرات برگردانده می شوند.

JavaScript API

انجام تراکنش

تراکنش جاوا اسکریپت سمت سرور را اجرا می کند.

گزینه ها باید یک شی باشند و دارای ویژگی های زیر باشند:

  • collections: یک شی فرعی که تعریف می کند از کدام مجموعه ها می خواهید در تراکنش استفاده کنید. می تواند ویژگی های فرعی زیر را داشته باشد:
    • read : یک مجموعه واحد یا لیستی از مجموعه ها برای استفاده در تراکنش در حالت فقط خواندنی.
    • Write : یک مجموعه واحد یا فهرستی از مجموعه ها برای استفاده در تراکنش در حالت نوشتن یا خواندن.
    • انحصاری: یک مجموعه واحد یا فهرستی از مجموعه ها برای دسترسی به نوشتن انحصاری.

    علاوه بر این، گزینه ها می توانند ویژگی های اختیاری زیر را داشته باشند:

    • params : آرگومان های اختیاری به تابع مشخص شده در عمل ارسال می شوند.
    • allowImplicit: اجازه خواندن از مجموعه های اعلام نشده را می دهد.
    • WaitForSync: یک پرچم بولی اختیاری که اگر تنظیم شود، تراکنش را مجبور می کند تا قبل از بازگشت، همه داده ها را روی دیسک بنویسد.
    • LockTimeout: یک مقدار عددی که می تواند برای تعیین زمان در ثانیه برای انتظار در قفل های مجموعه استفاده شود. این گزینه فقط هنگام استفاده از قفل های اختصاصی معنی دار است. اگر مشخص نشده باشد ، از مقدار پیش فرض 900 ثانیه استفاده می شود. تنظیم LockTimeout 0 باعث می شود ArangoDB منتظر قفل نباشد.
    • MaxTransactionSize: محدودیت اندازه معامله در بایت.

    اعلام مجموعه ها

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

    مجموعه ها را می توان در یک معامله در حالت نوشتن یا در حالت فقط خواندنی استفاده کرد.

    در صورت انجام هرگونه عملیات اصلاح داده ، این مجموعه باید برای استفاده در حالت نوشتن اعلام شود. حالت نوشتن اجازه می دهد تا داده ها را از مجموعه در حین معامله اصلاح و خواندن کنید (یعنی حالت نوشتن شامل حالت خواندن است).

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

    مجموعه هایی برای معامله با ارائه آنها در ویژگی مجموعه های شیء منتقل شده به عملکرد _exewetransaction () اعلام می شود. ویژگی مجموعه ها می توانند زیر مجموعه های زیر را بخوانند ، بنویسند و منحصر به فرد باشند:

    بخوانید ، بنویسید ، و منحصر به فرد ویژگی های اختیاری هستند و فقط در صورت نیاز به عملیات داخل معاملات برای آن باید مشخص شود.

    مقادیر ویژگی می تواند هر یک لیست از نام های مجموعه یا یک نام مجموعه واحد (به عنوان یک رشته) باشد:

    توجه: مشخص کردن مجموعه هایی برای دسترسی به صورت پیش فرض اختیاری است. حتی بدون مشخص کردن آنها ، هنوز هم می توان از چنین مجموعه هایی از طریق یک معامله ، اما با انزوا آرام ، خواندن از چنین مجموعه هایی را بخوانید. لطفاً برای اطلاعات بیشتر به قفل معاملات مراجعه کنید.

    به منظور عدم موفقیت یک معامله هنگامی که یک مجموعه غیر اعلام شده در داخل برای خواندن استفاده می شود ، می توان زیرمجموعه اختیاری AllingImplicit مجموعه ها را به False تنظیم کرد:

    مقدار پیش فرض برای AllowImplicit درست است. مجموعه های دسترسی به نوشتن که در آرایه مجموعه اعلام نشده اند ، بدون در نظر گرفتن ارزش AllowImplicit ، هرگز امکان پذیر نیست.

    اعلامیه اصلاح داده ها و عملیات بازیابی

    کلیه عملیات اصلاح داده ها و بازیابی که باید در داخل معامله انجام شود ، باید با استفاده از ویژگی Action در یک عملکرد JavaScript مشخص شود:

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

    توجه داشته باشید که هر عملیاتی که در عمل مشخص شده است، در یک محدوده جداگانه روی سرور اجرا خواهد شد. متغیرها دیر محدود می شوند. دسترسی به هر متغیر جاوا اسکریپت تعریف شده در سمت کلاینت یا در زمینه سرور دیگر از داخل تراکنش ممکن است کارساز نباشد. درعوض، هر متغیری که در داخل عمل استفاده می شود، باید در داخل عمل تعریف شود:

    هنگامی که کد داخل ویژگی action اجرا می شود، تراکنش از قبل شروع شده و تمام قفل های مورد نیاز به دست آمده اند. هنگامی که کد داخل ویژگی action به پایان رسید، تراکنش به طور خودکار انجام می شود. هیچ دستور commit صریحی وجود ندارد.

    برای لغو یک تراکنش و برگرداندن همه تغییرات، باید یک استثنا ایجاد شود و در داخل تراکنش قرار نگیرد:

    هیچ دستور قطع یا عقبگرد صریحی وجود ندارد.

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

    انتقال پارامترها به تراکنش ها

    پارامترهای دلخواه را می توان با تنظیم ویژگی params هنگام اعلام تراکنش به تراکنش ها منتقل کرد. این ویژگی برای استفاده مجدد از کد تراکنش یکسان برای تماس های متعدد اما با پارامترهای مختلف مفید است.

    یک مثال اساسی:

    مثال بالا 2 را برمی گرداند.

    چند مثال که از مجموعه ها استفاده می کند:

    پرتاب استثناها

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

    برای لیست کاملی از خطاهای احتمالی ArangoDB، کدهای خطا و معانی را ببینید.

    استثناهای سفارشی

    ممکن است بخواهید استثناهای سفارشی را در داخل یک تراکنش تعریف کنید. برای اینکه استثنا به درستی به سمت بالا منتشر شود، لطفاً یک نمونه از کلاس خطای پایه جاوا اسکریپت یا یک مشتق را پرتاب کنید. برای تعیین شماره خطا، آن را به عنوان قسمت errorNumber وارد کنید. به عنوان مثال:

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

    توجه: در برخی از نسخه ها ، مثال فوق نمی تواند erroum را به مهمانی دعوت کننده تبلیغ کند ، ممکن است لازم باشد ArangoDB خود را ارتقا دهید.

    مثال ها

    نمونه مجموعه واحد

    مثال اول 3 سند را در مجموعه ای به نام C1 می نویسد. مجموعه C1 باید در ویژگی نوشتن ویژگی مجموعه ای که به عملکرد _execteTransaction () منتقل شده است ، اعلام شود.

    ویژگی عمل حاوی کد معامله واقعی است که باید اجرا شود. این کد شامل کلیه عملیات اصلاح داده ها (3 در این مثال).

    سقط جنین با پرتاب استثناء در عملکرد عمل ، همه تغییرات را برمی گرداند ، به طوری که هرگز معامله هرگز اتفاق نیفتاده است:

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

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

    معاملات جمع آوری متقابل

    همچنین امکان انجام معامله در چندین مجموعه وجود دارد. در این حالت ، مجموعه های متعدد باید در ویژگی مجموعه ها اعلام شوند ، به عنوان مثال:

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

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

برچسب : نویسنده : Mihayloo بازدید : <-PostHit-> تاريخ : شنبه 13 اسفند 1401 ساعت: 12:34