thevil
3 سال پیش توسط thevil مطرح شد
4 پاسخ

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

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


ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش آپدیت شد
3

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

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

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

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

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


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 3 سال پیش آپدیت شد
0

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


thevil
تخصص : برنامه نویس خسته
@thevilgh 3 سال پیش مطرح شد
0

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


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش آپدیت شد
3

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

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

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

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

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


عرفان کاهانی
تخصص : برنامه نویس
@kahania726 3 سال پیش مطرح شد
-2

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


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

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