رفتن به مطلب

مشکل افزونگی داده در طراحی پایگاه برای افزونه لایک


پست های پیشنهاد شده

سلام به همگی،

در حال کدنویسی یه افزونه لایک برای وردپرس هستم که تا اینجای کار، طراحیش به صورتی بوده که تعداد لایک ها در یک postmeta با نام like_ اضافه میشن و اطلاعات مربوط به ip، زمان و ID هر نوشته، در یک جدول جدید در پایگاه داده.

خوب تا اینجای کار مشکلی نیست و برای محدود کردن کاربر به تنها یک لایک، از دوشرط بررسی وجود IP فعلی در پایگاه داده + ست کردن کوکی طولانی مدت، استفاده میشه.

منتها مسأله ای که وجود داره، اینه که فرض کنید یک نوشته رو حدودا 1000 تا کاربر لایک میکنند. حالا در ازای هر لایک، یک رکورد به پایگاه داده اضافه میشه که در نهایت -برای یک نوشته- حدودا 1000 سطر اطلاعات در پایگاه داده ذخیره خواهد شد که افزونگی داده رو به شدت بالا میبره.

حالا سؤال من از دوستان اینه که آیا روش بهتری وجود داره که هم مشکل افزونگی داده رو نداشته باشه و هم اینکه پیچیدگی کدهای PHP رو زیاد نکنه؟! (البته روش ذخیره همه ی آی پی ها به صورت یک String در یک سطر رو هم چندان جالب نمیبینم)

لینک به ارسال

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

برای رفع مشکل یک بار اطلاعات رو که unique هم هست در یک جدول جداگانه ذخیره کنید و چون ارتباط چند به چند هست یک جدول واسط ایجاد کنید و رکوردهای مرتبط رو با id-های اون‌ها به هم مرتبط کنید.

ویرایش شده توسط Anisi
لینک به ارسال

ممنون anisi عزیز،

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

خوب در این حالت، ip ها به چه صورت ذخیره خواهند شد؟!؟ همینطور فک میکنم در کلید ها هم مشابهت ایجاد بشه!!!

لینک به ارسال

mysql میتونه را راحتی تا چند ده میلیون رکورد رو به راحتی مدیریت کنه پس نگران این موضوع نباشید

ذخیره ایپی هم، اگه چند کاربر از یک پروکسی یا V-P-N استفاده کنند بقیه نمیتونن لایک کنن یا وقتی مودم ریست میشه ایپی عوض میشه

لینک به ارسال

mysql میتونه را راحتی تا چند ده میلیون رکورد رو به راحتی مدیریت کنه پس نگران این موضوع نباشید

ذخیره ایپی هم، اگه چند کاربر از یک پروکسی یا V-P-N استفاده کنند بقیه نمیتونن لایک کنن یا وقتی مودم ریست میشه ایپی عوض میشه

ممنون lord_viper عزیز،

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

البته اگه mac address رو ذخیره کنیم، دیگه این مشکل به وجود نمیاد. حالا با این اوضاع، به نظرت ست کردن کوکی میتونه به تنهایی کافی باشه؟!؟

لینک به ارسال

تمامی سیستمهایی که هست از کوکی استفاده میکنند و اطلاعات لایک رو در post_meta ذخیره میکنن

برای ثبت در مخزن وردپرس ، بیشتر روی نام گذاری توابع گیر میدن تا احتمالا وجود 2 تابع همنام در 2 پلاگین مختلف از بین بره

لینک به ارسال

والا دو افزونه wti و i like this هم اطلاعات ip و time رو در پایگاه داده ذخیره میکنند. البته به نظر من، نهایتا لایک مطالب اونقدرا هم از نظر امنیتی مهم نیس که بخوایم شرط های مختلفی براش تعیین کنیم! به همین دلیل شاید بهتر باشه جدول جدید رو از افزونه حذف کنم!!!!

لینک به ارسال

ذخیره اطلاعات ip کار اضافه ایه چون من هر چی فکر می کنم متوجه کارآییش نمی شم ولی ذخیره آی دی کاربران لینک کننده برای اینکه بشه ازشون کوئری گرفت و مثلا لیستشون رو نمایش داد کار خوبیه

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

لینک به ارسال

ممنونم جناب فخار،

با نظرتون موافقم. ذخیره ی ID کاربر خیلی خوبه ولی متأسفانه عیبش اینه که شخص رو مجبور به نام نویسی و لوگین میکنه، در حالی که شاید خیلی از وبسایتها سیاست ثبتنام رو در سایتشون نداشته باشن! (البته میشه یه تنظیماتی هم برای این حالت تعیین کرد که خود شخص تصمیم بگیره که کاربر باید لوگین کنه یا نه!)

برای نمایش تعداد لایک ها، همونطور که خودتون هم اشاره کردید از postmeta استفاده کردم و با استفاده از چند شرط ساده، کلا نیازی به استفاده از حلقه نشد.

حالا تو این شرایط، به نظر شما بهترین کار چی میتونه باشه؟!؟

لینک به ارسال

شما که کار رو انجام دادید قطعا بهترین شرایط همونه که ایجاد کردید

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

سورس این افزونه رو هم ببینید بد نیست

http://wordpress.org/plugins/thanks-you-counter-button/

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...