PDA

View Full Version : نحوه تعریف صندوق پیام برای کاربران چگونه است؟



iman_pc_love
دوشنبه 24 مهر 1385, 20:49 عصر
می خواستم برای کاربران سایتم یک صندوق پیام درست کنم که بتونن به هم پیام بفرستند ولی از نحوه عملکرد این سیستم ها خبری ندارم کسی هست که بگه بهترین روش چیه؟
تعریف یک جدول تو پایگاه داده برای هر کاربر یا.....
خلاصه راه حل اصولی رو بگید
در ضمن برای توسعه سایت از asp.net 2 استفاده میکنم، آیا خود فریم ورک چنین امکانی رو قرار نداده به صورت آماده؟

pegasos
سه شنبه 25 مهر 1385, 14:14 عصر
بادرود.

خوب برای این کار راههای زیادی وجود دارد.
من راهی را که خودم استفاده کرده ام و ازآن نتبجه گرفته ام به شما می گویم:

خوب سعی می کنم از ابتدا خیلی خیلی ساده توضیح دهم :

ببینید شما می توانید یک جدول برای "پیغام ها" در بانک اطلاعاتی درست کنید.
و در ساده ترین حالت باید فیلد های زیر را داشته باشد :

1- شناسه خبر
2 - فرد ارسال کننده
3 - فرد دریافت کننده
4 - متن پیام
5 - آیا خوانده شده است
6 - عنوان پیام.

حداقل صفحاتی که باید برای هر کاربر وجود داشته باشد :

1- ارسال پیام جدید
2 - لیست پیام های ارسال شده
3- لیست پیامهای دریافت شده

خوب یک توضیح کوچیک راجع به هر صفحه :

1- ارسال پیام جدید :

تقریبا همه چیز مشخص است .
شما باید یک سطر به بانک اطلاعاتی اضافه کنید.

+ شناسه خبر : حتما باید به صورت اتوماتیک اضافه شونده و صعودی باشد.
+ فرد ارسال کننده : خودتان هستید ،احتمالا شناسه اش توی Session یا Identity یا یک چنین چیزی است که احتمالا شما در صفحه Logon آن را Set کرده اید.
+ فرد دریافت کننده : احتمالا یک DropDownList توی صفحه دارید که شناسه کلیه افراد را نگهداری می کند که با انتخاب آن از لیست می توانید فرد مورد نظر را پیدا کنید.
+ متن پیام و عنوان پیام : شما می توانید با فرمت HTML یا متن ساده تهیه کنید.
+ آیا خوانده شده است : یک فیلد منطقی که به صورت پیش فرض False است.


2 - لیست پیام های ارسال شده :
خوب می تواند یک دیتا گرید باشد که یک جستجوی روی دیتا بیس میزند و سطرهایی را که فیلد فرد ارسال کننده شان برابر با شناسه خود شما می باشد بر می گرداند.

3- لیست پیامهای دریافت شده
باز هم می تواند یک دیتا گرید باشد که یک جستجو روی دیتا بیس میزند و سطر هایی را که فیلد فرد دریافت کننده شان برابر با شناسه خود شما می باشد بر می گرداند.
بهتر است فیلد عنوان پیام در دیتا گرید به صورت HyperLink باشد که با کلیک بروی آن کاربر را به صفحه نمایش اطلاعات پیام راهنمایی کند.

البته یک عالمه چیزهای دیگه می شود به این موضوع اضافه کرد.
مثلا : Message Delivery ،ارسال پاسخ ،ارسال پیام به افراد دیگر ،ارسال به یک گروه ، وچگونه در هر PostBack متوجه شویم که کاربر پیغام جدید دارد یا اینکه چگونه با Ajax معماری را پیاده کنیم که که هر زمان برای کاربر پیغام جدیدی رسید بتوانیم به او بی درنگ اطلاع دهیم.

