PDA

View Full Version : بررسی لحظه به لحظه پیام های ثبت شده در دیتابیس



maktab
جمعه 18 فروردین 1391, 12:56 عصر
سلام
من در برنامم یک امکانی میخوام بزارم که بشه پیام توی برنامه ثبت کرد و وقتی زمان اعلامش رسید بصورت اخطار نمایش داده بشه. حالا به نظر شما بهترین راه برای اینکه هر چند لحظه مثلا هر 5 دقیقه بررسی کنم که آیا زمان یک پیام رسیده یا نه چیه؟ چیزی که به ذهنم میرسه تایمره. سرعت برنامه را پایین نمیاره؟ چونکه این تایمر همیشه باید کار کنه.
اگر روش مناسبی میدونید راهنمایی کنید.

maktab
جمعه 25 فروردین 1391, 11:24 صبح
کسی نظر خاصی نداره؟
جستجو کردم بیشتر در مورد تایمر صحبت شده که چون فرمی که توش تایمر قرار میگیره همیشه بازه. احتمال نمیدید برنامه کند بشه؟ روش بهتری سراغ ندارید؟

p.yazdkhasti
جمعه 25 فروردین 1391, 12:21 عصر
سلام
سرعت برنامه در صورتی تعداد کاربرانی که با نرم افزار شما کار می کنند کم است تحت تاثیر قرار نخواهد گرفت و استفاده از این روش مشکلی ندارد.

maktab
جمعه 25 فروردین 1391, 13:00 عصر
سلام
سرعت برنامه در صورتی تعداد کاربرانی که با نرم افزار شما کار می کنند کم است تحت تاثیر قرار نخواهد گرفت و استفاده از این روش مشکلی ندارد.

خب اگر زیاد باشند چطور؟
من دنبال یک روش مناسب میگردم. با این روش مثلا هر 5 دقیقه باید برنامه بطور خودکار بره و توی بانک جستجو کنه و...

va2012
جمعه 25 فروردین 1391, 13:20 عصر
سلام.

فکر کنم منظورت اینه که یک سیستم یادآوری رو به برنامت اضافه کنی که کاربر یک متن رو وارد کنه و تنظیم کنه که در ساعت و تاریخ خاصی اون متن بهش نمایش داده بشه. اگر منظورت اینه این برنامه که ضمیمه کردم رو ببین شاید به دردت بخوره :

85666

maktab
جمعه 25 فروردین 1391, 14:09 عصر
روشی که شما در مثال خود استفاده کردید همان روشی بود که در پست های قبلی بش اشاره شده. از این روش میتونم استفاده کنم ولی شما فرض کنید چندین یاداوری ثبت شده، برنامه همیشه در حال اجراست، چندین کاربر در حال استفاده از برنامه و انجام عملیات های مختلف هستند و...
حالا اگر قرار باشه من یک تایمر همیشه روشن بزارم و مثلا در هر 1 دقیقه به بانک وصل بشه و ببینه آیا رویداد خاصی وجود نداره و... آیا برنامه را کند نمیکنه؟ من تصور میکنم برنامه را کند کنه (البته تست نکردم). به نظرم روش مناسبتری برای این کار باشه.

va2012
جمعه 25 فروردین 1391, 14:24 عصر
روشی که شما در مثال خود استفاده کردید همان روشی بود که در پست های قبلی بش اشاره شده. از این روش میتونم استفاده کنم ولی شما فرض کنید چندین یاداوری ثبت شده، برنامه همیشه در حال اجراست، چندین کاربر در حال استفاده از برنامه و انجام عملیات های مختلف هستند و...
حالا اگر قرار باشه من یک تایمر همیشه روشن بزارم و مثلا در هر 1 دقیقه به بانک وصل بشه و ببینه آیا رویداد خاصی وجود نداره و... آیا برنامه را کند نمیکنه؟ من تصور میکنم برنامه را کند کنه (البته تست نکردم). به نظرم روش مناسبتری برای این کار باشه.

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

