humehr garivani
10 ماه پیش توسط humehr garivani مطرح شد
5 پاسخ

سرعت دیتابیس

سلام یک جدول با 5 میلیون رکورد هست سرعتش خیلی پایینه
چه کاری به نظرتون باید انجام بدم mysql هستش


ثبت پرسش جدید
محمدجوکار
تخصص : دانشجوی برنامه‌نویسی
@mjokarr 10 ماه پیش مطرح شد
0

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

استفاده از سیستم کش خیلی موثره، من بیشتر از همه فکر میکنم کوئری‌ها درست زده نمیشن که سرعتتون پاینه. خیلی مهمه از الکوئنت درست استفاده کنید، یه ایگر لودینگ ساده، کلی از کاهش سرعت کم میکنه.. حتما چک کنید که کوئری‌هایی که توی ریلیشن میخوره دقیق و با رعایت پرفورمنس باشن، گاهی شاید نیاز باشه برای سرعت بیشتر از raw کوئری ها استفاده کنید حتی.

و قطعا وقتی حجم داده‌ها بالان، سیستم سرور هم مهمه.
نمیدونم دقیقا چه مشکلی داره پروژه شما، برای همین رندوم توضیحاتی دادم ک شاید با مرور کردنشون، بهتون کمک شه‌.
امیدوارم اکی شه، موفق باشی


یونس نورزهی
تخصص : FullStack
@younes.nz 4 هفته پیش آپدیت شد
0

دیتابیس اصولا mysql هستش ولی باید حجم این داده ها رو باید بیاری پایین.
همونطور که آقای @mjokarr نظر دادن


Ar4min
تخصص : Backend Developer
@ar4min 3 هفته پیش مطرح شد
0

استفاده از دیتابیس shared و رپلیکا .


Amir Mohsen
تخصص : Laravel
@ama1372 2 هفته پیش مطرح شد
0

وقتی حجم داده زیاده بهترین و اولین انتخاب باید ایندکس های ترکیبی زدن باشه چون وقتی ایندکس ها مجزا باشن هر بار مجزا منابع سخت افزاری استفاده میشن ولی وقتی ترکیبی بخصوص با and زدن بین ایندکس ها باشه به محض پیدا شدن رکورد مورد نظر در دو یا چند ستون مورد نظر پردازش سریع تر تمام میشه.


mahdi khanzadi
تخصص : Software engineer
@khanzadimahdi 1 هفته پیش مطرح شد
0

بهتره که مراحل زیر رو انجام بدی:
۱- اول کوئری خودتو اجرا کنی ببینی چقدر طول میکشه و تایمشو یادداشت کنی
۲- همون کوئری رو با دستور explain اجرا کن و ببین توی کدوم مرحله زمان بیشتری سپری میشه مثلا به صورت زیر:

EXPLAIN FORMAT=TREE
SELECT first_name, last_name, SUM(amount) AS total
FROM staff INNER JOIN payment
  ON staff.staff_id = payment.staff_id
     AND
     payment_date LIKE '2005-08%'
GROUP BY first_name, last_name;

بعدش روی جاهایی که توی کوئری زمان بیشتری سپری میشه سعی کن تمرکز کنی و اونجاها رو یا تغییر ساختار بدی یا ایندکس کنی (در صورتی که میشه ایندکس کرد).
برای مثال:

  • ساختار های json کوئری رو کند میکنن و اگه مرتب یه چیزی رو توی جی سان میگردی بهتره اونو یه field از جدولت در نظر بگیری و index کنی.
  • بهتره نوع های ایندکس رو بشناسی و بدونی کدوم برای شرایط تو مناسب تره! مثلا اگه دوتا فیلد a و b رو از یه جدول باهم توی where قرار میدی
  • بهتره که از composite index استفاده کنی و یا اگه جستجوی متنی انجام میدی توی یک رشته ی متنی که بزرگ هست بهتره full text index کنی یا اینکه دیتا رو روی یه جای دیگه ای ایندکس کنی (مثلا typesense یا meilisearch و یا ابزارهای با قابلیت های بیشتر مثل elastic search)
  • در نهایت اگه کوئری های گزارش گیری داری و توش کارهای سنگین انجام میشه بهتره که یا اون کار رو اخر شب ها انجام بدی و کش کنی یا اینکه راه های async رو چک کنی. مثلا ساخت CDC که تغییرات اطلاعات رو بررسی کنه و کوئری رو اجرا کنه و اطلاعات رو کش کنه (بستگی به شرایطی داره که توش هستی و ممکنه این راه حل بدردت نخوره)
  • در نهایت میتونی دیتابیس رو پارتیشن و یا شارد و یا کلاستر کنی. مثلا واسه شارد کردن میتونی هر یک میلیون اطلاعات رو توی یک دیتابیس ذخیره کنی و بعدش یه map از id <> DB داشته باشی که اونجا هردو کلید ID و DB ایندکس شده باشن. اینجوری میتونی اول یه lookup بزنی و اسم دیتابیس رو در بیاری و بعدش توی حجم کمتری از اطلاعات جستجو رو انجام بدی.

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

موفق باشی.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام