PDA

View Full Version : منابع و نظرات اساتید در خصوص پروژه SocialNetwork



Hamidreza Bozorg
جمعه 03 مرداد 1393, 16:48 عصر
باسلام به همگی
می خواستم سوالاتی در باره راه اندازی جامعه مجازی بپرسم ( بدون استفاده از CMS ها )
زبان سایت php و فریم ورکم اختصاصی خودم نوشتم

و اما سوالات :
1- از چه موتوری برای راه اندازی سرورم استفاده کنم ؟ ( nginx یا apache )
2- از چه نوع دیتابیسی استفاره کنم ؟ ( SQL یا noSQL )
3- اگه از SQL و noSQL ترکیبی استفاده کنم چطور ؟؟؟
4- کدوم نوع ذخیره سازی noSQL بهتره برای جامعه مجازی ؟ ( key-value,document,wide column,graph )
5- برای چت از comet استفاده کنم یا WebSocket ؟
6- از چه template engine ای استفاده کنم ؟ یا اختصاصی بنویسم ؟!


و اگه عزیزان تجربه ای در این مورد دارن ممنون میشم به من هم منتقل کنن

مهرداد سیف زاده
جمعه 03 مرداد 1393, 17:37 عصر
1- وب سرور به فریم ورک و نوع نرم افزار ربط داره مثلا اگر جامعه مجازی شما با دانلود زیاد سرو کار داره میشه nginx و اگر بار اطلاعاتی زیاد داره میشه apache یا لایت اسپید
2- در این مورد شما ابتدا باید یا ماهیت no-sql آشنا بشید و اونم با یه مثال براتون میگم مثلا شما تعداد ۱۰۰ کاربر دارید و میخواید از کاربران پروفایل داشته باشید حالا این اطلاعات پروفایل متغیره. مثلا یکی ماشین داره و یکی نداره، یکی کودکی مهد رفته و یکی نرفته، یکی دوست داره توی دوران بازنشستگی توی یه دهکده زندگی کنه و دیگری میخواد قبل از بازنشستگی بره مکه و خلاصه سلیقه کاربران و پروفایل مختلف. حل این مشکل به کمک \ایگاه داده رابطه ای مقدور نیست چون معلوم نیست کاربران چه اصلاعاتی رو توی پروفایل بخوان ذخیره کنن. no-sql این اطلاعات رو بصورت json که بهش bson میگن توی رکوردهایی به اسم فایل میریزه و امکان داره یک فایل حاوی ۲۰ پروفایل از یک کاربر باشه و برای کاربر دیگه فایل شامل ۲ فیلد نام و نام خانوادگی باشه. در کل نمیشه فقط از no-sql استفاده کرد چون خنده دار میشه شما گالری عکس رو بخواید no-sql کنید در صورتی که تعداد فیلدها و داده های گالری ثابته
۳- سایتهای بزرگ از پایگاه رابطه ای و no-sql‌در کنار هم استفاده میکنن. همچنین با توجه به هزینه سرور در ایران اگر شما برید طرف no-sql یعنی باید هزینه زیادی هم برای راه اندازی سایت روی اینترنت بپردازید
۴- MongoDB
۵- در این جا داره ابزار tornado رو معرفی کنم
یه وب سرور ولی با امکانات بالا. یکیش همین long-pool و ارتباط سوکتی هست
ترنادو برای شبکه اجتماعی FriendFeed (http://en.wikipedia.org/wiki/FriendFeed) نوشته شده بود و در سال ۲۰۰۹ فیس بوک این ابزار رو خرید و اوپن سورس شد. شبکه اجتماعی فریندفید یه قابلیت بالا داشت و اونم بدون فشار روی سرور کاربر روی در هر لحظه از اطلاعات جدید آگاه میکرد و فیس بوک هم این قابلیت رو به نرم افزارش اضافه کرد. ترنادو خودش یک وب سروری هست که بصورت سوکت میتونه با دیتابیس و سرور ارتباط داشته و در صورت وجود اطلاعات جدید اون رو به مرورگر بده
tornadoweb.org

۶- شما که میگید فریم ورک نوشتم اگر فریم ورک کامله پس باید برای تمپلیت هم کاری کرده باشی. ولی من تجربه خودم رو میگم که از smarty استفاده کردم و بسیار سبک و کش بالایی داره و هزاران امکاناتی که در طول طراحی مشکلی پیش نمیاد. ولی اختصاصی ننویس چون امکان داره فشار روی سرور رو زیاد کنی ولی این تمپلیت انجین ها هزاران متخصص پشتشون هستن. همچنین توسیه میکنم بجای نوشتن فریم ورک از فریم ورک هایی مثل yii یا laravel استفاده کنید.

Hamidreza Bozorg
جمعه 03 مرداد 1393, 18:32 عصر
1- وب سرور به فریم ورک و نوع نرم افزار ربط داره مثلا اگر جامعه مجازی شما با دانلود زیاد سرو کار داره میشه nginx و اگر بار اطلاعاتی زیاد داره میشه apache یا لایت اسپید

معمولا جامعه مجازی ها درخواست های زیادی دارن و باراطلاعاتی بالا پس بنا به گفته شما از apache ، اما تعداد درخواست های apache محدود به 10،000 ولی nginx محدودیت نداره !!؟



2- در این مورد شما ابتدا باید یا ماهیت no-sql آشنا بشید و اونم با یه مثال براتون میگم مثلا شما تعداد ۱۰۰ کاربر دارید و میخواید از کاربران پروفایل داشته باشید حالا این اطلاعات پروفایل متغیره. مثلا یکی ماشین داره و یکی نداره، یکی کودکی مهد رفته و یکی نرفته، یکی دوست داره توی دوران بازنشستگی توی یه دهکده زندگی کنه و دیگری میخواد قبل از بازنشستگی بره مکه و خلاصه سلیقه کاربران و پروفایل مختلف. حل این مشکل به کمک \ایگاه داده رابطه ای مقدور نیست چون معلوم نیست کاربران چه اصلاعاتی رو توی پروفایل بخوان ذخیره کنن. no-sql این اطلاعات رو بصورت json که بهش bson میگن توی رکوردهایی به اسم فایل میریزه و امکان داره یک فایل حاوی ۲۰ پروفایل از یک کاربر باشه و برای کاربر دیگه فایل شامل ۲ فیلد نام و نام خانوادگی باشه. در کل نمیشه فقط از no-sql استفاده کرد چون خنده دار میشه شما گالری عکس رو بخواید no-sql کنید در صورتی که تعداد فیلدها و داده های گالری ثابته

پس در این زمینه برای ذخیره اطلاعات ثابت و تک مقداری از sql ( مثل: ورود کاربران ، گروه ها ، دوستان )
و اطلاعات چندمقداری و متغییر از noSQL ( مثل: اطلاعات خصوصی-اجتماعی-اخلاقی و غیره کاربران ، پست ها ، لوگ ها hogs )



3-اگر شما برید طرف no-sql یعنی باید هزینه زیادی هم برای راه اندازی سایت روی اینترنت بپردازید

چرا ؟ به خاطر حجم دیتابیس ؟



۴- MongoDB

منظورم نوع noSQl بود - دخیره سازی با کلید ؟ با ستون ؟ سند گرا ؟ ارتباط نود ها ؟
اگه اشتباه نکنم باید از دو نوع آخری استفاده کرد، نه؟



۵- در این جا داره ابزار tornado رو معرفی کنم
یه وب سرور ولی با امکانات بالا. یکیش همین long-pool و ارتباط سوکتی هست
ترنادو برای شبکه اجتماعی FriendFeed (http://en.wikipedia.org/wiki/FriendFeed) نوشته شده بود و در سال ۲۰۰۹ فیس بوک این ابزار رو خرید و اوپن سورس شد. شبکه اجتماعی فریندفید یه قابلیت بالا داشت و اونم بدون فشار روی سرور کاربر روی در هر لحظه از اطلاعات جدید آگاه میکرد و فیس بوک هم این قابلیت رو به نرم افزارش اضافه کرد. ترنادو خودش یک وب سروری هست که بصورت سوکت میتونه با دیتابیس و سرور ارتباط داشته و در صورت وجود اطلاعات جدید اون رو به مرورگر بده
tornadoweb.org

راستش این رو تاحالا نشنیده بودم و منابع کمی داره
استفاده از comet به سرور فشار میاره با sleep ده ثانیه ؟



۶- شما که میگید فریم ورک نوشتم اگر فریم ورک کامله پس باید برای تمپلیت هم کاری کرده باشی. ولی من تجربه خودم رو میگم که از smarty استفاده کردم و بسیار سبک و کش بالایی داره و هزاران امکاناتی که در طول طراحی مشکلی پیش نمیاد. ولی اختصاصی ننویس چون امکان داره فشار روی سرور رو زیاد کنی ولی این تمپلیت انجین ها هزاران متخصص پشتشون هستن. همچنین توسیه میکنم بجای نوشتن فریم ورک از فریم ورک هایی مثل yii یا laravel استفاده کنید.

نه فریم فرک کامل نیست به مرور که کد مینویسم قسمت هایی که نیاز دارم رو بهش اضافه میکنم که از کتابخونه های اضافی کمتر استفاده و از حداقل منابع سرور استفاده بشه
استفاده از فریم ورک yii و اینا رو سرعت و رم تاثیر نمی زاره ؟

مهرداد سیف زاده
جمعه 03 مرداد 1393, 18:59 عصر
1- ماهیت جامعه های مجازی فرق دارن مثلا یوتیوب هم نوعی جامعه مجازی به حساب میاد ولی از نوع ویدیو و فیس بوک هم نوع دیگرش که همی چی توشه از اشتراک فایل گرفته تا چت و بازی پس باید ماهیت مشخص بشه. بعد هم وب سرور ده هزار تا بالاتر ساپورت کنه ولی رم و cpu سرور شما پایین باشه چه فایده داره. بعد از ابتدا به فکر بالا بالا نباشید همین گوگلم اولش توی یک کانکس و با یک سرور ناچیز راه اندازی شده بود
۳- هزینه رو گفتم چون امکان داره برای شروع نخواید زیاد توی خرج بیفتید و از یک هاست قوی استفاده کنید ولی اگر از no-sql‌استفاده کنید چون روی هاست های اشتراکی چنین ابزاری نیست و باید از همون ابتدا هزینه سرور بپردازید
۴- هر کدوم از روشهای کامیت و sleep و ترنادو برای خودشون دلایلی برای بهتر بودن دارن حتی فناوری زیر رو هم ببینید بد نیست اسمش xmpp هست
http://stackoverflow.com/questions/22329316/structure-of-chat-application-and-required-technologies
برای این کار باید بیشتر تحقیق کنید

۶ - پس حتما از فریم ورک ها استفاده کنید مخصوصا تجربه که روی ci و کیک و سیمفونی داشتم حتی این اواخر جانگو هم تست کردم(البته جانگو با پایتونه و ماهیتش یکم فرق داره) بهترینشون yii بوده و بس.