• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
تحلیل یک جدول
#1
سلام وقتون بخیر
می خوام تو ساخت یک جدول پرکاربرد در سیستم اس ام اس کمکم کنید
فرض کنید جدولی داریم بنام send که باید تمامی ارسالهای کاربران در خودت ذخیره کنه و جدا از اون در تاریخ سررسید ارسال بسته های صدتایی را به مخابرات تحویل بده و بعد از تحویل رکورد های بسته خودشو آپدیت کنه تا از صف خارج بشن
و جدا از این موضوع باید شماره های گیرنده هر پیامک رو به مشترک نشون بده مثلا وضعیت دلیوری و....

حالا به نظر شما چنین جدولی باید از چه انجین مای اسکول طراحی بشه؟ و چطور فشار کمتری به منابع سرور وارد کنه
لطفا فضای اجرای کار رو حدود 250 هزار رکورد در یک روز در نظر بگیرید و حدودا 30 کاربر در لحظه
  پاسخ
تشکر شده توسط :
#2
به نظرم InnoDB مطمئن تر بنظر میرسه، چون عمده کارت هم Read نیست که بری سراغ MyISAM
چون با این حساب گاهی هم نیاز به recovery پیدا میکنید و همچنین احتمالا نیاز به قفل در سطح رکورد پیدا میکنید...
کلاً برای دیتابیس های بزرگ معمولاً میرن سراغ InnoDB...
اما در نظر داشته باشید که حتماً از سرور 64 بیتی استفاده کنید و منابع سیستم رو هم مناسب در نظر بگیرید.
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط : mortezaa
#3
ممنون از نظرت
اخه read هم کم نیست به هرحال مشترکین تمایل دارن اس ام اس هاشون رو نگاه کنند و از وضعیتشون با خبر شن
InnoDB رو چه ورژن از Mysql بهتر کار میکنه؟

این موضوع رو هم بگم شاید کمتر از یک ماه به راحتی بالای 5 میلیون رکورد دو جدول send فقط داشته باشم که در نظر بگیرید خواندن از روی جدول برای تعداد کاربرها بالا چقدر فشار به منابع میاره
  پاسخ
تشکر شده توسط :
#4
نقل قول:InnoDB رو چه ورژن از Mysql بهتر کار میکنه؟
طبیعتاً رو آخرین ورژن Wink

نقل قول:این موضوع رو هم بگم شاید کمتر از یک ماه به راحتی بالای 5 میلیون رکورد دو جدول send فقط داشته باشم که در نظر بگیرید خواندن از روی جدول برای تعداد کاربرها بالا چقدر فشار به منابع میاره

بستگی به خیلی چیزها داره، پهنای باندت، منابع سخت افزاری سرورت، معماری دیتابیس و کوئری هات و خیلی چیزهای دیگه

درسته MyISAM برای خواندن بهتره، ولی کلاً برای حجم های سنگین InnoDB بیشتر پیشنهاد میشه...
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط :
#5
MyISAM یه مشکلی که داره اینکه وقتی کوئری زده میشه جدول قفل میشه برای همین صف درخواست ها خیلی زیاد میشه
ولی تو InnoDB باید سطر قفل شه
یه تست نرم افزاری گرفتم سر همین مثل سطر ولی دقیقا متوجه شدم تو InnoDB باید فرایند اول تکمیل بشه مثل MyISAM
  پاسخ
تشکر شده توسط :
#6
نقل قول:یه تست نرم افزاری گرفتم سر همین مثل سطر ولی دقیقا متوجه شدم تو InnoDB باید فرایند اول تکمیل بشه مثل MyISAM
یعنی چی؟
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط :
#7
توی مقالتی که خونده بودم
کوئری های که تو انجین MyISAM زده میشد کل یک جدول رو قفل میکرد
ولی تو انجین InnoDB سطر مورد نظر فقط قفل میشه
---------------
حالا سر همین موضوع من یک تست از دو انجین گرفتم که در واقعه هیچ فرقی نمیکرد در مجموع هر دوتا جدول قفل میشد و دستور بعدی منتظر اجرای دستور قبلی میموند
  پاسخ
تشکر شده توسط :
#8
myisam کلا داره تعطیل میشه میزارن کنار. اصلا سرش نباید بحث کرد.
  پاسخ
تشکر شده توسط : mortezaa hamid_80386
#9
پس پیشنهاد شما اینکه از InnoDB استفاده بشه
حالا یه سئوال دیگه برای سرعت بخشیدن query ها همیشه باید transaction استفاده کرد؟ حتی تو بچ اینسرت یا حتی تو اپدیت؟
تو سلکت کردن چه راه کاری هست که سرعت عملیات بالاتر بره؟
چون وقتی ما صف پیامکی داریم باید فرضا صد تا صد تا روی دیتابیس شماره موبایل و متن پیامک رو بخونیم چه راه کاری هستش که این سرعت عملیات بالاتر بره
منابع سرور رو شما در حد نرمال در نظر بگیرید
  پاسخ
تشکر شده توسط :
#10
ترنزکشن کاری به سرعت نداره و اتفاقا سرعت رو میاره پایینتر چون یه بار اضافه روی دیتابیس میزاره. ترنزکشن وظیفش یه چیز دیگست.
کلا برای اینکه سرعت دیتابیس بره بالا
اول از همه ساختار جدول
بعدش تنظیمات مناسب پایگاه داده
و بعدش پروفایل و بهینه سازی کوئری ها
  پاسخ
تشکر شده توسط : hamid_80386


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان