PDA

View Full Version : بالا بردن سرعت برنامه با انتقال دیتابیس به کلاینت



mehdi0020
یک شنبه 13 اسفند 1396, 14:13 عصر
سلام من برنامه تحت شبکه با زبان سی شارپ و sql server 2008 دارم
چون حجم اطلاعاتم و تعداد کاربرای سیستمم بالا هستن و روز به زور داره به اونها اضافه میشه سرعت برنامه من خیلی پایین اومده
آیا کسی راهی پیشنهاد داره که سرعت بالا ببرم؟
یه ایده دارم دوستان راهنماییم کنید آیا شدنی هست یا نه
از اونجایی که اکثر کاربرای من برای تهیه گزارش از برنامه استفاده میکنند دنبال راهی هستم که یک دیتابیس کلاینت برای هر کاربر ایجاد کنم وقتی کاربر ورودی های خودشو میزنه و شروع به تهیه گزارش میکنه برنامه ابتدا اطلاعات مورد نیاز از دیتابیس اصلی تحت شبکه بخونه و اونارو تو دیتابیس سیستم یوزر بریزه سپس برنامه از این اطلاعات برای تهیه گزارش استفاده مته
حالا سوالم اینه که اولا آیا این کار شدنیه
دوما چجوری دیتابیس کلاینت بسارم که برای انجام کار نیاز به اشغال کردن سرور نداشته باشه
اگه اساتید روش بهتری هم بلدن لطفا راهنماییم منن

محمد آشتیانی
یک شنبه 13 اسفند 1396, 14:45 عصر
سلام
احتمالا دیتابیس و کوئری های شما نیاز به بهینه سازی داره ، این راهی که گفتید خوب نیست ، به بحث نگهداری و سینک کردن دیتا بین سیستم ها دقت کنید (برای راه حلی که فرمودید) ، کار پر هزینه و بی فایده ای هست

mehdi0020
یک شنبه 13 اسفند 1396, 15:10 عصر
سلام
احتمالا دیتابیس و کوئری های شما نیاز به بهینه سازی داره ، این راهی که گفتید خوب نیست ، به بحث نگهداری و سینک کردن دیتا بین سیستم ها دقت کنید (برای راه حلی که فرمودید) ، کار پر هزینه و بی فایده ای هست
ممنون از توجهتون از بهینه سازی کوئری که بگذریم من باز ناچار هستم از این زوش استفاده کنم چون گاها تهیه گزارش های من بین چند میلیون رکورد تهیه میشه . جواب اونها هم چند صد هزار رکورد خروجی هستش این پروسه چند ساعت طول میکشه و عملا کاربر دیگری نمیتونه از سیستم استفاده کنه
از اوجایی که از سرور زیاد قوی هم استفاده نمیکنم بهترین راه فکر میکنم همین باشه که رکورد های مورد نیاز از دیتابیس سرور به یه دیتابیس مستقل در کلاینت انتقال بدم و سپس عملیات تهیه گزارشم از اون دیتابیس باشه
حالا سوالم اینه که آیا میشه یه دیتابیس در هر کلاینت داشته باشم؟ البته امکان اینکه برای سیستم های کلاینت نرم افزاری نصب کنم یا دسترسی به کلاینتها ندارم

mehdi0020
دوشنبه 14 اسفند 1396, 09:03 صبح
دوستان کسی نمیتونه کمکک کنه؟؟؟
آیا راهی وجود داره که تو سیستم کلاینت دیتابیس داشته باشم؟sql express تحت شبکه کار میکنه یا کلاینت؟؟؟؟

golbafan
دوشنبه 14 اسفند 1396, 11:27 صبح
وقتی کاربر ورودی های خودشو میزنه و شروع به تهیه گزارش میکنه برنامه ابتدا اطلاعات مورد نیاز از دیتابیس اصلی تحت شبکه بخونه و اونارو تو دیتابیس سیستم یوزر بریزه

انتقال داده ها از سرور به کلاینت؟ آن هم برای همه کاربران؟ این کار مسلماً زمان بسیار بیشتری خواهد برد!

بهتره روی سرورهاتون هزینه کنید و البته دیتابیس رو بهینه کنید.
در صورت امکان از چند سرور بصورت کلاستر استفاده کنید.
کل داده های گزارش رو یکباره fetch نکنید.

golbafan
دوشنبه 14 اسفند 1396, 11:31 صبح
دوستان کسی نمیتونه کمکک کنه؟؟؟

حافظه سرور رو افزایش بدید تا داده هایی که کش میشن نیازی به بارگیری مجدد کوئری نداشته باشند
نیازی نیست نگران کوئری های مشابه هم باشید. دیتابیس خودش مدیریت میکنه