PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : راهنمایی در مورد طراحی دیتابیس



tik20
June 2nd, 2016, 18:39
سلام
بنده در حال طراحی یک سیستم هستم با زیان 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- برنامه ای برای طراحی دیتابیس وجود داره خوب باشه؟
باتشکر

be099
June 2nd, 2016, 19:17
سلام
بنده در حال طراحی یک سیستم هستم با زیان 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 چیزی فراتر از اونیه که خیلیا فکرشو میکنن

tik20
June 2nd, 2016, 19:57
مورد اولی در صورتی که تعداد لایک ها و همچنین طول رشته ی یوزر آی دی ها زیاد بشه قطعا به مشکل میخوره همچنین برای سایر محاسبات در آینده به مشکل میخورید
مثلا اینکه بخواید تعداد پست های لایک شده ی یک یوزرو پیدا کنید باید کل تیبل جستجو بشه + توابع کار با رشته ها در php هم باید درگیر بشه پس مورد اول کاملا منتفی میشه

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

واقعا ممنون از راهنماییتون
آیا روش دیگری هست که مناسبتر باشه؟

T.Toosi
June 2nd, 2016, 21:58
سلام، حالا ما که sql داریم بیایم کار ها را بسپاریم به او و از عملگر و دستورات sql استفاده کنیم که نیاز نباشد برای اکسپلود کردن و ساخت آرایه مموری را هدر دهیم، پس یک تیبیل جدا بسازید همراه با ریلشن و اونجا ذخیره کنید به تایین دیتا تایپ ها و استراکچری هم که میسازید دقت کنید که در آینده و در صورت سنگین شدن دیتابیس نتیجه عکس ندهد، اگر کاربر فقط یک کوئری دیتابیس دارد پس هربار کانکت کردن منطقی است در غیراین صورت شی ساخته شده از کانکت را در پراپرتی ای ذخیره و در دفعات بعد هم ازش استفاده کنید پیشنهاد میشود از کلاس های آماده mysql استفاده کنید.


2-آیا ممکنه اطلاعات به صورت کامل ذخیره نشه-حتی اگه سیستم timed out بشه؟

بله ممکن است اگر هنگام ارسال کوئری، دیتابیس ما از دسترس خارج شود اطلاعاتی ذخیره نخواهد شد.


3-آیا این مدلی فشار زیاد میشه؟

4- بالای چه تعداد ردیف برای یک تیبل فشار به سرور فشار میاره؟

بستگی به ساختار دیتابیس و دیتا تایپ و حجم اشغال شده دارد نمیشود یک عدد ثابت اعلام کرد.

میتوانید از SHOW FULL PROCESSLIST استفاده کنید در command برای مانیتور هر query

بگردید ساختار دیتابیس مدیریت محتوا های معروف را مشاهده کنید ببینید آنها از چه استراکچری استفاده کردند که کمک بزرگی به شما میکند.

ms313
June 4th, 2016, 14:27
بجای like , dislike هم از صفر و یک استفاده کنید
در ضمن وقتی می خواهید پستی رو دیس لایک کنید اگه قبلا لایک داشته دیگه دوباره دیس لایک ثبن نکنید همون رو آپدیت کنید !

miladtnt
June 4th, 2016, 14:36
سلام
بنده در حال طراحی یک سیستم هستم با زیان 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 استفاده میکنم و بهتر بم جواب داده !

و اینکه بخواین بعدا تعداد اینا بشمارین باز بهترین روشش اینه ک از الان یه شمارنده بزارین تا تعداد بشماره

روش دوم رو بهتون وقتی توصیه میکنم که هاستتون کیفیت بالا باشه و محدود نباشه در این صورت صد در صد بهتر هست