PDA

View Full Version : مشکل سرعت در یه کلاینت سرور کوچولو با DBISAM



یک شنبه 18 بهمن 1383, 20:50 عصر
سلام بچه ها
من یه برنامه تک کاربره با DBISAM نوشته بودم(البته امکانات شبکه رو هم مثل DBISAMSession در نظر گرفته بودم)بعد یه مدت یه کامپیوتر دیگه رو گرفتن با این کامپیوتر یه شبکه راه انداختن و یه شورت کات از exe برنامه روی کامپیوتر جدید ساختن
حالا مشکل اینجاس که بعد تقریبا یه سال و نیم که تعداد رکوردها به تقریبا 36000 تا رسید این کامپیوتر دوم اونقدر کند شده که یه کوری که برای insertrecord نوشتم تقریبا 50ثانیه طول میکشه یا یه locate ساده روی تیبل 30 40 ثانیه طول میکشه جداول رو Optimize یا همون compact هم کردم ولی جواب نداد ضمنن سرعت لن 100mbs هست.
میگین چیکار کنم؟؟؟ :گیج:
سلکت ها رو محدود کنم اینسرت ها یا دیلیت رو که دیگه نمیشه محدود کرد
یه پیشنهاد توپ بدین ثواب داره.... :cry:

مهدی کرامتی
یک شنبه 18 بهمن 1383, 22:38 عصر
رو فیلدهای لازم ایندکس گذاشتی؟

hr110
دوشنبه 19 بهمن 1383, 07:00 صبح
من یک جدول با یکصد هزار رکورد دارم، حدوداً 400مگابایت هم حجم داره. با استفاده از امکانات fulltext که در این بانک اطلاعاتی وجود داره به بالاترین سرعت ممکنه دست یافته ام. هر کوئری حدوداً 3 تا 7 ثانیه طول میکشه. ضمناً برنامه از روی سی دی اجرا میشه. :kaf:

دوشنبه 19 بهمن 1383, 08:08 صبح
سلام
ایندکس ها گذاشتم
ولی این fulltext داستانش چیه؟؟؟
دیدمش ولی نمیدونم چیه یه توضیح بدین ثواب داره :cry:

hr110
دوشنبه 19 بهمن 1383, 12:02 عصر
سلام،
امکان جالبی که همانند sqlserver البته به شکلی ساده تر و کارامدتر اطلاعات را ایندکس کرده و در هنگام جستجو شما میتوانید بروی فیلدهایی که بروی انها ایندکس ایجاد کرده اید، عملیات جستجو را به شکلی متفاوت انجام دهید.
این امکان سرعت بسیار بالایی را برای شما محیا خواهد کرد

برای اطلاعات بیشتر در راهنمای دی بی ایزم میتوانید Full Text Indexing را مورد جستجو قرار دهید.

hr110
دوشنبه 19 بهمن 1383, 12:05 عصر
نحوه ایجاد فیلدهای ایندکس :



تذکر، تذکر : نحوه ایجاد فیلدهای ایندکس میتواند همانند تمامی دستوراتی که شما از طریق ویزارد انجام میدهید، از طریق دستورات نیز انجام شود.

برای اطلاعات بیشتر به سورس برنامه database system utility مراجعه شود(البته اگر سورسش را دارید :mrgreen: )

hr110
دوشنبه 19 بهمن 1383, 12:08 عصر
برای نمونه نیز دستور زیر کلمه ایران را در فیلد نام مورد جستجو قرار میدهد.



begin
with MyTable do
begin
Filter:='TEXTSEARCH('+QuotedStr('ایران')+
' IN Name)';
Filtered:=True;
end;
end;

تذکر: اگر فیلد نام ایندکس(منظورم full text index) نباشد ، این دستور اجرا میشود و هیچ خطایی هم به شما نخواهد داد. ولی سرعت با حالتی که از طریق select راه را رفته باشید، تفاوتی نخواهد داشت و بسیار کند خواهد بود.

دوشنبه 19 بهمن 1383, 13:32 عصر
سلام
ممنون از راهنماییتون.
برنامه روی کامپیوتر اصلی که دیتابیسی روش هست مشکلی نداره اون بنده خدا که از شبکه دیتابیس رو میخونه گیر داره من فول تکتس ایندکس هم ساختم ولی ..... :sad2: هیج تاثیری روی سرعت برنامه حتی اونی که مستقیم به دیتابیس دسترسی داره نداشت. ضمنن من میخام جای فیلتر از سلکت برای جستجو استفاده کنم
جه پیشنهادی دارین؟؟؟؟؟
مرسی :sorry:

hr110
دوشنبه 19 بهمن 1383, 16:29 عصر
سلام
دوست عزیز شما باید TEXTSEARCH استفاده کنید، من اطلاعات زیادی در مورد مباحث شبکه‌ایی این بانک اطلاعاتی ندارم. اگر نظر این حقیر را میخواهید از SQLServer استفاده کنید. ممکن است تغییر برنامه شما هرچه بزرگ هم باشد، ظرف مدت دو روز زمان ببرد ولی بعد از دو روز میتوانید از عملکر برنامه خود اطمینان داشته باشید.

موفق باشید

دوشنبه 19 بهمن 1383, 17:03 عصر
اخه واسه یه دیتابیس که دوتا یوزر بیشتر نداره و میدونم که بیشتر از دوتا یوزر هم نمیشه زورم میاد sqlserver استفاده کنم :(
textsearch رو امتحان میکنم ببینم چی میشه......
ممنون

hr110
دوشنبه 19 بهمن 1383, 17:09 عصر
مشکلت حتماً با اون دستور حل میشه چون استفاده از فولتکست لزوماً استفاده از اون دستور را هم به دنبال خواهد داشت

ضمناً استفاده از اس کیو ال تنها برای شبکه های بزرگ و یا تعداد کاربران زیاد نمیباشد :موفق:

FirstLine
جمعه 23 بهمن 1383, 07:14 صبح
با سلام
من هم همین مشکل را داشتم که با کمک آقای کرامتی مشکلم حل شد.
علاوه بر موارد ذکر شده شما باید در قسمت Index نام فیلدهایی که میخواهید سرعت حستحو بالا باشد را وارد کنید.
با تشکر