راکت
حل شده

کدوم روش بهترین راه برای گرفتن تعداد لایک است

4 پاسخ

سلام ، من یه جدول polymorphic برای like هام درست کردم و میخواهم تعداد لایک های یک model رو برگردونم ، میدونیم که از طریق ریلشن شیپ میشه تعداد لایک ها رو برگردوند و همچنین میشه یه فیلد like_count تو model مد نظر مثل مقالات ایجاد کرد. میخواستم بدونم کدوم راه اصولی تر و بهتره واسه نمایش تعداد لایک ها و یا حتی کامنت های یک model ؟

thevil
thevil
@thevilgh
ثبت پرسش جدید

پاسخ‌ها

4
محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

بهترین پاسخ

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

خوب پس با این مقدمه، نیازمند یک جدول جداگانه و رابطه یک به چند هستیم. حالا با توجه به اینکه احتمالا مدلهای دیگری هم دارید که از همین منطق لایک و کامنت و ... استفاده می‌کنند، پس منطقا بهتره از روابط polymorphic استفاده بشه که کار رو خیلی تمیزتر می‌کنند.

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

ثانیا حتما از composit index در جدول کامنت ها استفاده کنید.

و آخر اینکه یک راهکار دیگه هم این هست که به نحوی از Cache استفاده کنید و مجموع تعداد لایک ها رو یکبار کش کنید و برای استفاده های آتی بجای کوئری زدن به دیتابیس، اگر موجود بود همون کش رو برگردونید. مجددا تاثیر بسیار زیادی در بهره‌وری خواهد داشت.

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

ذخیره لایک ها توی جدول و استفاده از polymorphic ریلیشن

thevil
thevil
@thevilgh

تخصص: برنامه نویس خسته

@juza66 اینکه برای حساب کردن تعداد لایک ها باید بره و جستجو انجام بده مشکلی نداره ؟ ( قطعا تو جدولی با تعداد کمی ریکورد هیچ فرقی نمی کنه ، فقط میخواستم بدونم در صورت زیاد شدن ریکورد ها تاثیری داره روش ثانویه ؟ )

شاید پاسخ شما همین‌جا باشد

عرفان کاهانی
عرفان کاهانی
@kahania726

تخصص: برنامه نویس

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

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

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