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

ساخت وبلاگ

من در حال حاضر یک پایگاه داده MySQL دارم که تعداد بسیار زیادی از معاملات را انجام می دهد. برای ساده نگه داشتن آن ، این یک جریان داده از اقدامات (کلیک و سایر رویدادها) در زمان واقعی است. این ساختار به گونه ای است که کاربران متعلق به زیر هماهنگ ها و افراد فرعی متعلق به شرکت های وابسته هستند. من باید تعادل کلیک را حفظ کنم. به خاطر سادگی ، بیایید بگوییم که من باید تعادل کلیک را 1 افزایش دهم (در واقع پردازش بیشتری بسته به یک رویداد وجود دارد) برای هر یک از - کاربر ، برای زیرمجموعه و وابسته. در حال حاضر من این کار را خیلی ساده انجام می دهم - پس از دریافت این رویداد ، من نمایش داده های متوالی را در PHP انجام می دهم - تعادل کاربر را می خوانم ، یک نفر را افزایش می دهم و مقدار جدید را ذخیره می کنم ، سپس تعادل فرعی را می خوانم ، افزایش می دهم و می نویسم، و غیره. تعادل کاربر مهمترین معیار برای من است ، بنابراین می خواهم آن را تا حد امکان واقعی نگه دارم. معیارهای دیگر در سطح زیر و وابسته از اهمیت کمتری برخوردار هستند ، اما هرچه به زمان واقعی نزدیک شوند ، بهتر می شوند ، اما فکر می کنم 5 دقیقه تاخیر ممکن است خوب باشد. با رشد این پروژه ، در حال تبدیل شدن به یک تنگنا است ، و من اکنون به دنبال گزینه های دیگر هستم - چگونه می توان محاسبه مانده را دوباره طراحی کرد. من می خواهم اطمینان حاصل کنم که طراحی جدید قادر خواهد بود 50 میلیون رویداد در روز را خرد کند. همچنین برای من مهم است که یک رویداد واحد را از دست ندهم و من در واقع هر چرخه تغییرات را برای کلیک در ترازو در یک معامله SQL می پیچم. برخی از مواردی که من در نظر می گیرم: 1 - یک کار کرون ایجاد کنید که تعادل را در سطح فرعی و وابسته به روز کند نه در زمان واقعی ، بیایید هر 5 دقیقه بگوییم. 2 - با استفاده از روشهای ذخیره شده ، شماره خرد شدن و به روزرسانی های تعادل را به خود پایگاه داده منتقل کنید. من در نظر دارم یک پایگاه داده جداگانه اضافه کنم ، شاید Postgress برای کار مناسب تر باشد؟من سعی کردم ببینم که آیا بهبود عملکرد جدی وجود دارد ، اما به نظر می رسد اینترنت در این موضوع تقسیم شده است. 3 - انتقال این جریان داده خاص به چیزی مانند Hadoop با پارکت (یا Apache Kudu؟) و فقط در صورت لزوم سرورهای بیشتری را اضافه کنید. 4 - با استفاده از DB موجود ، اساساً یک سرور DB جداگانه برای هر شرکت وابسته اضافه کنید. آیا بهترین روشها / فناوری ها برای این نوع کار یا برخی از کارهای آشکار که می توانم انجام دهم وجود دارد؟از هر کمکی واقعاً قدردانی می شود!

دنبال کردن 1 1 1 نشان نقره ای 25 فوریه 2017 در 20:02 سؤال شد rogexx rogexx 13 4 4 نشان های برنز

4 پاسخ 4

مرتب شده توسط: تنظیم مجدد به طور پیش فرض

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

تعادل را کلیک کنید (و "مانند شمارش") باید در یک جدول جدا از تمام داده های مرتبط باشد. این امر به جلوگیری از تداخل در فعالیت های دیگر در سیستم کمک می کند. و در صورت داشتن داده های بیشتر از آنچه می توانید در بافر_پول ذخیره شوید ، احتمالاً ذخیره سازی مانده را بهبود می بخشد.

توجه داشته باشید که طراحی من شامل یک کار Cron نیست (غیر از شاید به عنوان "نگه داشتن"). این جدول را پردازش می کند ، میزها را می چرخاند ، سپس به پردازش باز می گردد - به همان سرعتی که می تواند.

دنبال کردن 25 فوریه 2017 در 20:58 پاسخ داد ریک جیمز ریک جیمز 132K 11 11 نشان طلا 126 126 نشان نقره 214 214 نشان های برنز

اگر من تو بودم ، ذخیره سازی در حافظه را Redis اجرا می کردم و معیارهای شما را در آنجا افزایش می دادم. خیلی سریع و قابل اعتماد است. همچنین می توانید از این DB بخوانید. همچنین کار Cron را ایجاد کنید ، که این داده ها را در MySQL DB ذخیره می کند.

نرم افزار مفید تریدر...
ما را در سایت نرم افزار مفید تریدر دنبال می کنید

برچسب : نویسنده : احمد شاملو بازدید : 41 تاريخ : يکشنبه 27 فروردين 1402 ساعت: 12:17