PDA

View Full Version : حرفه ای: سیستم لایک و دیسلایک پیشرفته



mo7300
جمعه 14 اردیبهشت 1397, 15:59 عصر
سلام
میخوام یه سیستم لایک و دیسلایک برای نظرات بسازم براساس آیدی کاربران مانند سایت زومیت که هر کاربر برای هر نظر فقط یه باز بتونه رای بده
نمیخوام از روش های ساده استفاده کنم چون با بالا رفتن جحم اطلاعات و کاربران و همچنین تعداد نظرات قطعا سیستم کند خواهد شد
میخواستم بدونم سایت زومیت از چه فناوری استفاده کرده که با این جحم زیاد اطلاعات سیستمشون کوچکترین مشکلی و کندی نداره
148103

مهدی کرامتی
شنبه 15 اردیبهشت 1397, 14:03 عصر
نمیخوام از روش های ساده استفاده کنم چون با بالا رفتن جحم اطلاعات و کاربران و همچنین تعداد نظرات قطعا سیستم کند خواهد شد
خوب شما به چه روشی می گی ساده و به چه روشی میگی روش پیشرفته؟
اگر در دیتابیس یک جدول ساده درست کنید (مثلا به نام Likes) که شناسه کاربر، شناسه مطلب، و نتیجه Like یا Dislike که می تونه یک ستون bit باشه رو نگهداری کنید کندی ای نخواهید داشت.
روی دکمه Like و Disklike هم می توانید یک کد Ajax قرار دهید که ردیف زیر رو پر کنه. در صورت استفاده از چنین سیستمی بهتره کاربر روی برای استفاده از سیستم فوق مجبور کنید که ثبت نام کنه تا بتوانید ID کاربر رو بدست بیاورید. وگرنه مجبورید نتیجه عملیات رو در کوکی نگهداری کنید که محل قابل اعتمادی برای نگهداری داده ای که تعیین می کنه این کاربر اجازه رای دادن مجدد داره یا نه، محسوب نمیشه.

hakim22
شنبه 15 اردیبهشت 1397, 21:12 عصر
سایتهایی که ترافیک بالایی دارند و میخوان پاسخدهی رو همچنان بهینه نگه دارن معمولا از معماری میکروسرویس استفاده میکنند. مثلا قسمت نظرات سایت خودش یک سایت مجزا با دیتابیس خودش و ... میشه و در یک سرور دیگه اجرا میشه (جدا از سرور اصلی). اینجوری ترافیک کامنت ها روی ترافیک سایت اصلی تاثیر نداره.

اگر به هر دلیلی سرور مربوط به کامنتها کند بشه تاثیر مستقیم روی سایت اصلی نداره .

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

حداقل باید سایت و دیتابیس رو جدا کنید و چه بهتر که هر کدوم در سرور جدا کار کنند

mo7300
شنبه 15 اردیبهشت 1397, 21:17 عصر
خوب شما به چه روشی می گی ساده و به چه روشی میگی روش پیشرفته؟
اگر در دیتابیس یک جدول ساده درست کنید (مثلا به نام Likes) که شناسه کاربر، شناسه مطلب، و نتیجه Like یا Dislike که می تونه یک ستون bit باشه رو نگهداری کنید کندی ای نخواهید داشت.
روی دکمه Like و Disklike هم می توانید یک کد Ajax قرار دهید که ردیف زیر رو پر کنه. در صورت استفاده از چنین سیستمی بهتره کاربر روی برای استفاده از سیستم فوق مجبور کنید که ثبت نام کنه تا بتوانید ID کاربر رو بدست بیاورید. وگرنه مجبورید نتیجه عملیات رو در کوکی نگهداری کنید که محل قابل اعتمادی برای نگهداری داده ای که تعیین می کنه این کاربر اجازه رای دادن مجدد داره یا نه، محسوب نمیشه.

این موردی که شما میگین در موقع بارگذاری خیلی عملیات لازم داره تا برای هر نظر تعداد لایک ودیسلایک رو محاسبه کنه مخصوصا اگر کاربران سایت خیلی زیاد باشه
روش دیگه ایی نیست مثل استفاده از json که تمام اطلاعات در یک سطر نگهداری بشه؟؟