این فقط یک نمونه آزمایشی بود ،چون در نمونه های اصلی برای بهینه سازی دیتابیس باید کارهای زیادی را انجام داد.

امید وارم منظورتان را درست متوجه شده باشم .
به امید موفقیت.

iman_pc_love
سه شنبه 25 مهر 1385, 17:45 عصر
از پاسخ کاملتون تشکر می کنم ولی راه حل شما ابتدائی ترین راه حل است، بهینه نیست، منم گفتم راه حل بهینه و بهترین رو میخواهم، در ضمن جزئیات هم لازم نیست فقط اصل مطلب.
من فکر می کنم اگه برای هر کاربر یک جدول مخصوص تعریف کنیم راه هل معقولی باشه. نظر شما چیه؟

pegasos
چهارشنبه 26 مهر 1385, 08:44 صبح
با درود.


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

خوب من با این راه حل موافق نیستم.
ولی از آنجایی که هیچ چیز در این دنیا مطلق نیست می توانیم این راه حل را هم برسی کنیم.

بیبنید به نظر من بستگی داره به اینکه :
+ تعداد پیغامهای ردو بدل شده چقدر باشد.
+ تعداد کاربران چقدر باشد.
+ آیا برنامه بخواهد به صورت Dynamic کاربر اضافه کند.
+ و از همه مهمتر توجیح شما و ناراحتی شما چی هست که به این نوع معماری علاقه دارید.

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

من گفتم که فقط شما باید از یکسری تکنولوژی های بهینه سازی بانک اطلاعاتی استفاده کنید:
مثلا شما می توانید یک جدول bak داشته باشید که رکوردهای آخر این جدول را به جدول Bak انتقال دهید.
و شما این را در نظر داشته باشید که فقط با سطر های بالای جدول سرو کار دارید.
و شما ناراحت lookUp زدن بروی جدول تا 100.000 سطر به هیچ وجه نباشید.

ولی از همه مهمتر این است که شما برای چی این پیشنهاد را می دهید و شاید مسئله ی خاصی باشد که من هیچ وقت با آن برخورد نکنم ....

با درود.

iman_pc_love
چهارشنبه 26 مهر 1385, 13:19 عصر
فرض بر این است که تعداد کاربران زیاد است ، کاربران جدید هم به صورت دینامیک اضافه می شوند و تعداد پیام ها هم خیلی زیاد است
من نمی دونم که اگه واسه هر کاربر یک جدول مخصوص برای پیامها داشته باشیم چه مشکلی برای موتور پایگاه ایجاد میشه یا نه، اگه تاثیری تو کارایی موتور نداشته باشه بهترین راه حل است. (کسی هست که بدونه؟)
راه حل شما هم بد نیست ولی باز راه حل های بهتری هم هست ولی بهترین راه حل هم باعث درخاست اضافی برای موتور میشه در صورتی که تعریف جول مجزا برای هر کاربر هیچ عملیات و دردسر های نگهداری دیگه ای نداره + اینکه کارایی برنامه خیلی بالا میره
ما باید دنبال این باشیم که آیا جدول های زیاد در پایگاه داده مشکلی درست میکنه یا نه؟

pegasos
چهارشنبه 26 مهر 1385, 14:20 عصر
بادرود.


فرض بر این است که تعداد کاربران زیاد است ، کاربران جدید هم به صورت دینامیک اضافه می شوند و تعداد پیام ها هم خیلی زیاد است

زیاد یعنی چی ؟
یعنی چند ؟
از نظر شما یعنی چند ؟
شما می دونید از نظر من یعنی چند؟
از نظر DB زیاد یعنی چند ؟
آیا کاربران این سایت زیاد هستن ؟

من متوجه نمی شوم.



من نمی دونم که اگه واسه هر کاربر یک جدول مخصوص برای پیامها داشته باشیم چه مشکلی برای موتور پایگاه ایجاد میشه
من هم نمی دانم و نمی گویم مشکلی پیش می آید.
فقط طبق تجربه ای که دارم [در مورد reusability ,reliability ,maintenance] و بازخوردهایی که گرفته ام این راه حل کار منطقی به نظر من نیست.


