ورود

View Full Version : مشکل با استرینگ لیست



alaveh
جمعه 05 خرداد 1391, 19:15 عصر
دوستان من یک استرینگ لیست دارم که از یک فیل 80 میلیون رکوردی میخوام بهش اطلاعات بدم

2تا مشکل داره .

1 : استرینگ لیست نمیتونه فایلهای حجیم رو بخونه . تا حدود 250 مگ میخونه فقط .
2 : طول هر خط فایل نباید بیشتر از 256 کاراکتر باشه وگرنه بقیش رو نمیخونه .

مثلا یه چیزی مثل AnsiString لازم دارم . که البته دیدم وجود نداره .
فایل استریم هم دیدم بایت بایت میخونه و خط به خط نمیخونه .

کسی راهی سراغ داره ؟

Felony
جمعه 05 خرداد 1391, 20:23 عصر
هیچ شیئی نمیتونه 80 میلیون رکورد رو نگهداری کنه ( میزان حافظه اختصاص داده شده به برنامه شما توسط ویندوز این اجازه رو نمیده ) ؛ دقیقا میخواین چی کار کنید ؟ برای چی میخواین 80 میلیون رکورد رو بریزید تو یک StringList ؟

alaveh
شنبه 06 خرداد 1391, 00:06 صبح
هیچ شیئی نمیتونه 80 میلیون رکورد رو نگهداری کنه ( میزان حافظه اختصاص داده شده به برنامه شما توسط ویندوز این اجازه رو نمیده ) ؛ دقیقا میخواین چی کار کنید ؟ برای چی میخواین 80 میلیون رکورد رو بریزید تو یک StringList ؟

به سه دلیل دلم می خواد از همچین شیی استفاده کنم :

1 توانایی خوندن خط به خط فایلم
2 داشتن سورت
3 به دلایل بالا امکان باینری سرچ فراهم میشه

میشه فایل رو با AssignFile و ReadLN و WriteLN باز کرد و خوند و نوشت و ... ولی وقتی سورت نشه سرچ هم نمیشه زد و یک سرچ چند دقیقه طول میکشه که در نتیجه سرچ میلیونها رکورد سالها طول میکشه ولی با باینری سرچ یک ساعت هم نمیشه .

Felony
شنبه 06 خرداد 1391, 00:25 صبح
تو پست قبل جواب شما رو دادم ، هیچ شیئی نمیتونه 80 میلیون رشته رو داخل خودش نگهداری کنه ؛ نه در دلفی و نه در زبان دیگه ای ...

برای اون کار من اگر جای شما بودم فایلم رو به یک بانک اطلاعاتی سبک مثل SQLite یا Access منتقل میکردم و راحت با Query جست و جو روش انجام میدادم .

hamid-nic
شنبه 06 خرداد 1391, 00:40 صبح
سلام
بازکردن 80 میلیون رکورد اصلا عاقلانه نیست و لزومی نداره چنین حجم زیادی از اطلاعات یک جا خوانده بشه . همون طور که آقا ماهان هم گفتن بهتره اطلاعاتت را به یک بانک اطلاعاتی وارد کنی و عملیات های مورد نظرت را انجام بدهی .

alaveh
شنبه 06 خرداد 1391, 01:58 صبح
برای اون کار من اگر جای شما بودم فایلم رو به یک بانک اطلاعاتی سبک مثل SQLite یا Access منتقل میکردم و راحت با Query جست و جو روش انجام میدادم .


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

تمام اطلاعات توی SQL Server وارد شده ولی متاسفانه بسیار بسیار بسیار کند هست و غیر قابل استفاده و ران شدن یک کویری سلکت ساده حتی با شرط Where که محدودش کنه به یک رکورد حدود 2 دقیقه زمان میبره . حالا حساب کنید بخواید برای 2 میلیون رکورد توی یک جدول 80 میلیونی سرچ بزنید . هر سرچ در بهترین حالت 2 دقیقه ، میشه حدود 8 سال .

شما 80 میلیون رو حساب نکن . اصلا حساب کن 100 هزار رکورد ولی طول هر رکورد مثلا 700 کاراکتر باشه . با چی میشه خوندش و به هر خط در یک لحظه دسترسی داشت مثل استرینگ لیست ؟ چون استرینگ لیست طول هر خطش همونطور که می دونید 256 کاراکتره .

Felony
شنبه 06 خرداد 1391, 05:45 صبح
تو همون SQL Server میتونی برای بانکت File group های مختلف تعریف کنی ، ایندکس بزاری و Full text search رو فعال کنی ؛ سرعت جست و جو خیلی بهتر میشه .

ببین ؛ هر چقدر تلاش کنی نمیتونی چیز قابل قبولی بنویسی ، چون هر چی بنویسی به SQL Server مایکروسافت نمیرسه ، پس روش درست و بهینه استفاده کردن از امکاناتش رو یاد بگیر و کارت رو باهاش جلو ببر .

من نمیدونم از کدوم نسخه از دلفی استفاده میکنی ؛ من الان با XE2 تست کردم و از یک فایل متنی که هر خطش بالای 1000 کاراکتر بود به راحتی اطلاعات رو خوندم ؛ حتی اگر از دلفی 7 هم استفاده کنی بعیده کلاس TStringList رو بر پایه نوع ShortString تعریف کرده باشن ؛ در هر صورت از نسخه های جدیدتر دلفی استفاده کن .

alaveh
یک شنبه 07 خرداد 1391, 02:32 صبح
ببین ؛ هر چقدر تلاش کنی نمیتونی چیز قابل قبولی بنویسی ، چون هر چی بنویسی به SQL Server مایکروسافت نمیرسه .

دقیقا موردی بود که داشتم برای هم گروهیم توضیح میدادم که چطور ممکنه مایکروسافت همچین چیزی تولید کرده باشه




من نمیدونم از کدوم نسخه از دلفی استفاده میکنی ؛ من الان با XE2 تست کردم و از یک فایل متنی که هر خطش بالای 1000 کاراکتر بود به راحتی اطلاعات رو خوندم

من از XE استفاده می کنم ولی کماکان این مشکل هست نمیدونم چرا


تو همون SQL Server میتونی برای بانکت File group های مختلف تعریف کنی ، ایندکس بزاری و Full text search رو فعال کنی ؛ سرعت جست و جو خیلی بهتر میشه .


میدونم احتمالا وقت و حوصله ندارید اینا رو توضیح بدید . اگر ممکنه یه راهنما برای چیزایی که فرمودید معرفی کنید . اگر بشه با SQL SERVER کار کنم که خداست . یک کویری کار 600 تا دستور رو انجام میده برام .

Felony
یک شنبه 07 خرداد 1391, 05:44 صبح
این لینک (http://www.intersoftdevelopment.com/IDI-ASPNET/Free-Source-Code.aspx?CodeID=12&Code=SQL+Server+Tuning+Very+Large+SQL-Server+Databases+Part+1) رو ببین ؛ 3 تا پارت در مورد بهینه سازی بانک های اطلاعاتی بزرگ هستش .

اگر تونستی از Youtube یا ... کلیپ های Optimizing SQL Searches With Indexes ، Full-Text Search , SQL Server 2008 Performance Tuning از کمپانی Train Signal میتونه کمکتون کنه .