Amin Adel
Amin Adel
خواندن ۲ دقیقه·۴ سال پیش

افزایش 700 برابری سرعت خواندن اطلاعات از MySql


هدف ذخیره اطلاعات تعداد زیادی از کاربران در دیتابیس است به صورتی که با بالاترین پرفورمانس بتوان اطلاعات آنها را بازیابی کرد.

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

Table : users_search
Table : users_search

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

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

Table : users_info
Table : users_info

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

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

حجم جدول اول (users_search) تقریبا برابر با 100 مگابایت شده است. و جدول اصلی (users_info) حدود 400 مگابایت حجم دارد.

از طریق phpMyAdmin یک جستجو در جدول users_search انجام شد. به این شکل که یک ایمیل به خصوص باید یافت میشد. این جستجو در 0.7 ثانیه به نتیجه رسید. سپس در جدول users_info جستجو روی شناسه کاربر انجام شد. که اینبار در 0.003 ثانیه جستجو به نتیجه رسید.

با اینکه جدول users_info تقریبا 4 برابر حجم بالاتری دارد ولی سرعت جستجو به دلیل primary بودن شناسه کاربر به سرعت به نتیجه رسید.

(قابل توجه اینکه نوع دیسک از نوع SSD است.)

در آزمایش بعدی در جدول users_search ایمیل را نیز به ایندکس تبدیل کردیم تا سرعت جستجو افزایش پیدا کند. این کار باعث افزایش حجم این جدول از 100 مگابایت به 150 مگابایت شد. و در سرعت جستجو تغییر محسوسی ایجاد نکرد! باز هم همان 0.7 ثانیه شده بود.

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

جدول جستجوی ایمیل :

Table : users_search_email
Table : users_search_email

در این جدول ستون ایمیل برابر با کلید اصلی و پرایمری این جدول است و user_id نیز یک فیلد اطلاعاتی که همان شناسه کاربر می باشد. (جداول مشابهی نیز برای موبایل و کدملی کاربر ایجاد شد)


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

اینبار با جستجوی یک ایمیل در جدول فوق در 0.001 ثانیه نتیجه مورد نظر پیدا شد! یعنی افزایش 700 برابری سرعت!

بیگ دیتاmysqlبرنامه نویسی
ایده پرداز، طراح وب سایت، مدیر پروژه
شاید از این پست‌ها خوشتان بیاید