PDA

View Full Version : سوال: بهترين كار براي نمايش تعداد زياد ركورد در ديتاگريدويو چيست؟ مثلا 500000



hanieh66
شنبه 03 مهر 1389, 15:12 عصر
سلام
براي نمايش تعداد زياد ركورد موجود در بانك اطلاعاتي توي ديتاگريدويو بهترين كار چيه؟

مثلا حالتي رو فرض كنيد در يك برنامه ي اطلاعات جامع مسكن كه تعداد ركوردها در بانك به 500000 600000 تا برسه و هر ركورد 30 تا فيلد داره و حجم هر ركورد حدود 200 بايت هست. چيزي حدود 100 مگابايت مي شه كه در بدترين حالت بايد تمام اين مقدار رو در حافظه و در ديتاست بارگذاري كنيم.

من در مورد اين قضيه جستجو كردم و مي دونم كه بايد تنها فيلدهايي رو برگردونم كه مورد نياز هست ولي بازم نتيجه هنوز مائوس كننده است. (مثلا در همين برنامه ي مسكن نمايش اطلاعات 25 فيلد ضروري است)

همچنين در مورد paging هم شنيدم ولي اين قضيه در وب كاربرد دارد.
آيا از همين paging مي شه به نحوي در برنامه هاي دسكتاپ هم استفاده كرد ؟

حالا از نظر شما با توجه به سالها تجربه در كار با بانكهاي اطلاعاتي با حجم بالا بهترين راهكار براي اين قضيه چيست؟ مطمئنم شما هم به اين مسئله برخورد كرديد. لطفا تجربياتتون رو در اختيار من و ساير دوستان هم قرار بدين.

با تشكر

mmd2009
شنبه 03 مهر 1389, 15:15 عصر
با سلام

