-
راهنمایی در مورد طراحی دیتابیس
سلام
بنده در حال طراحی یک سیستم هستم با زیان php
در قسمت طراحی دیتابیسش برام شک به وجود اومده
بنده یدونه تیبل posts خواهم داشت و در هر ردیف از هر پست میخوام آیدی کاربرانی که به این پست لایک دادند رو در یک ستون با نام liked_users به صورتی که ایدی کاربران با "," جدا بشه در اون سیو کنم
به اینصورت:
(تیبل posts)
date |
liked_users |
content |
id |
2342352424 |
123,324,2345,24,2342,234,2342 |
salam |
12 |
1-من با استفاده از concat در هر مرحله کاربر جدید رو اضافه میکنم به liked_users آیا این کار درستی هست؟
2-آیا ممکنه اطلاعات به صورت کامل ذخیره نشه-حتی اگه سیستم timed out بشه؟
و یک سوال دیگر:
اگه بخوام به جای این کار یدونه تیبل با نام liked_users باز کنم به صورت زیر:
(تیبل liked_users):
like_type |
user_id |
post_id |
like |
324 |
12 |
dislike |
123 |
12 |
dislike |
2342 |
12 |
like |
2345 |
12 |
یعنی به صورتی که برای لایک هر شخص یک ردیف ایجاد بشه
3-آیا این مدلی فشار زیاد میشه؟
4- بالای چه تعداد ردیف برای یک تیبل فشار به سرور فشار میاره؟
5-آیا روش مشخصی برای محاسبه فشار هست؟
6- برنامه ای برای طراحی دیتابیس وجود داره خوب باشه؟
باتشکر
-
-
June 2nd, 2016 18:39
# ADS
-
عضو انجمن
پاسخ : راهنمایی در مورد طراحی دیتابیس

نوشته اصلی توسط
tik20
سلام
بنده در حال طراحی یک سیستم هستم با زیان php
در قسمت طراحی دیتابیسش برام شک به وجود اومده
بنده یدونه تیبل posts خواهم داشت و در هر ردیف از هر پست میخوام آیدی کاربرانی که به این پست لایک دادند رو در یک ستون با نام liked_users به صورتی که ایدی کاربران با "," جدا بشه در اون سیو کنم
به اینصورت:
(تیبل posts)
date |
liked_users |
content |
id |
2342352424 |
123,324,2345,24,2342,234,2342 |
salam |
12 |
1-من با استفاده از concat در هر مرحله کاربر جدید رو اضافه میکنم به liked_users آیا این کار درستی هست؟
2-آیا ممکنه اطلاعات به صورت کامل ذخیره نشه-حتی اگه سیستم timed out بشه؟
و یک سوال دیگر:
اگه بخوام به جای این کار یدونه تیبل با نام liked_users باز کنم به صورت زیر:
(تیبل liked_users):
like_type |
user_id |
post_id |
like |
324 |
12 |
dislike |
123 |
12 |
dislike |
2342 |
12 |
like |
2345 |
12 |
یعنی به صورتی که برای لایک هر شخص یک ردیف ایجاد بشه
3-آیا این مدلی فشار زیاد میشه؟
4- بالای چه تعداد ردیف برای یک تیبل فشار به سرور فشار میاره؟
5-آیا روش مشخصی برای محاسبه فشار هست؟
6- برنامه ای برای طراحی دیتابیس وجود داره خوب باشه؟
باتشکر
مورد اولی در صورتی که تعداد لایک ها و همچنین طول رشته ی یوزر آی دی ها زیاد بشه قطعا به مشکل میخوره همچنین برای سایر محاسبات در آینده به مشکل میخورید
مثلا اینکه بخواید تعداد پست های لایک شده ی یک یوزرو پیدا کنید باید کل تیبل جستجو بشه + توابع کار با رشته ها در php هم باید درگیر بشه پس مورد اول کاملا منتفی میشه
پس قطعا باید از مورد دوم استفاده کنید و همچنین اینکس روی فیلد های پست و یوزر آیدی فراموش نشه
فشار هم اینطور بهتون بگم که اگر تعداد رکورد ها به یک میلیون هم برسه با یک cpu تک هسته ای ، کوئری پیدا کردن لایک های یک پست چیزی کمتر از 0.01 ثانیه میشه حتی اگه تیبل از نوع myisam باشه
mysql چیزی فراتر از اونیه که خیلیا فکرشو میکنن
-
تعداد تشکر ها ازbe099 به دلیل پست مفید
-
پاسخ : راهنمایی در مورد طراحی دیتابیس

