PDA

View Full Version : سوال: آیا قرار دادن کوئری های برنامه در دیتابیس موجب کاهش کارایی سیستم می شود؟



fotrosi
چهارشنبه 09 فروردین 1391, 13:52 عصر
با سلام خدمت دوستان عزیز.
من در حال طراحی یک سایت می باشم می خواستم بدونم آیا قراردادن کوئری های مورد استفاده در برنامه در دیتابیس موجب افت کارایی سیستم نمی شود؟
من کوئری های مورد نیاز برنامه را در یک جدول در دیتابیس قرار می دهم و درون برنامه کد کوئری را به یک تابع ارسال می کنم و سپس اون تابع ابتدا کوئری را از دیتابیس بیرون می کشد و سپس آن را اجرا کرده و نتیجه را برمی گرداند اینکار باعث می شود دوبار به دیتابیس ارجاع داده شود و سوال من اینجاست که اینکار موجب افت کارایی سیستم می شود یا نه؟
با تشکر از دوستان

A.S.Roma
چهارشنبه 09 فروردین 1391, 13:59 عصر
اینم از اون کارها بود !

اگر همه ی کوئری هاتون رو به شکل Store Procedure در بیارید کارایی و امنیت (!) برنامه تون بالا میره.

fakhravari
چهارشنبه 09 فروردین 1391, 14:00 عصر
یه مثال بزنید بهتر درک میشود

fotrosi
پنج شنبه 10 فروردین 1391, 09:30 صبح
با سلام
واقعا از اون کارهاست ولی مزایایی داره که قابل توجه می شود:
1- وقتی از آژاکس استفاده می کنم مجبور نیستم برای هر کوئری یه متد در وب سرویس بنویسم و با یک متد تمام کوئری هام اجرا می شن
2- کوئری هام رو در فایلهای جاوااسکریپت قرار نمی دم و می توانم فقط با یک کد کوئری مورد نظر را اجرا کنم.
3- کوئری های مشترک رو در دیتابیس پیدا می کنم و از کدشون استفاده می کنم
4- برای هر کوئری یه توضیحات ذخیره می کنم و بعدا به راحتی میدونم چه کار می کنه
5- اون Stored Procedure رو هم می توانم درون همین کوئری های اجرا کنم همانطور که اینکار در حال حاضر انجام شده است و برای کوئری های پیچیده این کار رو کردم
حالا سئوال اینه که با اینکار آیا وقتی دیتاها زیاد باشند مشکلی پیش می آید یا خیر؟ همین.
موفق باشید

A.S.Roma
پنج شنبه 10 فروردین 1391, 11:41 صبح
با سلام
واقعا از اون کارهاست ولی مزایایی داره که قابل توجه می شود:
1- وقتی از آژاکس استفاده می کنم مجبور نیستم برای هر کوئری یه متد در وب سرویس بنویسم و با یک متد تمام کوئری هام اجرا می شن
2- کوئری هام رو در فایلهای جاوااسکریپت قرار نمی دم و می توانم فقط با یک کد کوئری مورد نظر را اجرا کنم.
3- کوئری های مشترک رو در دیتابیس پیدا می کنم و از کدشون استفاده می کنم
4- برای هر کوئری یه توضیحات ذخیره می کنم و بعدا به راحتی میدونم چه کار می کنه
5- اون Stored Procedure رو هم می توانم درون همین کوئری های اجرا کنم همانطور که اینکار در حال حاضر انجام شده است و برای کوئری های پیچیده این کار رو کردم
حالا سئوال اینه که با اینکار آیا وقتی دیتاها زیاد باشند مشکلی پیش می آید یا خیر؟ همین.
موفق باشید

اون 5 موردی که لیست کردید هیچ کدوم مریت نبود بلکه در برخی موارد عیب هم هست.

--------------------------------------
ربطی به تعداد زیاد دیتا نداره. اون چیزی که واضحه شما به ازای هر بار اجرای دستور دوبار به Data Sourceتون در خواست می فرستید