p.yazdkhasti
جمعه 25 فروردین 1391, 15:19 عصر
سلام
همان طور که گفنم در صورتی که تعداد کاربران شما کم است و حجم Query هایی که به پایگاه داده ارسال می شود کم است مشکلی ایجاد نخواهد کرد. در غیر این صورت روش دیگر این است که شما برای مثال یک سرویس بر روی یک سرور قرار دهید و این سرویس با Interval مشخصی پیام هایی که باید ارسال شوند را در یک Query از پایگاه داده بخواند و برای کاربران ارسال کند. به دلیل این که در این روش هر یک از کاربران به صورت جداگانه یک Query برای سرور پایگاه داده ارسال نمی کند و کلیه پیام ها توسط سرویس شما از پایگاه داده در یک Query خوانده می شود نرم افزار شما تقریبا مانند حالتی کار می کند که تنها یک کاربر پبام ها را از پایگاه داده می خواند و با زیاد شدن تعداد کاربران نیز تعداد Query هایی که بر روی سرور پایگاه داده اجرا می شود تغییر نمی کند و ثابت است.

maktab
جمعه 25 فروردین 1391, 15:21 عصر
من هم دنبال روش مناسب دیگه ای هستم.
مثلا یک سیستم اتوماسیون را در نظر بگیرید. معمولا همه آنها یک قسمت یاداوری دارن. خب برای اون از چه روشی استفاده کردن؟ شاید چندنخی + تایمر؟ یا شاید هم باید در کل تایمر را از این ماجرا حذف کرد.

maktab
جمعه 25 فروردین 1391, 15:26 عصر
سلام
همان طور که گفنم در صورتی که تعداد کاربران شما کم است و حجم Query هایی که به پایگاه داده ارسال می شود کم است مشکلی ایجاد نخواهد کرد. در غیر این صورت روش دیگر این است که شما برای مثال یک سرویس بر روی یک سرور قرار دهید و این سرویس با Interval مشخصی پیام هایی که باید ارسال شوند را در یک Query از پایگاه داده بخواند و برای کاربران ارسال کند. به دلیل این که در این روش هر یک از کاربران به صورت جداگانه یک Query برای سرور پایگاه داده ارسال نمی کند و کلیه پیام ها توسط سرویس شما از پایگاه داده در یک Query خوانده می شود نرم افزار شما تقریبا مانند حالتی کار می کند که تنها یک کاربر پبام ها را از پایگاه داده می خواند و با زیاد شدن تعداد کاربران نیز تعداد Query هایی که بر روی سرور پایگاه داده اجرا می شود تغییر نمی کند و ثابت است.

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

p.yazdkhasti
جمعه 25 فروردین 1391, 15:30 عصر
سلام
تایمر هم در روش اول با در نظر گرفتن تعداد کم کاربران و هم در روش دوم برای شما مشکلی از نظر Performance ایجاد نخواهد کرد.

maktab
جمعه 25 فروردین 1391, 15:45 عصر
سلام
تایمر هم در روش اول با در نظر گرفتن تعداد کم کاربران و هم در روش دوم برای شما مشکلی از نظر Performance ایجاد نخواهد کرد.

ممنون از اینکه بحث را دنبال میکنید.

یعنی در سیستم های پیشرفته اتوماسیون مثل سیستم اتوماسیون دانشگاه برای چنین کارهایی از تایمر استفاده میشه؟ اگر مطمئن هستید بگید چون در صورتی که از این روش استفاده کنم سخت است دوباره از اول سیستم را بنویسم.

omid_csh
جمعه 25 فروردین 1391, 18:33 عصر
سلام
به نظرم در زمان شروع اجرای برنامه کلیه پیام ها رو بخون و بعد پیام هایی رو که در حین اجرای برنامه می رسه با استفاده از SqlDependency اونارو چک کن.
برای SqlDependency هم یه برنامه اینجا (http://www.codeproject.com/Articles/12335/Using-SqlDependency-for-data-change-events) هستش.

p.yazdkhasti
جمعه 25 فروردین 1391, 18:40 عصر
سلام
همان طور که گفتم برای پیاده سازی یک سیستم Messaging الگو ها و روش های بسیار متفاوتی وجود دارد که هزینه و زمان استفاده از هر یک از آن ها متفاوت است. استفاده از Timer در بیشتر موارد مشکلی ایجاد نمی کند. برای مثال نرم افزار های Email Client مانند Outlook (Pop3) و یا Gmail را در نظر بگیرید. شما تنها از دید Performance به موضوع نگاه می کنید بلکه موارد دیگری مانند نیازمندی های فعلی و آتی نیز بسیار در انتخاب معماری تاثیر گذار است.