PDA

View Full Version : سوال: انعکاس بلادرنگ تغییرات اطلاعات دیتابیس یک برنامه MultiUser به شی DataTable



iman_pc_love
پنج شنبه 27 بهمن 1390, 00:55 صبح
برای یک برنامه چند کاربره فرض کنید یه جدول با 30000 رکورد تو دیتابیس داریم که تمام این 30000 رکورد برای هر کاربر در یک شی DataTable به صورت local لود شده و در یک شی DataGridView به کاربر نمایش داده میشه، هر کدوم از این رکورد ها در بعضی مواقع ممکنه توسط کاربرای دیگه تغییر پیدا کنه، یا اصلا رکوردی اضافه یا حذف بشه! چطور میشه این تغییرات رو به شی DataTable همه کاربرها انعکاس داد؟
مثلاً فرض کنید در یک کشور قیمت اجناس (30000 جنس) لحظه ای تغییر پیدا میکنه و ما میخایم در جای جای این کشور تابلو هایی را نصب کنیم که قیمت لحظه ای را نشان بده و تغییر قیمت هم کمه یعنی آنقدر نیست که همیشه در تکاپو باشه ولی ما میخایم تابلو ها تغییرات رو به صورت آنی نشون بده، یعنی مثلا هر یک دقیقه یا 30 ثانیه یا هر بازه زمانیه مشخص نیایم کل 30000 رکورد رو از دیتابیس بخونیم ، می خایم یه جوری باشه که هر وقط دیتابیس تغییر کرد فقط همون تغییرات به تابلوها ارسال بشه.

یک سوال دیگه : تو سناریوی بالا تغییرات اطلاعات دیتابیس کمه پس بهتره در هنگام شروع برنامه برای هر کاربر یک بار تمام 30000 رکورد از دیتابیس به یک شی DataTable لود بشه و بعد فقط تغییرات دیتابیس یه جوری به DataTable منتقل بشه، حالا اگه تغییرات زیاد باشه چه راه حلی براش دارید؟ میشه مثلا بجای اینکه هر کاربر روی کامپیوتر خودش یک DataTable داشته باشه بیایم یه سرور بزاریم شی DataTable رو سرور باشه و به صورت اشتراکی برای همه استفاده بشه؟

iman_pc_love
پنج شنبه 27 بهمن 1390, 10:53 صبح
البته اینا همش یه پروژه فرضیه و برای تمرین میخام انجام بدم که برای انجام پروژه واقعی در این مورد تمرین داشته باشم

iman_pc_love
پنج شنبه 27 بهمن 1390, 20:12 عصر
کسی نیست جواب بده؟

iman_pc_love
جمعه 28 بهمن 1390, 12:37 عصر
شایدم سوالش یه کمی سخته :خجالت:

amir3321
شنبه 29 بهمن 1390, 08:10 صبح
با سلام
اولا یک کاربر 30000 رکورد رو نمی تونه هر لحظه ببینه که متوجه تغییرات بشه بهترین حالت استفاده از دیتابیس های توزیع شده است که می تونند تغییرات را با همدیگر یکسان سازی به نحوی که شما بخواهید انجام بدهند البته اگر در یک شبکه wan کار می کنید
برای نمایش بهتر اگر به قول شما در یک گرید ویو می خواهید انجام دهید فقط همان تعداد رکورد که به نمایش در می اید از دیتابیس واکشی شود مانند وب و یک دیتابیس مرکزی
برای دریافت قیمت اجناس گرفتن تکی بهتر است یا اگر نیاز است تبدیل به گروه های متعدد که با زدن هر گروه اجناس مرتبط با ان گروه فقط واکشی شوند
من در محیط شبکه lan پیشنهادم گرفتن ابتدا بصورت تکی و بعد گروهی و بعد گرفتن تمام اطلاعات بصورت یک باره می باشد .انتخاب با شما
ولی در محیط wan با توجه به نیاز بهترین حالت دیتابیس توزیع شده و بعد گرفتن تکی و بعد گروهی یا همان paging استفاده شود

iman_pc_love
شنبه 29 بهمن 1390, 10:26 صبح
من می خاهم تعداد درخواست ها و query ها از سرور پایگاه داده به حداقل حداقل ممکنه برسه
یعنی هر کاربری که میاد اول 30000 رکورد رو بگیره یکجا، بعد دیگه بره دنبال کارش، مثلاً فرض کنید هر کارمندی که صبح میاد سر کار، شاید بخواد 5000 مورد از این 3000 مورد رو یه نگاهی بندازه یا حداقل از جلوی چشمش بگذره می خام بجای اینکه این کاربر 5000 درخواست یا شایدم 500 درخواست از پایگاه داشته باشه این درخواستش یک دفعه انجام بشه و بعد بره دنبال کارش.

amir3321
شنبه 29 بهمن 1390, 13:49 عصر
خوب جانم کارت مشکل داره تو میگی یک دفعه کل رکورد ها رو واکشی کنه و دیگه هم هیچ ارتباط نداشته باشه و خودش هم رو هوا اپدیت بشه
یک چیز مهم تو برنامه نویسی اینه که بتونی محدودیت ها رو بفهمی و خوب هم از اونها استفاده کنی خوب اگر می خواهی که هر دفعه بروز باشه کاربر باید اینو بپزیره که لحظه ای صبر کنه تا اطلاعات بروز رو دریافت کنه
گفتم اگر کاربر شما عضو یک سازمان بزرگ است که در تمام ایران پایگاه دارد و هر لحظه این اطلاعات توسط کاربران دیگر بروز می شود بهترین کار دیتابیس های توزیع شده است من اطلاعات زیادی راجع به این موضوع ندارم
در این حالت کاربر اطلاعات رو از دیتابیس محلی خودش دریافت می کنه پس سرعتش بالاست و مشکلی با دریافت زیاد رکورد ندارد و عملیات بروزرسانی توسط دیتابیس با توجه به تنظیمات شما در هر زمانی انجام می گیرد
با این چیزی که شما می خواهید فکر کنم بهترین راه همینه

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