در ضمن جزئیات هم لازم نیست فقط اصل مطلب
دوست عزیز فراموش کردید که اینجا یک انجمن عمومی است و ده ها نفر دیگه هم که به خاطر یاد گیری اینجا آمده اند دارن گفتگو ها ی ما را می بینند.
بنابراین این را در نظر داشته باشید که همیشه طرف گفتگو یک نفر نیست !!

از این گذشته هدف اصلی من از آمدن به این انجمن یادگیری و یاددارن
است ولی من احساس می کنم شما به دنبال یک نفر می گردید که سر یک مسئله ای که فکر می کنید درست است با او جدل کنید.
باور کنید من وقت این طور کارها را ندارم .اگه وقت داشتم حتما روی این مسئله هم با شما همکاری می کردم!

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

به امید موفقیت.

mahdi_negahi
چهارشنبه 26 مهر 1385, 21:39 عصر
به نظر من ایده دوست خوبمون آقای/خانم pegasos درست است چون اگر برای هر کاربر اقدام به جدول کنیم یک افزونگی بسیاری داریم یعنی اینکه مقادیری الکی برای هر کاربر اضافه میشوند در ضمن به نظر من این سوال را دربخش sql کن چون سوال شما بیشتر جنبه طراحی دارد

iman_pc_love
چهارشنبه 26 مهر 1385, 23:01 عصر
با آقا/خانم pegasos موافقم ولی من دنباله بحث و جدل نیستم ولی می خواهم بهترین راه رو پیدا کنم،
اگر از همین الان برای سایت های کوچک بهترین راه حل ها را داشته باشیم. اگه یک روزگاری خواستیم یه سایت بزرگ بزنیم خوب دیگه اون موقه مشکلی نداریم.
از اینکه گفتم جزئیات لازم نیست فقط می خواستم وقت شما رو بیش از حد نگیرم.

iman_pc_love
جمعه 28 مهر 1385, 10:24 صبح
نمیشه انیجا بدون اینکه پست بزنم این تاپیکو ببرم تو صفحه اصلی سایت تا بلکه یکی جوابمونو بده؟

iman_pc_love
یک شنبه 07 آبان 1385, 19:13 عصر
از مدیرانی که احتمالا این پست رو می خونن خواهش میکنم یه فکری به حال این مسئله که هر پست در عرض 3 سووت از بین میره بکنند

Behrouz_Rad
یک شنبه 07 آبان 1385, 20:56 عصر
جواب کاربر pegasos تایید میشه!

راه حل شما هم بد نیست ولی باز راه حل های بهتری هم هست
از کجا می دونی؟

ما باید دنبال این باشیم که آیا جدول های زیاد در پایگاه داده مشکلی درست میکنه یا نه؟
یک کتاب پایگاه داده بخون! پیشنهادم اینه که مستقیما به فصل نرمال سازی جداول مراجعه کنی!

نمیشه انیجا بدون اینکه پست بزنم این تاپیکو ببرم تو صفحه اصلی سایت تا بلکه یکی جوابمونو بده؟
خیر!

از مدیرانی که احتمالا این پست رو می خونن خواهش میکنم یه فکری به حال این مسئله که هر پست در عرض 3 سووت از بین میره بکنند
پست های شما در سطل آشغال سایت موجود هستند!

موفق باشی.

iman_pc_love
چهارشنبه 10 آبان 1385, 20:42 عصر
دست شما درد نکنه سطل آشغال جای پست های بی جوابه؟

Behrouz_Rad
چهارشنبه 10 آبان 1385, 22:30 عصر
پست هات رو من حذف نکردم! اما به نظرم پست های فاقد ارزش فنی بودند!

موفق باشی.