ارزهای پایگاه داده با TypeOrm | هکر ظهر

عکس پروفایل نویسنده

من در سرویس های خود از الگویی استفاده می کنم که در آن روش هایی وجود دارد که همیشه یک Entity را برمی گرداند اما این که آن را از پایگاه داده بازیابی کنم یا به تازگی ایجاد کنم ، به این روش بستگی دارد. من این روش ها را می گویم

getOrCreate*

مواد و روش ها.

یک مثال. کاربران می توانند یک

Tag

به یک

Post

. هنگامی که یک کاربر برچسب “javaScript” را وارد می کند ، من یک روش در

TagService

نامیده می شود

getOrCreateTag(name: string)

. در آن روش ، من کوچک و کوچک نام و واکشی از پایگاه داده. در صورت یافتن آن ، آن را بازیابی می کند ، در غیر این صورت یک Tag Entity جدید ایجاد می کند.

این می تواند منجر به مشکلی شود. هنگامی که دو درخواست برای backend دقیقاً همزمان رخ می دهد ، با رشته دقیقاً یکسان ، دو برچسب با همان نام درج می شوند.

چه اتفاقی می افتد در آهسته ماه:

  1. درخواست A: می پرسد آیا آن برچسب وجود دارد یا خیر
  2. پیدا نمی کند
  3. تصمیم به ایجاد آن می گیرد
  4. در ضمن درخواست B آن برچسب را می خواهد
  5. پیدا نمی کند
  6. تصمیم به ایجاد آن می گیرد
  7. درخواست A آن را ایجاد می کند
  8. درخواست B آن را ایجاد می کند

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

مطالب پیشنهادی  راهنمای سریع EventSource یا SEE

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

قفل بدبینانه

قفل پایگاه داده همیشه هنگام نوشتن در پایگاه داده ایجاد می شود. به عنوان مثال ، گام های 7. و 8. هر دو یک قفل نوشتن فوق العاده کوتاه ایجاد می کنند. با این حال…

سئو PBN | خبر های جدید سئو و هک و سرور