ورود

نسخه کامل مشاهده نسخه کامل : استفاده از بانک داده در برنامه چقدر از فضای حافظه رو اشغال میکنه؟



am_merman01
29-05-2017, 23:49
سلام خدمت دوستان عزیز
من از vs2010 استفاده میکنم. میخواستم بدونم وقتی یک دیتاست توی برنامه بوجود میارم و چند تا جدول توش تعریف میکنم ، این جداول بر روی کدام حافظه قرار میگیرن؟(رم یا هارد درایو؟)
اگه بعد از یک مدت حجم داده های موجود در بانک خیلی زیاد بشه مشکلی برای لود شدن برنامه بوجود نمیاد؟
اینکه من چندتا دیتاست داشته باشم در کاهش فضای اشغال شده کمکی میکنه یا اینکه همشون به طور همزمان توسط بانک داده پر میشن؟(مثلا ۵۰ تا جدول موجود در بانک داده رو توی ۵ تا دیتاست قرار بدم)
استفاده از linq2sql و یا entityframwork.net میتونه به بهینه شدن حجم اشغال شده کمکی بکنه یا تاثیری نداره؟
پیشاپیش از کمکتون تشکر میشه

_H2_
30-05-2017, 23:10
سلام
اول)
اصولا بخشی از نرم افزارهای دیتابیس مدیریت همین HDD و RAM است.
شما میتوانید بیشتر نگرانی در مورد این مطالب را به SQLServer و Oracle و PostgreSQL و... بسپارید.
برنامه های مدیریت دیتابیس اطلاعات را در هارد نگاه داشته و از حافظه های مجازی نگاشت شده روی هارد استفاده میکند و RAM را برای دیتاهای جاری در حال کار مدیریت میکند.
پس بخشی از نگرانی تان را به عهده شرکت های تولید کننده دیتابیس ها بگذارید!

==============

دوم) آنکه به عنوان مدیر IT یا DBA و ... باید مشخصات سرور های شما (CPU/HDD/RAM و...) با نیاز تان (حجم اطلاعات، تعداد تراکنش ها، تعداد کاربران آنلاین و...) مطابقتی داشته باشد

اینکه جداول را در دیتابیس های مختلف قرار دهید و... چیزهایی شبیه این فایده ای نداردف تازه از نظر تئوری یک دیتابیس باشد بهتر هم خواهد بود.

بجای آن استفاده صحیح از دیتابیس های "نرمال" سازی شده، کلید های عددی Auto-Number ... استفاده بجا و صحیح از Index ها و Trigger ها ... تبدیل query های پر مصرف به View و Procedure و... تاثیر بسیار زیادی میتواند داشته باشد.

==============

سوم) آنکه به عنوان یک برنامه نویس، برنامه را به طرز مناسبی و صحیحی بنویسید وتولید کنید.

برنامه نویسی قطعا وبدون شک تاثیر دارد.
عدم واکشی کل اطلاعات در برنامه و اعمال فیلتر به اطلاعات درون برنامه...
یعنی تا حد ممکن سطر ها را با Where های SQL ای کم کنید و ستون ها را با Select های SQL کاهش دهید تا حجم اطلاعات کمتری بین دیتابیس و برنامه شما ، سریالی و دی-سریالی و دانلود و بارگذاری و... شود.
اطلاعات را صفحه بندی شده نشان دهید...

از کش های سمت دیتابیس و RAM بجا استفاده کنید.
گاهی اوقات کش کردن 1MB اطلاعات میتواند از واکشی های مکرر 1GB اطلاعات (وبیشتر) جلوگیری کند...
یا میتوانید خروجی primarykey های پرس و جوهای سنگین ناشی از جستجو را کش کنید....
از تکنیک های بارگذاری تنبل (Lazy) استفاده کنید...

در زمان Update روی جداولی با ستون های زیاد میتوانید فقط یکی دو ستون تغییر کرده را بروز رسانی کنید، این هم در سرعت تاثیر دارد و هم مشکلات و تداخلات همزمانی تراکنش ها را کاهش میدهد.

اگر با علم و به طرز مناسب از EF یا EFCore استفاده کنید و بجای query های پیچیده سمت برنامه از View های سمت دیتابیس استفاده کنید و... و... میتوانید به بازدهی خوبی برسید، یعنی خوشبختانه EF و EFCore ظرفیت و انعطاف پذیری لازم را دارند.

موفق باشید.