PDA

View Full Version : راهنمایی جهت نحوه انتقال اطلاعات موجود در بانک



maktab
پنج شنبه 17 آذر 1390, 22:24 عصر
من می خوام برای ارتباط با بانک اطلاعاتی سایتم روش زیر رو پیاده کنم اگر جایی اشتباه می کنم مرا راهنمایی کنید.
من از sql server استفاده می کنم. برای انتقال اطلاعات هم از sp استفاده می کنم. تویه پروژم برای هر شی، کلاس اون رو پیاده سازی کرده و اطلاعات هر کدام را از بانک خونده و تویه اون قرار می دم (در یه لیست یا شی) حالا وقتی قراره اطلاعاتی از سایت خونده بشه از همین لیست خونده میشه و به بانک وصل نمیشه ولی اگر قرار باشه اطلاعاتی ویرایش، حذف یا درج بشه مستقیم بر روی بانک این کار رو می کنم و اطلاعات لیست کلاس هم رفرش می شه (دوباره از بانک خونده می شه) البته روش دیگه ای هم هست. بجای اینکه اطلاعات کلاس دوباره خونده بشه، وقتی دارم هر کدام از سه عملیات رو انجام می دم یک بار اون رو روی بانک انجام میدم یک بار روی لیست. مثلا اگر قرار باشه فیلد شمار 12 پاک بشه، با استفاده از sp نوشته شده اون رو از بانک پاک می کنم و با استفاده از دستورات linq اون رو از لیست کلاس پاک می کنم. البته این روش مشکلاتی (پیچیدگی هایی) هم دارد که احتمال می دم در بعضی شرایط سرعت را پایین بیاره (وقتی کلاس ها با هم ارتباط داشته باشن).
حالا نظر شما درباره دو روش آخر چیه؟ کدام بهتره؟ اصلا در کل این روش مناسبی برای انتقال اطلاعات هست؟

aminghaderi
جمعه 18 آذر 1390, 07:30 صبح
با قسمت قطع موقت ارتباط با sql و نگه داری اون در حافظه موافقم ولی اینکه شما منظورتون از برای هر شی کلاس اون رو نوشتم و در پایگاه داده هست ؟! یه خورده غیر واضح هست البته شاید برای من.
مثلا منظور شما اگر تکس باکس و گرید ویو و کنترل های شخصی باشه که به نظر من کار اشتباهی داردید انجام می دید و لوزوم اینکه شما برای چه کنترل های که احتمالا به زبان c# هست رو می خواهید در پایگاه ذخیره کنید ، رو نمی دونم؟!
و مورد بعدی که می فرمایید اطلاعات رو داخل کلاس قرار می دهید را هم منظورتون رو درست نفهمیدم ، اگر منظورتون کلاس هایی مثل Dataset هست که کار بارگزاری اطلاعات در حافظه برای دسترسی سریع به اطلاعات و افزایش کارآیی و قطع موقت ارتباط Sql با App هست که خوب کار ، کار اصولی هم همین هست ولی اگر غیر این هست در این مورد هم نظرم منفی هست.

موفق باشی.

maktab
جمعه 18 آذر 1390, 12:39 عصر
منظورم از شی، اشیای پروژم هستن که برای آنها در بانک اطلاعاتی جدول ساختم. (همان جدول های sql). مثلا اگر جدول مطالب سایت رو در sql داشته باشم برای اون هم یه کلاس کنترلی در پروژم پیاده سازی می کنم (برای کنترل فیلد های اون کلاس و...). حالا برای اینکه اطلاعات این جدول رو هم داشته باشم میام و یه لیست مثلا لیست ژنریک از اون کلاس میسازم و اطلاعات را از بانک خونده و در لیست میزارم. حالا هر وقت نیاز به خواندن اطلاعات داشته باشم از لیست می خونم نه از بانک.
این کار برای پروژه های (سایت) تحت وب مناسبه؟ چون من تا حالا تحت وب برنامه نویسی نکردم!
اگر میشه نظرتون درباره سه عملیات دیگه هم بگید.

aminghaderi
جمعه 18 آذر 1390, 15:28 عصر
حالا هر وقت نیاز به خواندن اطلاعات داشته باشم از لیست می خونم نه از بانک.
راه درست رو انتخاب کردید.

این کار برای پروژه های (سایت) تحت وب مناسبه؟ چون من تا حالا تحت وب برنامه نویسی نکردم!
شیوه برنامه نویسی هر کسی فرق می کنه و من هم زیاد از شیوه شما حقیقت سر در نیاوردم ولی کن روش شما رو متوجه شدم و به نظر من روش بدی نیست ولی اگر شما درباره شی dataset در ado.net تحقیق کنید و از اون برای پیشروی اهداف استفاده کنید به نظر من خیلی می تونه به بالا بردن سرعت برنامه شما کمک کنه.
با این که من اکثر کنترل های .net رو برای کارهای شخصی خودم نقض می کنم ولی خوب به نظر من دیتاست یه شاهکار هستش و نیاز به طراحی مجدد اون و حتی بهینه کردن نداره چون خودش کامل هست ، کلا ado.net خیلی جالب پیاده سازی شده.


اگر میشه نظرتون درباره سه عملیات دیگه هم بگید.
کدام سه عملیات؟؟

اگر منظورتون استفاده از استور پروسیجر ها هست که می گن چندین برابر سرعت اجرا select های اسکیوال را بالا می بره ولی خوب من زیاد خوشم نمی یاد ازشون استفاده کنم .(دلیل شخصی ...)

maktab
جمعه 18 آذر 1390, 19:07 عصر
کدام سه عملیات؟؟


ممنون از اینکه پیگیری می کنید.
منظورم سه عمل (حذف، ویرایش و حذف) هست که در پست اول هم اشاره کردم. مثلا اگر قرار باشه از دیتاست استفاده کنم دو روش برای انجام این کارها وجود داره:
روش اول: مثلا برای حذف فیلد شماره 12، اول فیلد مورد نظر را از بانک حذف می کنم سپس اطلاعات جدول دیتاست رو از بانک دوباره می خونم.
روش دوم: مثلا برای حذف فیلد شماره 12، اول فیلد مورد نظر را از بانک حذف می کنم سپس اطلاعات همان فیلد را از جدول دیتاست هم حذف می کنم.

هر کدام مشکلات خاص خودش رو داره. در روش اول وقتی اطلاعات یک جدول زیاد باشه وقتی با هر بار انجام یک عمل، باید همه اطلاعات رد و بدل بشن! برای روش دوم هم برای جدول هایی که با هم در ارتباط باشن پیچیده میشه (ممکنه سرعت را پایین بیاره).
در کل کدام بهتره؟ کدام یک سرعت بالاتری دارن؟

aminghaderi
جمعه 18 آذر 1390, 19:30 عصر
به نظر من روش اول هم از لحاظ سرعت و هم از لحاظ کارایی بهتر هست.
روش دوم مشکلات مدیریت رخ داد ها پیش می یاد و کلی مشکلات پیش رو خواهد اومد.
استفاده از دیتاست یا کلاس های مد نظر شما در صورتی مفید هست که برای هر درخواست در حافظه لود بوده باشه ؟!
این یه مسئله بزرگی هست؟!
برای این کار می شود دیتاست رو در Application قرار داد و در این راستا از قابلت Lock و unLock اون برای مدیریت آن استفاده کرد ، این کار به نظر من باعت افزایش بالای سرعت می شه .

موفق باشید.