ahmad156
پنج شنبه 10 فروردین 1391, 11:53 صبح
اگر زیاد از stored procedure استفاده بشه کارایی و سرعت database رو کاهش میده

fotrosi
پنج شنبه 10 فروردین 1391, 12:50 عصر
با سلام و تشکر


اون 5 موردی که لیست کردید هیچ کدوم مریت نبود بلکه در برخی موارد عیب هم هست.

--------------------------------------
ربطی به تعداد زیاد دیتا نداره. اون چیزی که واضحه شما به ازای هر بار اجرای دستور دوبار به Data Sourceتون در خواست می فرستید
لطف می کنید بگید چه عیب هایی داره و چرا؟
حالا این خیلی تاثیر منفی روی کارایی سیستم داره؟

fotrosi
پنج شنبه 10 فروردین 1391, 12:51 عصر
اگر زیاد از stored procedure استفاده بشه کارایی و سرعت database رو کاهش میده

راهکار پیشنهادی شما چیه تا از stored procedure زیاد استفاده نشه؟

ahmad156
پنج شنبه 10 فروردین 1391, 13:08 عصر
به نظر بنده شما query های سنگین واونهایی که زیاد استفاده میشه رو به صورت Stored procedure و اونهایی که سبک و کم استفاده میشه به صورت query توی کد استفاده کنین

A.S.Roma
پنج شنبه 10 فروردین 1391, 13:50 عصر
اگر زیاد از stored procedure استفاده بشه کارایی و سرعت database رو کاهش میده

اتفاقا" سرعت و کارایی زیاد میشه !!
MS SQL به ازای هر Inline Sql یه Execution plan جدید میسازه اما برای SP ها فقط یکی میسازه و از Cache استفاده می کنه :
http://msdn.microsoft.com/en-us/library/ms181055.aspx

A.S.Roma
پنج شنبه 10 فروردین 1391, 14:02 عصر
با سلام و تشکر


لطف می کنید بگید چه عیب هایی داره و چرا؟
حالا این خیلی تاثیر منفی روی کارایی سیستم داره؟

شاید کمتر کد بنویسید اما همیشه کم کد نوشتن مناسب نیست.
بحث نگهداری از کد (Code Maintenance) رو همیشه در نظر داشته باشید.
زمانی که بخواهید موردی رو دیباگ کنید یا قابلیتی رو به سیستمتون اضافه کنید باید Frameworkتون انعطاف پذیر باشه.
سیستم های بزرگ همگی چند لایه نوشته میشن و بیزنس رو از کد جدا می کنن . شما با این کارتون بیزنس رو Dependentِ می کنید به Database. (البته در برخی بواسطه ی اهمیت سرعت اجرای Query بیزنس رو به لایه ی DataAccess می برن اما در قالب SP نه Inline SQL )

-----------------------------
در سطح برنامه های کوچک و متوسط فکر نمی کنم این مورد خیلی در Performance برنامه تون تاثیر بذاره.

fotrosi
پنج شنبه 10 فروردین 1391, 18:11 عصر
شاید کمتر کد بنویسید اما همیشه کم کد نوشتن مناسب نیست.
بحث نگهداری از کد (Code Maintenance) رو همیشه در نظر داشته باشید.
زمانی که بخواهید موردی رو دیباگ کنید یا قابلیتی رو به سیستمتون اضافه کنید باید Frameworkتون انعطاف پذیر باشه.
سیستم های بزرگ همگی چند لایه نوشته میشن و بیزنس رو از کد جدا می کنن . شما با این کارتون بیزنس رو Dependentِ می کنید به Database. (البته در برخی بواسطه ی اهمیت سرعت اجرای Query بیزنس رو به لایه ی DataAccess می برن اما در قالب SP نه Inline SQL )

-----------------------------
در سطح برنامه های کوچک و متوسط فکر نمی کنم این مورد خیلی در Performance برنامه تون تاثیر بذاره.

بسیار سپاس گذارم که وقت گذاشته و جواب من را دادید من تشکر می کنم