مهدی کرامتی
شنبه 15 اردیبهشت 1397, 21:29 عصر
این موردی که شما میگین در موقع بارگذاری خیلی عملیات لازم داره تا برای هر نظر تعداد لایک ودیسلایک رو محاسبه کنه مخصوصا اگر کاربران سایت خیلی زیاد باشه
روش دیگه ایی نیست مثل استفاده از json که تمام اطلاعات در یک سطر نگهداری بشه؟؟
اینهایی که شما گفتی میشه 2 تا کوئری. اگر هم ایندکس گذاری صحیح داشته باشید مشکل سرعت و لود سرور نخواهید داشت. مثال عملی اش همین سایت برنامه نویس خودمون هست. تعداد کاربران ثبت شده در دیتابیس نزدیک به 500.000 نفر است، در هر لحظه خاص هم به صورت میانگین 500 نفر آنلاین هستند، تعداد ردیف های جدول پست بیش از 2.5 میلیون ردیف است. خوب شما مشکلی تو لود شدن سایت می بینید یا در سرعتش؟ خیر.
مثل موردی که جناب hakim22 فرمودند هم از سرور جداگانه و میکروسرویس استفاده نشده است. برای لود هر صفحه هم بین 50 تا 100 کوئری به دیتابیس زده میشه.


روش دیگه ایی نیست مثل استفاده از json که تمام اطلاعات در یک سطر نگهداری بشه؟؟
خوب شما این طوری می خواهید لود پردازش رو از روی گردن دیتابیس سرور که کار اصلی اش همین پردازش های داده ای است بردارید، بگذارید رو Ram و CPU سیستم که هر بار اون JSON رو Deserialize کنید، تحلیل کنید، و محاسبه کنید؟! :گیج:

Mohammad_dn
دوشنبه 17 اردیبهشت 1397, 13:44 عصر
خوب شما به چه روشی می گی ساده و به چه روشی میگی روش پیشرفته؟
اگر در دیتابیس یک جدول ساده درست کنید (مثلا به نام Likes) که شناسه کاربر، شناسه مطلب، و نتیجه Like یا Dislike که می تونه یک ستون bit باشه رو نگهداری کنید کندی ای نخواهید داشت.
روی دکمه Like و Disklike هم می توانید یک کد Ajax قرار دهید که ردیف زیر رو پر کنه. در صورت استفاده از چنین سیستمی بهتره کاربر روی برای استفاده از سیستم فوق مجبور کنید که ثبت نام کنه تا بتوانید ID کاربر رو بدست بیاورید. وگرنه مجبورید نتیجه عملیات رو در کوکی نگهداری کنید که محل قابل اعتمادی برای نگهداری داده ای که تعیین می کنه این کاربر اجازه رای دادن مجدد داره یا نه، محسوب نمیشه.

به نظر منم همین روش از همه بهتره..هم سرعتش خوبه(بسته به نحوه ی لود اطلاعاتتون) هم خیلی اسون میشه نوشتش

پروگرامنویس
سه شنبه 18 اردیبهشت 1397, 13:19 عصر
بنظر دوستان محدود کردن کاربران از روی آی.پی آدرس شخص(ثبت آی.پی کاربر-آی.دی پست و آی.دی دیدگاه مورد نظر در یک جدول جداگانه) بجای استفاده از آی.دی کاربران نام نویسی شده چطوره؟ اینجوری برای رای دهی دیگه لزوما اجباری برای ثبت نام نیست آیا ولی امکان داره راهی برای دور زدنش باشه؟

mo7300
چهارشنبه 26 اردیبهشت 1397, 00:03 صبح
بنظر دوستان محدود کردن کاربران از روی آی.پی آدرس شخص(ثبت آی.پی کاربر-آی.دی پست و آی.دی دیدگاه مورد نظر در یک جدول جداگانه) بجای استفاده از آی.دی کاربران نام نویسی شده چطوره؟ اینجوری برای رای دهی دیگه لزوما اجباری برای ثبت نام نیست آیا ولی امکان داره راهی برای دور زدنش باشه؟
معمولا زمانی که کاربر مودم رو خاموش رو روشن کنه IP عوض میشه