PDA

View Full Version : سوال راجع به بانک و پی اچ پی



arenaw
یک شنبه 20 اسفند 1391, 01:19 صبح
سلام، ببخشید توی بخش اس کیو ال نمیشد تاپیک زد گفتم اینجا همه 100% با اس کیو ال کار کردن اینجا بپرسم.

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

مهرداد سیف زاده
یک شنبه 20 اسفند 1391, 07:14 صبح
در مورد سایتهایی مثل فیس بوک و گوگل باید گفت این سایت‌ها از پایگاه داده‌های عادی استفاده نمیکنند بلکه از big data و no-sql (http://shabakeh-mag.com/article.aspx?id=1006937) استفاده میکنند.
ولی شاید سوال شما از نظر تکنیکی باشه که چطور این رابطه بین مطلب و کامنت و لایک برقرار میشه. جواب این ایجاد رابطه در جداول هست بهش میگن relation table (http://net.tutsplus.com/tutorials/databases/sql-for-beginners-part-3-database-relationships/). جدولی برای کامنت هست، جدولی برای تعداد لایک هر مطلب، خود مطلب و خلاصه بیشتر بخشها رو جدول بندی میکنن و بعد بینشون ارتباط برقرار میکنن. البته امکان داره برای مجتمع سازی بعضی از جداول رو با هم یکی کنن.

MMSHFE
یک شنبه 20 اسفند 1391, 08:48 صبح
در تأیید و تکمیل توضیحات دوستمون این نکته هم بد نیست گفته بشه که FaceBook و امثال اون از تکنولوژیهایی مثل Cloud Processing و Super Computerها استفاده میکنن که اینقدر سرعت و قدرت پردازش دارن. برای مثال توی سایت YouTube چند وقت پیش که بهشون ایمیل زدم و پرسیدم گفتن خودشون هم دقیقاً نمیدونن چندتا سرور اَبَرکامپیوتر دارن که بصورت Cloud بهم وصل شده و پردازشها رو با هم انجام میدن ولی حدس میزنن بالای 200 تا باشه. دقت کنید 200 سرور معمولی نه ها، 200 عدد Super Computer که هرکدوم چند صد و یا حتی چند هزار پردازنده و چندین ترابایت RAM و... داره.

arenaw
دوشنبه 21 اسفند 1391, 15:35 عصر
ممنون از جوابتون، به نظرتون به جای اینکه یه تیبل به اسم کامنت داشته باشم و بخوام کل کامنتایی که تو کل پستهایی که تو لوکیشن های مختلف هست رو توش بریزم، بیام مثلا واسه هر پست یا هر لوکیشن یه تیبل جدا گونه درست کنم؟ البته یه بدی ای که داره اینه که اینجوری خیلی سخت میشه که بخوام مثلا کامنتایی که یه نفر خاص گذاشته رو پیدا کنم، ولی کلا نظرتون رو میخواستم بدونم (من تازه یه هفتس کار با اس کیو ال و پی اچ پی رو شروع کردم اگه این مطلبم خنده داره ببخشید)

SlowCode
دوشنبه 21 اسفند 1391, 15:46 عصر
به نظرتون به جای اینکه یه تیبل به اسم کامنت داشته باشم و بخوام کل کامنتایی که تو کل پستهایی که تو لوکیشن های مختلف هست رو توش بریزم، بیام مثلا واسه هر پست یا هر لوکیشن یه تیبل جدا گونه درست کنم؟
نه فکرشو بکن!!!
تعداد پستها ممکنه بعد مدتی به هزاران پست برسه با این روش باید 1000 تا جدول فقط واسه نظرات باشه، که هم کار رو سخت میکنه هم سرعت پردازشت میاد پایین* همه چی شلوغ میشه و احتمال داره که اشتباه کنی.
استفاده از یه جدول ساده تر و بهتره.

arenaw
دوشنبه 21 اسفند 1391, 15:59 عصر
نه فکرشو بکن!!!
تعداد پستها ممکنه بعد مدتی به هزاران پست برسه با این روش باید 1000 تا جدول فقط واسه نظرات باشه، که هم کار رو سخت میکنه هم سرعت پردازشت میاد پایین* همه چی شلوغ میشه و احتمال داره که اشتباه کنی.
استفاده از یه جدول ساده تر و بهتره.
اشتباه چرا؟ من مثلا به پی اچ بی میگم همون موقع که پست گذاشته شد یه تیبل به اسم ('آیدی اون پست' + 'آیدی لوکیشنش') درست کنه که خب صد درصد یه اسمی از آب در میاد که به اون اسم تیبل دیگه ای نیستش، موقع لودشم که خب مشخصه.
ولی اینکه میگید سرعت پردازش میاد پایین، ینی اینکه اگه تعداد تیبل هام زیاد بشه، با توجه به اینکه اسم تیبلی که میخوام رو میدونم و فقط کافیه یه SELECT * بزنم، سرعتش کمتر از وقتیه که از یه تیبلی که شاید رکورداش هزار برابر اون باشه و بخوام با شرط کامنتامشو لود کنم هستش؟

MMSHFE
دوشنبه 21 اسفند 1391, 16:02 عصر
ببینید، سرعت کار شما اینطوری خیلی پایین میاد چون یک دیتابیس توی MySQL وجود داره به نام information_schema که وظیفه نگهداری ساختار جداول و فیلدها و... رو برعهده داره و با این کار شما، اون جدول به شدت سنگین میشه و درنتیجه سرعت کلی موتور MySQL کاهش شدیدی پیدا میکنه و روی هاست واقعی هم به احتمال زیاد اکانت شما رو مسدود خواهند کرد. بهتره یک جدول بگذارین و بعد با یک فیلد، نظرات رو به مطالب مرتبط کنید.