سلام ، من یه جدول polymorphic
برای like
هام درست کردم و میخواهم تعداد لایک های یک model
رو برگردونم ، میدونیم که از طریق ریلشن شیپ میشه تعداد لایک ها رو برگردوند و همچنین میشه یه فیلد like_count
تو model
مد نظر مثل مقالات ایجاد کرد. میخواستم بدونم کدوم راه اصولی تر و بهتره واسه نمایش تعداد لایک ها و یا حتی کامنت های یک model ؟
سلام.
اولا شما مجبور هستید که گزارش لایک ها رو در یک جدول جداگانه داشته باشید تا مشخص باشه کدام کاربران، کدام مدل ها رو لایک کردند و یکسری اطلاعات تکمیلی تر مثل زمان انجام لایک و ...
پس شما نمیتونید صرفا یک فیلد likecount در مدلتون داشته باشید و قضیه ناقص میمونه اینطوری. (مگر اینکه مثلا براتون اهمیت زیادی نداشته باشه که یک کاربر دو بار یک مدل رو لایک کنه)
خوب پس با این مقدمه، نیازمند یک جدول جداگانه و رابطه یک به چند هستیم. حالا با توجه به اینکه احتمالا مدلهای دیگری هم دارید که از همین منطق لایک و کامنت و ... استفاده میکنند، پس منطقا بهتره از روابط polymorphic استفاده بشه که کار رو خیلی تمیزتر میکنند.
در خصوص دغدغه تون برای بحث سرعت و بهرهوری هم، اولا دقت کنید موقع کوئری زدن برای گرفتن لایک ها از جدول مخصوصش بجای get حتما از count استفاده کنید که تفاوت زیادی بینشون هست و بعضی ها به اشتباه get میکنند و بعد خروجی رو میشمارند.
ثانیا حتما از composit index در جدول کامنت ها استفاده کنید.
و آخر اینکه یک راهکار دیگه هم این هست که به نحوی از Cache استفاده کنید و مجموع تعداد لایک ها رو یکبار کش کنید و برای استفاده های آتی بجای کوئری زدن به دیتابیس، اگر موجود بود همون کش رو برگردونید. مجددا تاثیر بسیار زیادی در بهرهوری خواهد داشت.
@juza66 اینکه برای حساب کردن تعداد لایک ها باید بره و جستجو انجام بده مشکلی نداره ؟ ( قطعا تو جدولی با تعداد کمی ریکورد هیچ فرقی نمی کنه ، فقط میخواستم بدونم در صورت زیاد شدن ریکورد ها تاثیری داره روش ثانویه ؟ )
سلام.
اولا شما مجبور هستید که گزارش لایک ها رو در یک جدول جداگانه داشته باشید تا مشخص باشه کدام کاربران، کدام مدل ها رو لایک کردند و یکسری اطلاعات تکمیلی تر مثل زمان انجام لایک و ...
پس شما نمیتونید صرفا یک فیلد likecount در مدلتون داشته باشید و قضیه ناقص میمونه اینطوری. (مگر اینکه مثلا براتون اهمیت زیادی نداشته باشه که یک کاربر دو بار یک مدل رو لایک کنه)
خوب پس با این مقدمه، نیازمند یک جدول جداگانه و رابطه یک به چند هستیم. حالا با توجه به اینکه احتمالا مدلهای دیگری هم دارید که از همین منطق لایک و کامنت و ... استفاده میکنند، پس منطقا بهتره از روابط polymorphic استفاده بشه که کار رو خیلی تمیزتر میکنند.
در خصوص دغدغه تون برای بحث سرعت و بهرهوری هم، اولا دقت کنید موقع کوئری زدن برای گرفتن لایک ها از جدول مخصوصش بجای get حتما از count استفاده کنید که تفاوت زیادی بینشون هست و بعضی ها به اشتباه get میکنند و بعد خروجی رو میشمارند.
ثانیا حتما از composit index در جدول کامنت ها استفاده کنید.
و آخر اینکه یک راهکار دیگه هم این هست که به نحوی از Cache استفاده کنید و مجموع تعداد لایک ها رو یکبار کش کنید و برای استفاده های آتی بجای کوئری زدن به دیتابیس، اگر موجود بود همون کش رو برگردونید. مجددا تاثیر بسیار زیادی در بهرهوری خواهد داشت.
اولا شما مجبور هستید که گزارش لایک ها رو در یک جدول جداگانه داشته باشید تا مشخص باشه کدام کاربران، کدام مدل ها رو لایک کردند و یکسری اطلاعات تکمیلی تر مثل زمان انجام لایک و ...
پس شما نمیتونید صرفا یک فیلد likecount در مدلتون داشته باشید و قضیه ناقص میمونه اینطوری. (مگر اینکه مثلا براتون اهمیت زیادی نداشته باشه که یک کاربر دو بار یک مدل رو لایک کنه)
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