نوشته اصلی توسط
be099
مورد اولی در صورتی که تعداد لایک ها و همچنین طول رشته ی یوزر آی دی ها زیاد بشه قطعا به مشکل میخوره همچنین برای سایر محاسبات در آینده به مشکل میخورید
مثلا اینکه بخواید تعداد پست های لایک شده ی یک یوزرو پیدا کنید باید کل تیبل جستجو بشه + توابع کار با رشته ها در php هم باید درگیر بشه پس مورد اول کاملا منتفی میشه
پس قطعا باید از مورد دوم استفاده کنید و همچنین اینکس روی فیلد های پست و یوزر آیدی فراموش نشه
فشار هم اینطور بهتون بگم که اگر تعداد رکورد ها به یک میلیون هم برسه با یک cpu تک هسته ای ، کوئری پیدا کردن لایک های یک پست چیزی کمتر از 0.01 ثانیه میشه حتی اگه تیبل از نوع myisam باشه
mysql چیزی فراتر از اونیه که خیلیا فکرشو میکنن
واقعا ممنون از راهنماییتون
آیا روش دیگری هست که مناسبتر باشه؟
-
-
عضو دائم
پاسخ : راهنمایی در مورد طراحی دیتابیس
سلام، حالا ما که sql داریم بیایم کار ها را بسپاریم به او و از عملگر و دستورات sql استفاده کنیم که نیاز نباشد برای اکسپلود کردن و ساخت آرایه مموری را هدر دهیم، پس یک تیبیل جدا بسازید همراه با ریلشن و اونجا ذخیره کنید به تایین دیتا تایپ ها و استراکچری هم که میسازید دقت کنید که در آینده و در صورت سنگین شدن دیتابیس نتیجه عکس ندهد، اگر کاربر فقط یک کوئری دیتابیس دارد پس هربار کانکت کردن منطقی است در غیراین صورت شی ساخته شده از کانکت را در پراپرتی ای ذخیره و در دفعات بعد هم ازش استفاده کنید پیشنهاد میشود از کلاس های آماده mysql استفاده کنید.
2-آیا ممکنه اطلاعات به صورت کامل ذخیره نشه-حتی اگه سیستم timed out بشه؟
بله ممکن است اگر هنگام ارسال کوئری، دیتابیس ما از دسترس خارج شود اطلاعاتی ذخیره نخواهد شد.
3-آیا این مدلی فشار زیاد میشه؟
4- بالای چه تعداد ردیف برای یک تیبل فشار به سرور فشار میاره؟
بستگی به ساختار دیتابیس و دیتا تایپ و حجم اشغال شده دارد نمیشود یک عدد ثابت اعلام کرد.
میتوانید از SHOW FULL PROCESSLIST استفاده کنید در command برای مانیتور هر query
بگردید ساختار دیتابیس مدیریت محتوا های معروف را مشاهده کنید ببینید آنها از چه استراکچری استفاده کردند که کمک بزرگی به شما میکند.
-
تعداد تشکر ها ازT.Toosi به دلیل پست مفید
-
پاسخ : راهنمایی در مورد طراحی دیتابیس
بجای like , dislike هم از صفر و یک استفاده کنید
در ضمن وقتی می خواهید پستی رو دیس لایک کنید اگه قبلا لایک داشته دیگه دوباره دیس لایک ثبن نکنید همون رو آپدیت کنید !
-
-
عضو انجمن
پاسخ : راهنمایی در مورد طراحی دیتابیس

نوشته اصلی توسط
tik20
سلام
بنده در حال طراحی یک سیستم هستم با زیان php
در قسمت طراحی دیتابیسش برام شک به وجود اومده
بنده یدونه تیبل posts خواهم داشت و در هر ردیف از هر پست میخوام آیدی کاربرانی که به این پست لایک دادند رو در یک ستون با نام liked_users به صورتی که ایدی کاربران با "," جدا بشه در اون سیو کنم
به اینصورت:
(تیبل posts)
date |
liked_users |
content |
id |
2342352424 |
123,324,2345,24,2342,234,2342 |
salam |
12 |
1-من با استفاده از concat در هر مرحله کاربر جدید رو اضافه میکنم به liked_users آیا این کار درستی هست؟
2-آیا ممکنه اطلاعات به صورت کامل ذخیره نشه-حتی اگه سیستم timed out بشه؟
و یک سوال دیگر:
اگه بخوام به جای این کار یدونه تیبل با نام liked_users باز کنم به صورت زیر:
(تیبل liked_users):
like_type |
user_id |
post_id |
like |
324 |
12 |
dislike |
123 |
12 |
dislike |
2342 |
12 |
like |
2345 |
12 |
یعنی به صورتی که برای لایک هر شخص یک ردیف ایجاد بشه
3-آیا این مدلی فشار زیاد میشه؟
4- بالای چه تعداد ردیف برای یک تیبل فشار به سرور فشار میاره؟
5-آیا روش مشخصی برای محاسبه فشار هست؟
6- برنامه ای برای طراحی دیتابیس وجود داره خوب باشه؟
باتشکر
من روش اول رو توصیه میکنم منتها از
json_encode استفاده میکنم و بهتر بم جواب داده !
و اینکه بخواین بعدا تعداد اینا بشمارین باز بهترین روشش اینه ک از الان یه شمارنده بزارین تا تعداد بشماره
روش دوم رو بهتون وقتی توصیه میکنم که هاستتون کیفیت بالا باشه و محدود نباشه در این صورت صد در صد بهتر هست
-
تعداد تشکر ها ازmiladtnt به دلیل پست مفید