زبان پایگاههای داده، زبان پرس و جوی ساختاریافته، همه جا حاضر، قدرتمند و برای توسعهدهندگان مهم است. با این نکات شروع کنید.
از زمانی که زبان پرس و جو ساختاریافته در اوایل دهه ۱۹۷۰ اختراع شد، این روش پیشفرض برای مدیریت تعامل با پایگاههای داده بوده است. SQL با توجه به Stack Overflow یکی از پنج زبان برنامه نویسی برتر با حدود ۵۰٪ از توسعه دهندگان باقی می ماند از آن به عنوان بخشی از کار خود استفاده می کنند. با وجود این همه جا، SQL هنوز به سختی یا ترسناک بودن شهرت دارد. تا زمانی که بدانید SQL چگونه کار می کند، هیچ چیز نمی تواند دور از واقعیت باشد.
در عین حال، از آنجا که امروزه کسبوکارها ارزش بیشتری برای دادههایی که ایجاد میکنند قائل میشوند، دانستن SQL فرصتهای بیشتری را برای شما به عنوان یک توسعهدهنده نرمافزار و پیشرفت حرفهتان فراهم میکند. بنابراین چه چیزهایی باید در مورد SQL بدانید و از چه مشکلاتی باید اجتناب کنید؟
از SQL نترسید
استفاده از SQL می تواند آسان باشد زیرا بسیار ساختار یافته است. SQL به طور دقیق نحوه کنار هم قرار دادن پرس و جوها را تعریف می کند و خواندن و درک آنها را آسان تر می کند. اگر به کد شخص دیگری نگاه می کنید، باید بتوانید بفهمید که آنها می خواهند با مرور ساختار پرس و جو به چه چیزی دست پیدا کنند. این همچنین تنظیم پرس و جوها را در طول زمان آسانتر میکند و عملکرد را بهبود میبخشد، بهویژه اگر به عملیات پیچیدهتر و JOIN
نگاه میکنید.
با این حال، بسیاری از توسعه دهندگان به دلیل تجربه اولیه خود از SQL عقب مانده اند. این به نحوه استفاده از اولین دستوری که یاد می گیرید بستگی دارد: SELECT
. رایج ترین اشتباهی که توسعه دهندگان هنگام شروع نوشتن SQL مرتکب می شوند این است که انتخاب می کنند چه چیزی را با SELECT
پوشش دهند. اگر می خواهید به داده های خود نگاه کنید و نتیجه بگیرید، چرا همه چیز را با SELECT *
انتخاب نکنید؟
استفاده بیش از حد از SELECT
میتواند تأثیر زیادی بر عملکرد داشته باشد و در طول زمان بهینهسازی درخواست شما را دشوار میکند. آیا لازم است همه چیز را در پرس و جو خود بگنجانید یا می توانید دقیق تر بگویید؟ این تأثیری در دنیای واقعی دارد، زیرا میتواند منجر به پاسخهای عظیم ResultSet
شود که بر ردپای حافظهای که سرور شما برای عملکرد مؤثر به آن نیاز دارد، تأثیر میگذارد. اگر پرس و جو شما داده های زیادی را پوشش می دهد، می توانید در نهایت حافظه بیشتری نسبت به نیاز به آن اختصاص دهید، به خصوص اگر پایگاه داده خود را در یک سرویس ابری اجرا می کنید. مصرف ابری هزینه دارد، بنابراین میتوانید در نهایت بسیار بیشتر از آنچه نیاز دارید هزینه کنید تا در نحوه نوشتن SQL اشتباه کنید.
انواع داده خود را بشناسید
یکی دیگر از مشکلات رایج برای توسعه دهندگان هنگام استفاده از SQL در مورد نوع داده ای است که آنها انتظار دارند در یک ستون قرار گیرند. دو نوع داده اصلی وجود دارد که انتظار دارید – اعداد صحیح و کاراکترهای متغیر یا varchar. فیلدهای عدد صحیح حاوی اعداد هستند، در حالی که فیلدهای varchar می توانند شامل اعداد، حروف یا کاراکترهای دیگر باشند. اگر با انتظار یک نوع – معمولاً اعداد صحیح – به دادههای خود نزدیک شوید و سپس نوع دیگری را دریافت کنید، میتوانید عدم تطابق نوع داده را در نتایج محمول خود دریافت کنید.
برای جلوگیری از این مشکل، در نحوه برخورد با دستورات دستورات و اسکریپتهای بیانیه آمادهای که ممکن است به طور منظم استفاده کنید، مراقب باشید. این به شما کمک میکند از موقعیتهایی که انتظار یک نتیجه را دارید و چیز دیگری را دریافت میکنید اجتناب کنید. به طور مشابه، هنگام JOIN
هر جداول پایگاه داده را با هم ارزیابی کنید تا از ستون هایی با انواع داده های مختلف استفاده نکنید. بررسی دادههایتان میتواند به شما کمک کند هنگام انجام آن JOIN
از دست دادن دادهها جلوگیری کنید، مثلاً مقادیر داده در فیلد کوتاه شده یا به طور ضمنی به مقدار دیگری تبدیل میشوند.
موضوع دیگری که معمولاً نادیده گرفته میشود، مجموعه شخصیتها یا مجموعه نویسهها است. نادیده گرفتن آن آسان است، اما همیشه بررسی کنید که برنامه شما و پایگاه داده شما از یک مجموعه نویسه در کار خود استفاده می کنند. وجود مجموعه نویسههای مختلف در جای خود میتواند منجر به عدم تطابق رمزگذاری شود، که میتواند نمای برنامه شما را کاملاً مختل کند و از استفاده از یک زبان یا نمادهای خاص جلوگیری کند. در بدترین حالت، این می تواند منجر به از دست دادن داده ها یا خطاهای عجیب و غریب شود که اشکال زدایی آنها سخت است.
درک کنید که چه زمانی ترتیب داده مهم است
یک فرضی که بسیاری از توسعه دهندگان هنگام شروع به کار در پایگاه داده می کنند این است که ترتیب ستون ها دیگر اهمیتی ندارد. از این گذشته، ما بسیاری از ارائه دهندگان پایگاه داده داریم که به ما می گویند که نیازی به دانستن طرحواره ها نداریم و ابزار آنها می تواند همه اینها را برای ما انجام دهد. با این حال، در حالی که ممکن است به نظر برسد که هیچ تاثیری وجود ندارد، ممکن است هزینه محاسباتی قابل توجهی بر روی زیرساخت ما وجود داشته باشد. هنگام استفاده از سرویسهای ابری که هزینه استفاده را دریافت میکنند، میتوانند به سرعت اضافه شوند.
دانستن این نکته مهم است که همه پایگاههای داده در اینجا یکسان نیستند و همه فهرستها نیز یکسان نیستند. برای مثال، ترتیب ستونها برای نمایههای ترکیبی بسیار مهم است، زیرا این ستونها از سمت چپ در ترتیب ایجاد فهرست ارزیابی میشوند. بنابراین، در طول زمان بر عملکرد بالقوه تأثیر می گذارد.
با این حال، ترتیبی که ستونها را در یک عبارت WHERE
اعلام میکنید تأثیر یکسانی ندارد. این به این دلیل است که پایگاه داده دارای اجزایی مانند طرح پرس و جو و بهینه ساز پرس و جو است که سعی می کند پرس و جوها را به بهترین نحو اجرا کند. آنها میتوانند ترتیب ستونها را در عبارت WHERE
سازماندهی و تغییر دهند، اما همچنان به ترتیب ستونها در فهرستها وابسته هستند.
بنابراین، آنطور که به نظر می رسد ساده نیست. درک اینکه ترتیب دادهها بر عملکردها و شاخصها تأثیر میگذارد میتواند فرصتهایی را برای بهبود عملکرد کلی و بهینهسازی طراحی شما فراهم کند. برای رسیدن به این هدف، اصلی بودن داده ها و اپراتورهای شما بسیار مهم است. درک این موضوع به شما کمک میکند تا طراحی بهتری داشته باشید و ارزش بلندمدت بیشتری کسب کنید.
مراقب تفاوت های زبانی باشید
یک مشکل رایج برای کسانی که به تازگی با SQL شروع به کار کرده اند، در مورد NULL
است. برای توسعه دهندگانی که از جاوا استفاده می کنند، اتصال پایگاه داده جاوا (JDBC) یک API برای اتصال برنامه آنها به پایگاه داده ارائه می دهد. با این حال، در حالی که JDBC SQL NULL
را به جاوا null
نگاشت می کند، آنها یکسان نیستند. دستور NULL
در SQL را میتوان UNKNOWN
نیز نامید، به این معنی که SQL NULL = NULL
نادرست است و با null = یکسان نیست. = null
در جاوا.
نتیجه نهایی این است که عملیات محاسباتی با NULL
ممکن است به چیزی که انتظار دارید منجر نشود. با دانستن این اختلاف، میتوانید از مشکلات احتمالی در نحوه ترجمه از یک عنصر برنامه خود به پایگاه داده و طراحی جستجوی خود جلوگیری کنید.
الگوهای متداول دیگری وجود دارد که باید از جاوا و پایگاه داده اجتناب کنید. همه اینها به نحوه و مکان انجام و پردازش عملیات مربوط می شود. به عنوان مثال، می توانید جداول را از پرس و جوهای جداگانه در نقشه ها بارگیری کنید و سپس آنها را برای پردازش در حافظه جاوا بپیوندید. با این حال، انجام این کار در حافظه بسیار پیچیدهتر و از نظر محاسباتی گرانتر است. به سفارش دادن، جمع آوری یا اجرای هر چیزی ریاضی نگاه کنید تا در عوض توسط پایگاه داده شما پردازش شود. در اکثر موارد، نوشتن این پرس و جوها و محاسبات در SQL آسانتر از پردازش آنها در حافظه جاوا است.
اجازه دهید پایگاه داده کار را انجام دهد
در کنار آسانتر کردن تجزیه و بررسی این کار، پایگاه داده احتمالاً برای انجام محاسبات سریعتر از الگوریتم شما خواهد بود. فقط به این دلیل که می توانید نتایج را در حافظه پردازش کنید به این معنی نیست که باید این کار را انجام دهید. انجام این کار به دلایل سرعت کلی ارزش ندارد. باز هم، هزینه کردن در سرویسهای ابری درون حافظه گرانتر از استفاده از پایگاه داده برای ارائه نتایج است.
این در مورد صفحه بندی نیز صدق می کند. صفحه بندی نحوه مرتب سازی و نمایش نتایج پرس و جوهای خود را در چندین صفحه به جای یک صفحه پوشش می دهد و می تواند در پایگاه داده یا حافظه جاوا انجام شود. درست مانند عملیات ریاضی، نتایج صفحه بندی باید در پایگاه داده انجام شود تا در حافظه. دلیل این امر ساده است – هر عملیات در حافظه باید تمام داده ها را به حافظه بیاورد، تراکنش را انجام دهد و سپس آن را به پایگاه داده برگرداند. همه اینها از طریق شبکه انجام می شود و برای هر بار انجام یک رفت و برگشت اضافه می شود و تاخیر تراکنش نیز اضافه می شود. استفاده از پایگاه داده برای این تراکنش ها بسیار کارآمدتر از تلاش برای انجام کار در حافظه است.
پایگاههای اطلاعاتی همچنین دستورات مفید زیادی دارند که میتوانند این عملیات را حتی کارآمدتر کنند. با استفاده از دستوراتی مانند LIMIT
، OFFSET
، TOP
، START AT
و FETCH code>، میتوانید درخواستهای صفحهبندی خود را در مورد نحوه مدیریت مجموعه دادههایی که با آنها کار میکنید کارآمدتر کنید. به طور مشابه، میتوانیم از جستجوی ردیفهای اولیه برای بهبود بیشتر عملکرد اجتناب کنیم.
از اشتراک اتصال استفاده کنید
پیوند دادن یک برنامه کاربردی به پایگاه داده نیاز به کار و زمان دارد تا قبل از برقراری اتصال و انجام تراکنش انجام شود. به همین دلیل، اگر برنامه شما به طور منظم فعال باشد، هزینهای است که میخواهید از آن اجتناب کنید. رویکرد استاندارد برای این کار استفاده از یک مخزن اتصال است، که در آن مجموعهای از اتصالات در طول زمان باز نگه داشته میشوند، نه اینکه مجبور باشند هر بار که نیاز به تراکنش است، آنها را باز و بسته کنیم. این به عنوان بخشی از JDBC 3.0 استاندارد شده است.
با این حال، هر توسعه دهنده ای ادغام اتصال را پیاده سازی نمی کند یا از آن در برنامه های خود استفاده نمی کند. این می تواند منجر به هزینه های اضافی در عملکرد برنامه شود که به راحتی قابل اجتناب است. ادغام اتصال عملکرد یک برنامه کاربردی را در مقایسه با همان سیستمی که بدون آن اجرا می شود بسیار افزایش می دهد و همچنین مصرف کلی منابع را کاهش می دهد. همچنین زمان ایجاد اتصال را کاهش می دهد و کنترل بیشتری بر استفاده از منابع فراهم می کند. البته، مهم است که بررسی کنید که برنامه و مؤلفه های پایگاه داده شما از تمام مراحل JDBC در مورد بستن اتصالات و بازگرداندن آنها به منابع منبع پیروی می کنند، و اینکه کدام عنصر از برنامه شما در عمل مسئول این کار خواهد بود.
از مزیت پردازش دسته ای استفاده کنید
امروزه، ما شاهد تاکید زیادی بر تراکنشهای بلادرنگ هستیم. ممکن است فکر کنید که کل برنامه شما باید در زمان واقعی کار کند تا بتواند با خواسته های مشتری یا نیازهای تجاری مطابقت داشته باشد. هرچند، این وضعیت، موردنظر نیست. پردازش دستهای هنوز رایجترین و کارآمدترین روش برای انجام چندین تراکنش در مقایسه با اجرای چندین عملیات INSERT
است.
استفاده از JDBC واقعاً می تواند در اینجا کمک کند، زیرا پردازش دسته ای را درک می کند. برای مثال، میتوانید یک دسته INSERT
با یک دستور SQL و مجموعههای ارزش bind متعدد ایجاد کنید که در مقایسه با عملیات مستقل کارآمدتر خواهد بود. یکی از عناصری که باید در نظر داشته باشید این است که داده ها را در زمان های غیر اوج تراکنش بارگیری کنید تا بتوانید از هرگونه ضربه به عملکرد جلوگیری کنید. اگر این امکان پذیر نیست، می توانید به جای آن به طور منظم به عملیات دسته ای کوچکتر نگاه کنید. این کار به روز نگه داشتن پایگاه داده شما و همچنین کوچک نگه داشتن لیست تراکنش ها و جلوگیری از قفل شدن پایگاه داده یا شرایط مسابقه بالقوه را آسان تر می کند.
چه در SQL تازه کار باشید و چه سال هاست از آن استفاده می کنید، این مهارت زبانی حیاتی برای آینده باقی می ماند. با عملی کردن درس های بالا، باید بتوانید عملکرد برنامه خود را بهبود بخشید و از مزایای SQL استفاده کنید.
چارلی باتیستا رهبر فنی PostgreSQL در پرکونا.
—
New Tech Forum مکانی را برای رهبران فناوری - از جمله فروشندگان و سایر مشارکتکنندگان خارجی - فراهم میکند تا فناوری سازمانی نوظهور را در عمق و وسعت بیسابقه بررسی و بحث کنند. انتخاب ذهنی است، بر اساس انتخاب ما از فناوری هایی که معتقدیم مهم هستند و برای خوانندگان InfoWorld بیشترین علاقه را دارند. InfoWorld وثیقه بازاریابی را برای انتشار نمی پذیرد و حق ویرایش تمام محتوای ارائه شده را برای خود محفوظ می دارد. همه پرس و جوها را به doug_dineley@foundryco.com.
پست های مرتبط
آنچه توسعه دهندگان نرم افزار باید در مورد SQL بدانند
آنچه توسعه دهندگان نرم افزار باید در مورد SQL بدانند
آنچه توسعه دهندگان نرم افزار باید در مورد SQL بدانند