به این (http://www.codeproject.com/KB/grid/DataGridPaging.aspx)لینک یک سر بزنید

موفق باشید

hanieh66
شنبه 03 مهر 1389, 15:38 عصر
با سلام

به این (http://www.codeproject.com/KB/grid/DataGridPaging.aspx)لینک یک سر بزنید

موفق باشید

ممنون از لينك مفيد
الان تست كردم و بدرستي كار مي كنه.
ولي اميدوارم هم شما هم ساير دوستان در مورد اين مبحث نظراشون رو بگن و همينطور در مورد اينكه آيا خودتون تاحالا از اين روش استفاده كردين و مشكلي نخوردين ؟

مطمئنا در اين مورد قبلا هم بحث شده اگه كسي مي تونه لينك اون تاپيكها رو در اختيار من بذاره ممنون مي شم. من جستجو مي كنم ولي پيدا نكردم چيزي

علیرضا حسن زاده
شنبه 03 مهر 1389, 18:35 عصر
خوب من منظور شما رو از اینکه میشه از Paging در برنامه های دسکتاپ هم استفاده کرد یا نه متوجه نشدم ولی در حالت کلی می توان از این روش برای هم برنامه های وب و هم دسکتاپ استفاده کرد چون بیشتر منطقش رو دیتا بیس هست تا برنامه

من قبلا یک برنامه داشتم که حدود 180000 تا رکورد داشت و ماهانه چیری حدود 1000 تا 1500 روکورد هم به اون اضافه می شد ابتدا می خواستم مثل شما تمام رکورد ها رو لود کنم و تو گرید نمایش بدم که دو تا مشکل برام پیش اومد:
1-سیستم هایی که دارای رم پایین هستن به مشکل بر میخورن و اغلب هنگ می کنن(با رم حدود 256 یا 384 به پایین)
2-مدت لود اینهمه اطلاعات و واکشی اونها صرف نظر از اندازه رم یه کم زیاده و کاربر رو خسته میکنه

برای رفع مشکل از این روش استفاده کردم
چون مثلا به قول شما 25 رکورد و تو برنامه من یه تعداد دیگه رکورد همشون حالت کلیدی ندارن، در لود اطلاعات اون فیلدهایی رو که اطلاعات کلیدی دارن مثلا برای جدولی مثل مشخصات اشخاص ( کد رکورد،نام، نام خانوادگی، نام پدر و شما ره شناسنامه) رو لود می کنم خوب در این صورت فقط 5 تا فیلد از جدول 25 فیلدی رو لود کردم در نتیجه سرعت لود رو افزایش دادم بعد کاربر وقتی می خواد یه رکورد رو با مشخصات کامل ببینه یه دکمه مثلا با نام جزئیات تعبیه می کنیم که برای نمایش بقیه فیلدها هست و زمانی که کاربر رو اون کلیک بکنه فقط یه رکورد رو با توجه به کد اون با سرعت نسبتا زیاد نشونش میدیم کاربر هم اطلاعی از اینکه تمام رکوردها واکشی شده یا نه نداره و راحت کارش رو بدون کمترین اتلاف وقت انجام میده

ویه چیزی هم که در این مورد متوجه شدم اینکه هیچ کاربری نیاز به تمام اطلاعات نداره و همیشه دنبال جستجو در اونها برای یه مورد خاص هست و باید اون رو نشون بدیم(ولی ندرتا شرایطی هم پیش میاد که همش باید لود بشه) و برای همین تا جای ممکن اطلاعات رو فیلتر می کنم

hanieh66
شنبه 03 مهر 1389, 18:43 عصر
خوب من منظور شما رو از اینکه میشه از Paging در برنامه های دسکتاپ هم استفاده کرد یا نه متوجه نشدم ولی در حالت کلی می توان از این روش برای هم برنامه های وب و هم دسکتاپ استفاده کرد چون بیشتر منطقش رو دیتا بیس هست تا برنامه

من قبلا یک برنامه داشتم که حدود 180000 تا رکورد داشت و ماهانه چیری حدود 1000 تا 1500 روکورد هم به اون اضافه می شد ابتدا می خواستم مثل شما تمام رکورد ها رو لود کنم و تو گرید نمایش بدم که دو تا مشکل برام پیش اومد:
1-سیستم هایی که دارای رم پایین هستن به مشکل بر میخورن و اغلب هنگ می کنن(با رم حدود 256 یا 384 به پایین)
2-مدت لود اینهمه اطلاعات و واکشی اونها صرف نظر از اندازه رم یه کم زیاده و کاربر رو خسته میکنه

برای رفع مشکل از این روش استفاده کردم
چون مثلا به قول شما 25 رکورد و تو برنامه من یه تعداد دیگه رکورد همشون حالت کلیدی ندارن، در لود اطلاعات اون فیلدهایی رو که اطلاعات کلیدی دارن مثلا برای جدولی مثل مشخصات اشخاص ( کد رکورد،نام، نام خانوادگی، نام پدر و شما ره شناسنامه) رو لود می کنم خوب در این صورت فقط 5 تا فیلد از جدول 25 فیلدی رو لود کردم در نتیجه سرعت لود رو افزایش دادم بعد کاربر وقتی می خواد یه رکورد رو با مشخصات کامل ببینه یه دکمه مثلا با نام جزئیات تعبیه می کنیم که برای نمایش بقیه فیلدها هست و زمانی که کاربر رو اون کلیک بکنه فقط یه رکورد رو با توجه به کد اون با سرعت نسبتا زیاد نشونش میدیم کاربر هم اطلاعی از اینکه تمام رکوردها واکشی شده یا نه نداره و راحت کارش رو بدون کمترین اتلاف وقت انجام میده

ویه چیزی هم که در این مورد متوجه شدم اینکه هیچ کاربری نیاز به تمام اطلاعات نداره و همیشه دنبال جستجو در اونها برای یه مورد خاص هست و باید اون رو نشون بدیم(ولی ندرتا شرایطی هم پیش میاد که همش باید لود بشه) و برای همین تا جای ممکن اطلاعات رو فیلتر می کنم
بله فكر كنم اين راهكار هم خوبه.
تا جايي كه مي شه بايد تعداد فيلدهاي اصلي و ضروري در ديتاگريدويو رو كم كنم و اونوقت براي هر مورد كه كاربر خواست جزئيات اون ركورد رو بصورت كامل بهش نشون مي دم.

ولي هنوز هم خيلي مشتاقم در اين مورد ساير دوستان هم صحبت و نظردهي كنن.
با تشكر

mmd2009
شنبه 03 مهر 1389, 19:37 عصر
خب ببینید شما 1000 تا رکورد رو فرض کنید که قراره برن تو یک گرید ویو ، الان حتی پیشمایش هم برای کاربر غیر ممکنه میشه پس عملا این کار اشتباهه. حالا چه برسه به مثلا 10 هزار یا ...... رکورد

حتی اگر قرار باشه 1 فیلد هم از یک بانگ 1000 تایی که 10 فیلد داره خونده بشه باز هم پیشمایش بین اینا در حد 0 درصد اصولیه. به نظر من راه های فیلتر سازی باید انجام بشه. مثلا :

فرض کنید یک بانک داریم که 100 هزار رکود داره که هر رکورد هم 10 تا فیلد داره. مثلا یکی از این فیلد ها تاریخ ثبت یک چیزی هست. که اکثر بانک های اطلاعاتی این فیلد رو دارم یا حالا مثلا من فرض میکنم 100 درصد بانک های اطلاعاتی اینو دارن. خب یکی از بهترین راه های فیلتر سازی اینا که مثلا قبل از لود گرید ویو ما بگیم اقا یا خانوم ایونت مورد نظر شما بیار ابر اساس تاریخ 1 / 1 / 88 تا 1 / 5 / 88 اطلاعات رو ببر تو گرید ویو خب حالا ما مطمئن هستیم که این روش خیلی بهتر از اون زمانی هست که مثلا یک جا بخواهید کل اطلاعات رو وارد گرید ویو بکنید. روش های زیادی هستند برای فیلتر سازی .

hanieh66
شنبه 03 مهر 1389, 19:56 عصر
پس اينطور كه متوجه شدم يك راه ديگه هم فيلتر كردن نتايجه.
مثلا يك پنل كوچك در كنار ديتاگريدويو كه كاربر بتونه بازه ي نمايش اطلاعات (بر اساس تاريخ ثبت ركوردها) و تعداد ركوردها (كه نبايد مسلما از يه حد معقول بيشتر باشه چون مثلا اگه كاربر تمام ركوردها رو براي نمايش انتخاب كنه باز هم همون مشكل كندي و هنگ كردن سيستم بخاطر افزايش حجم حافظه بوجود مي ياد) رو انتخاب كنه و بر اين اساس اطلاعات نمايش داده شوند.

و راهي كه دوست ديگه در پست قبلي اشاره كردن اينكه تا حد ممكن تعداد فيلدهاي لود شده در حافظه رو از طريق كوئري كم كنيم و هر مورد كه كاربر خواست براش جزئيات رو نمايش بديم.

فكر كنم اين دو راهكار كه با هم ادغام بشن نتيجه خوبي خواهند داد.
نظر شما چيه؟

flash118
شنبه 03 مهر 1389, 21:13 عصر
بنظر من عالی هست ولی بستگی به نوع برنامه باید انعطاف بهش بدیم برای مثال من یه برنامه برای مدیریت سیستم فشار قوی نوشته بودم که تعدا داده های ورودی بیش از 1 میلیون داده ورودی از سیگنال های دستگاه بود البته ماگزیمم رو گفتم چون تو این فاز اون شرکت بیش از 500000 من تو بدترین حالت که تست کردم نبود برای این این مثال رو زدم که یاد آور شم بعضی از زمان ها داده ها حیاتی هست واگه از یکیش صرف این که کار بر نمی خواهد صرف نظر کنیم کلی مشکلات پشتش برامون هدیه میاره مخصوصا تو این جور جاها که باید مدیریت آگاه و بدون درنگ باشه ولتاژ بالا و پایین بشه واقعا خطری میشه پس باید از دو روش فوق که استفاده می کنیم داده های حیاتی رو هم در نظر داشته باشیم که کنترل اونا از دستمون در بره مصیبت بزرگی بوجود میاره امیدوارم منظورم رو درست رسونده باشم بازم ممنون ببخشید که جسارت شد در میان شما اساتید بزرگوار موفق باشین

debugger
شنبه 03 مهر 1389, 21:37 عصر
:قهقهه: بابا تعداد رکورد ها زیاده خب :

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

وگر نه که باید برنامه به صورت multi thread نوشته شود تا هنگ نکنه و یک progressbar باید گذاشته بشه و تا زمان کامل لود شدن همه اطلاعات باید کاربر صبر کنه . دیگه جادو و جنبل بلد نیستیم که در عرض یک ثانیه اون همه اطلاعات را به کاربر نشون بدیم

من به مشتری میگم چاره ای نیست باید صبر کنی تقصیر من هم نیست اطلاعاتت زیاده

هر کی خربزه میخوره پای ..... :قهقهه:

flash118
شنبه 03 مهر 1389, 21:47 عصر
debuger دمت گرم ولی ما هم داریم دونسته ها رو می گیم تا به یه نقطه مشخص برسیم و همگی از اون استفاده کنیم یعنی اون عملی که بهینه هست و الا به مشتری بفرمایید اونم میگه باشه باش تا بهت برنامه بدم همون طور که اون سرمایه میده انتظار داره هر چی بگه انجام بشه هیچ منظقی قبول نیست البته بعضی هاشون انصاف دارن ولی در حالت کلی چون پول میدن باید انتظارشون برآورده شه کوتاهم نمی یان:خجالت:

debugger
شنبه 03 مهر 1389, 22:15 عصر
اگر مشتری پول واقعی نرم افزار و ارزش واقعی کار شما را بده اونم نقد بده

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

narsic
یک شنبه 04 مهر 1389, 01:40 صبح
با سلام
دوستان منم همین مشکل رو داشتم البته من دارم روی 1،000،000 رکورد به بالا کار میکنم .(تحت وب) نمایش این اطلاعات واقعا زمان بالایی میبرد و برای حلش من اومدم و دیتا گرید رو کنار گذاشتم حالا خودم اطلاعات رو میخونم ، خودم هم صفحه بندی رو انجام میدم و نمایش میدم در حال حاظر زمانم برای 30 رکورد در صفحه به 300 میلی ثانبه رسیده که کاملا قابل قبوله .
موفق باشید

narsic
یک شنبه 04 مهر 1389, 01:42 صبح
:قهقهه: بابا تعداد رکورد ها زیاده خب :

من به مشتری میگم چاره ای نیست باید صبر کنی تقصیر من هم نیست اطلاعاتت زیاده

هر کی خربزه میخوره پای ..... :قهقهه:

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

tanbal_khan66
یک شنبه 04 مهر 1389, 09:51 صبح
سلام به همه دوستان
واقعا از مطرح شدن اين سؤالها و اين بحث ها ممنونم
خيلي استفاده كردم آخه منم همين مشكلاتو داشتم.
راه حلهاي خوبي پيشنهاد شد.
از همتون ممنونم.

hanieh66
یک شنبه 04 مهر 1389, 11:01 صبح
ممنون از همه.فقط لطفا موضوع منحرف نشه.
تا اينجا كه براي من مبتدي نتيجه خوبي داشت و دو راهكار جديد رو ياد گرفتم. اگه باز هم كسي در اين مورد نظري داره لطفا بگه هرچند فكر مي كنه ساده و پيش پا افتاده است.