PDA

View Full Version : مشکل در خواندن اطلاعات زیاد از دیتابیس



baradar
جمعه 10 شهریور 1391, 16:44 عصر
با عرض سلام و خسته نباشید خدمت دوستان محترم

من یه پروژه دارم که قبلا تحت وب بوده و البته تحت وبشم خودم نوشته بودم یه سیستم نرم افزاری تحت وب بوده که الان به تحت ویندوز تبدیلش کردم دیتابیسش هم mysql هست و اون رو روی vps قرار دادم تا شبکه بشه و همه کاربران این برنامه به دیتابیس دسترسی داشته باشند حالا همه چیز برنامه درسته و کار میکنه و مشکلی نداره حالا یک جدول داریم که 40000 رکورد داره که که هر رکورد 50 فیلد داره و حالا که میام با کامپوننت unidac اون رو بخونم خیلی طول میکشه البته از thread برای خوندن استفاده کردم که برنامه هنگ نکنه حالا برنامه هنگ نمیکنه ولی خیلی وقت طول میکشه تا اطلاعات داخل گرید لود بشه لطفا راهنماییم کنید که چکار کنم که اطلاعات رو سریع بخونه

با تشکر

Felony
جمعه 10 شهریور 1391, 17:56 عصر
یعنی عین 50 فیلد رو برای لود تو گرید نیاز دارید ؟ اگر بهشون نیازی ندارید همه فیلدها رو Select نکنید ؛ روی جدول ایندکس بزارید و برای بارگذاری رکوردها به جای اینکه همه اونها رو یکجا Select کنید از Pageing استفاده کنید و اندازه Page ها رو بسته به اندازه Height گریدتون تعیین کنید :

DECLARE @PageSize INT
DECLARE @pageNumber INT
SET @PageSize = 10
SET @pageNumber = 9


SELECT * FROM
(SELECT ROW_NUMBER() OVER (ORDER BY PID) AS RowNum, Patients.* FROM dbo.Patients)
Result WHERE (RowNum >@PageSize *(@pageNumber - 1)AND RowNum <=(@PageSize * @pageNumber))

baradar
جمعه 10 شهریور 1391, 22:41 عصر
با عرض سلام و خسته نباشید خدمت شما

ممنون از پاسختون ولی مشکل من اینها نیست
برای نمایش که بله تمام 50 فیلد نیاز هست ولی از این بابت که گفتین به صورت صفحه صفحه لود کنم من با استفاده از دستور زیر
select *from register limit 1,3
میام و سه فیلد رو میخوام لود کنم اصلا همه اینها به کنار وقتی من یه کاپوننت فرض کنید uniquery رو میگذارم روی صفحه و این دستورات رو باهاش ست میکنم وقتی میخوام اکتیو یا بازش کنم مثلا برای 3 رکورد باید 10 ثانیه منتظر بمونم خب این رو گفتم که حتی در ساده ترین صورت هم مشکل وجود داره
حالا کاری که من میخوام بکنم اینه که این رکوردها برای 15 تا شهرستان هست و من باید بیام بر اساس متغیر هایی برای این شهرستان ها بر اساس این رکوردها چارت اماری بگیرم مثلا فروش هر شهرستان یا تعداد ثبت نام شدگان مرد هر شهرستان یا غیره و من باید مثلا برای فروش تک تک مقادیر واریزی رو جمع کنم که با دستور sum این کار رو میکنم ولی باید حداقل 10 دقیقه منتظر بمونم تا نتیجه رو ببینم و این اصلا مطلوب نیست
لطفا یا دیتابیسی که سریع بتونه این پردازش رو انجام بده معرفی کنید البته به غیر از sql server که هر کار کردم هیچ ورژنیش رو ی سرور نصب نشد یا الگوریتمی که من رو بتونه کمک کنه

با تشکر

Felony
شنبه 11 شهریور 1391, 13:13 عصر
لطفا یا دیتابیسی که سریع بتونه این پردازش رو انجام بده معرفی کنید البته به غیر از sql server که هر کار کردم هیچ ورژنیش رو ی سرور نصب نشد یا الگوریتمی که من رو بتونه کمک کنه
بهترین بانک ها برای پردازش های سنگین همون SQL Server , My SQL و Orcale هستند ؛ هر سه اینها هم با کمی تفاوت کار شما رو خیلی راحت جواب میدن .

الگوریتم چی میخوای ؟! مگه داری چه محاسبه پیچیده ای میکنی ؟
شما باید بانکتون رو optimize کنید ، من دقیقا نمیدونم My SQL چه امکاناتی برای این کار در اختیارتون میزراه ( مثلا Data Partition ) ، در هر صورت سوالتون به دلفی مرتبط نمیشه ، بهتره تو بخش My SQL پیگیریش کنید .

tdkhakpur
شنبه 11 شهریور 1391, 17:36 عصر
لطفا یا دیتابیسی که سریع بتونه این پردازش رو انجام بده معرفی کنید البته به غیر از sql server که هر کار کردم هیچ ورژنیش رو ی سرور نصب نشد یا الگوریتمی که من رو بتونه کمک کنه

این خواسته ای که دارید خارج از محدوده دیتابیس هست اصول دیتابیس برمبنای یک سری قوانین و در نهایت بصورت کوئری ارائه داده میشه و این امکانات یک حدود مشخصی داره و دیگه نمیتونه از اون عبور کنه مگر با پشرفت تکنولوژی بانکهای اطلاعاتی.
حالا که شما دارید با mySql کار میکنید و حتما هم یه ورژن داره و اگه بخواهید به بررسی مشکلتو ن پرداخته بشه باید در اون محدوده پیگیر قضیه بشید.

حالا کاری که من میخوام بکنم اینه که این رکوردها برای 15 تا شهرستان هست و من باید بیام بر اساس متغیر هایی برای این شهرستان ها بر اساس این رکوردها چارت اماری بگیرم مثلا فروش هر شهرستان یا تعداد ثبت نام شدگان مرد هر شهرستان یا غیره و من باید مثلا برای فروش تک تک مقادیر واریزی رو جمع کنم که با دستور sum این کار رو میکنم ولی باید حداقل 10 دقیقه منتظر بمونم تا نتیجه رو ببینم و این اصلا مطلوب نیست
اما در مورد موضوع شما به نظرم ارتباطی با دیتابیس نداره شما میتوانید الگوریتم کارتان رو بهینه کنید مثلا همون خواسته ای رو که در نظر دارید و میخواهید در فواصل مختلف ازشون کوئری رو بگیرید بصورت online و با هر DataEntery که کاربر ثبت میکنه در داخل یه جدول دیگه ثبت کنید تا همیشه کوئری شما به روز باشه و نیازی به محاسبه مجدد نداشته باشید..
مثلا جدولی به اسم MasterValues vو ایجاد کنید و بهش یه id ایتم بدید و یه فیلد که بتونه جمع ها و یا هر محاسبه دیگه مربوط به اون آیتم رو در هر ثبتی که کاربر انجام میده داخل همین جدول هم ثبت کنه.