PDA

View Full Version : query (از خود query)در بانکهای بزرگ



MiRHaDi
سه شنبه 20 مرداد 1383, 06:29 صبح
سلام
یک برنامه دارم مینویسم که 3 تا جدول هر کدوم با 4 میلیون رکورد رو باید به هم لینک کنم بعدش یک سری محاسبات و ...
مشکلم اینجاست که چون اطلاعات خیلی زیاده و query که میگیرم در حد دقیقه طول میکشه ! حالا میخوام که query بعدی که میگیرم از result قبلی باشه ، یعنی دوباره نخوام لینک کنم و ... ! هی محدود تر میشه شروطم ، مساله برنامه هم اینه که باید خیلی سری روی مانیتور نموونه دیتای فیلتر شده رو نشون بده ، یعنی به صورت IO/CPU limited عمل کنه و وقتی کد شناسایی رو میزنیم اگه 10 رقم هست یکی یکی که میزنیم اون فیلترش رو بکنه .
نمیدونم تونستم بگم دقیقا چی میخوام یا نه ؟
ولی خیلی ممنون میشم از کمکی که به من میکنید .
با تشکر میرهادی

hmm
سه شنبه 20 مرداد 1383, 06:57 صبح
گرفتم چی میگی شنیدم اوراکل این امکان رو داره شاید selserver هم داشته باشه این موضوع برای خود من هم سواله :?:

AminSobati
سه شنبه 20 مرداد 1383, 23:35 عصر
میرهادی عزیز،
من کاملا متوجه کاری که قصد دارید انجام بدین شدم. چون قبلا مشابهش رو تجربه کردم..
اینکه شما با تایپ هر کاراکتر، نتیجه جستجو رو به اصطلاح، باریکتر کنید مستلزم این هست که اطلاعات شما در حافظه Client مستقر بشه و با زدن هر کلید، فیلتر بشه. نه اینکه با تایپ هر کاراکتر، یک Query مجدد انجام بشه! برای انتقال اطلاعات به Client شما از Recordset میتونید استفاده کنید(اگر از ADO.NET استفاده میکنید، DataTable تقریبا مشابه Recordset هستش). با زدن هر کلید، میشه پراپرتی Filter رو تغییر دادتا اطلاعات، نزدیکتر به چیزی که تایپ کردین بشه. البته من دقیقا نمیدونم از چه زبان برنامه نویسی استفاده میکنید..
ولی نکته مهم اینجاست که سعی کنید اولین Query که قراره اطلاعات رو به Client منتقل کنه، با حداکثر شروط ممکن بنویسید که نتیجه اون برای انتقال خیلی سنگین نباشه. برای انجام همین بخش از کار، ساختن ایندکسهای مناسب یا حتی Indxed view میتونه تاثیر بسیار قابل توجهی در سرعت Query داشته باشه. این اطلاعات بعد از انجام Query، در حافظه Client مستقر میشه پس سبک بودن اونها خیلی مهمه.

MiRHaDi
جمعه 06 شهریور 1383, 17:27 عصر
سلام
با تشکر از زحمت شما
مشکلی برای بودن اطلاعات در client نیست چون چاره دیگه ای ندارم
ولی حدود 6 میلیارد رکورد دارم ! و برای filter کردنش هم سرعت کم هست ! یعنی من میگم مثلا که کد 5623145212 رو میخوام ! چون فیلترینگ طول میکشه ! میخوام که با زدن 5 دامنه کم بشه بعد با زدن 6 دامنه یک دهم بشه بازدن 2 همینطور و بعد از زدن 1 آخری فقط 10 تا رکورد تو لیست باشه و تا 2 رو زدم از بین 10 تا پیداش کنه ! تازه میخوام که این کار View هم داشته باشه و روی اینترفیس نشون داده بشه
من با دلفی مینویسم
قربانت و بای

AminSobati
جمعه 06 شهریور 1383, 18:23 عصر
دوست عزیزم،
Cache کردن 6 میلیارد رکورد در حافظه کلاینت کار جالبی به نظر نمیرسه. فراهم کردن اینترفیسی که این سیستم فیلتر کردن رو برای کاربر فراهم میکنه، با داشتن تعداد رکورد بسیار بالا میتونه به یک ابر کامپیوتر نیاز داشته باشه! ولی من معتقدم کاربری که میدونه با 6 میلیارد رکورد طرفه، اینقدر درک داره که قبول کنه اینگونه اینترفیس برای این حجم اطلاعات توقع به جایی نیست.
ولی بستگی به شرایط شما هم داره، اگر فراهم کردن یک کامپیوتر قدرتمند براتون مقدوره، بسم الله! براش Data رو بیارین روی کلاینت، اما اگر این نرم افزار در شبکه کار میکنه و اطلاعات از سرور به کلاینت ارسال میشه، دریافت این همه رکورد میتونه شبکه رو به زانو دربیاره!

موفق باشید

hmm
شنبه 07 شهریور 1383, 07:12 صبح
یه امکان تو ado هست که میگه مثلا 10 رکورد اول رو بیار
این طوری خیلی سریع اولین 10 رکورد رو برات میاره و دوباره میتونی query بگیری
البته من تا حالا با این روش کار نکردم و دقیقا نمیدونم چطوریه اینو گفتم شاید خودت بتونی پیدا کنی

AminSobati
شنبه 07 شهریور 1383, 10:12 صبح
این امکان در حقیقت CacheSize مربوط به Recordset هستش. ولی برای ساختن اینترفیسی که دوستمون آقای میرهادی نیاز دارن، باید همه رکوردها یکباره در حافظه کلاینت Cache بشن و اگر به صورت تدریجی (Per Request) باشه عمل جستجو به نحوی که میخوان فراهم نمیشه.

MiRHaDi
سه شنبه 17 شهریور 1383, 08:14 صبح
سلام
من catch نمیکنم !
Local Sql هست ! برای همین مشکلی ندارم.
شما فرض کن دارم توی سرور مینویسم ! بعد نتیجه رو فقط یه Go میزنم میره !
دیتا رو هارد هست ! به همین سادگی ! بقیش ... ؟ :)
بای

AminSobati
سه شنبه 17 شهریور 1383, 14:29 عصر
میرهادی عزیزم،
اگر Local هستش، فقط از بابت ترافیک شبکه مشکل نخواهید داشت، ولی همچنان درست کردن Recordset از Memory استفاده میکنه، مخصوصا برای این حجم که کلی حافظه نیاز داره!