در این آموزش مروری کلی بر روی پایگاهداده SQLite خواهیم داشت تا بدانیم SQLite چیست و در مورد ویژگیهایی که باعث شده تا این پایگاه داده پر استفادهترین باشد، صحبت خواهیم کرد.
SQLite چیست
همانطور که از نام این پایگاهداده پیداست، از دو قسمت SQL و Lite تشکیل شده است. واژه SQL بیانگر این است که پرس و جو در این پایگاه داده از استاندارد مشترک میان همه پایگاهدادههای رابطهای تبعیت میکند و واژه Lite بیانگر light weight یا سبک و کم حجم بودن است. یعنی نصب، مدیریت و استفاده از منابع در این پایگاهداده بسیار اندک است. از این رو این ابزار را میتوان به راحتی در هر محیطی مورد استفاده قرار داد. در واقع SQLite یک کتابخانه نرمافزاری است که یک سیستم مدیریت پایگاه دادهای رابطهای را برای شما فراهم میکند.
امکانات SQLite
مهمترین امکانات این پایگاهداده عبارتند از:
- self-contained
- server-less
- zero-configuration
- transactional
در ادامه به تشریح هر یک از ویژگیهای فوق میپردازیم.
Self-Contained
این ویژگی به معنای خودمختار بودن است. یعنی این کتابخانه برای راهاندازی به حداقل پشتیبانی از سمت سیستم عامل نیازمند است. به بیان دیگر بیشتر نیازهای خود برای اجرا را خودش تامین میکند. این ویژگی باعث میشود که بتوان SQLite را در هر محیطی مورد استفاده قرار داد. به عنوان مثال گوشیهای iPhone و Android و کنسولهای بازی و حتی برخی از دستگاههای پخش چندرسانهای این پایگاهداده را در خود جای دادهاند.
جالب است بدانید که SQLite با زبان معروف و قدرتمند C توسعه داده شده است و شامل دو فایل به نامهای sqlite3.c و sqlite3.h میشود. در هر برنامهای که نیاز به این پایگاهداده باشد، تنها کافیست تا این دو فایل را به سورس کد برنامه اضافه کرده و برنامه خود را کامپایل کنیم.
Server-less
در حالت عادی، یک سیستم مدیریت پایگاه اطلاعات مانند MySQL یا PostgreSQL و… برای اجرا به یک Process جداگانه نیاز دارند. برنامهای که میخواهد به اطلاعات موجود در پایگاهداده دسترسی پیدا کند، درخواست خود را به کمک پروتکل TCP/IP به Process پایگاهداده ارسال میکند و جواب را از طریق همین کانال ارتباطی دریافت میکند. به این فرآیند، معماری Client/Server میگویند.
دیاگرام زیر این معماری را نشان میدهد:
نگران نباشید، SQLite با این ساختار کار نمیکند. در واقع هنگام استفاده از SQLite به سرور نیاز نداریم. یعنی این پایگاهداده با برنامه ما ادغام میشود و دسترسی به فایلهای پایگاه داده را میسر میکند. به این طریق، خواندن و نوشتن در پایگاهداده مستقیما با خواندن و نوشتن در فایلهای آن صورت میگیرد.
دیاگرام زیر معماری بدون نیاز به سرور SQLite را نمایش میدهد:
Zero configuration
از آنجا که SQLite نیازمند سرور نیست، نیازی به نصب ندارد و همچنین چون Process سرور نداریم، تنظیماتی برای این سرور هم نخواهیم داشت.
Transactional
تراکنش پایگاه داده نمادی از واحد کار است که به روشی منسجم و قابل اعتماد و مستقل از سایر تراکنش ها در یک سیستم مدیریت پایگاه داده (یا سیستم مشابه) انجام می شود. یک تراکنش به طور کلی هر گونه تغییر در پایگاه داده را نشان می دهد. یک تراکنش، از یک یا چند پردازش مستقل تشکیل شده است که هر یک اطلاعات را در پایگاه داده میخواند و/یا مینویسد. هنگامی که این اتفاق میافتد، اغلب مهم است که اطمینان حاصل شود که تمام این پردازشها، پایگاه داده را در وضعیت ثبات و پایداری قرار میدهند. برای حصول اطمینان، در SQLite تمام تراکنشها به طور کامل ACID-Compliant هستند. ACID به مجموعه استانداردی از ویژگی ها اشاره دارد که تضمین می کند تراکنشهای پایگاه داده به طور قابل اعتماد پردازش شوند. به ویژه به نحوه بازیابی پایگاه داده از هر گونه شکستی که ممکن است در هنگام پردازش تراکنش رخ دهد. این یعنی تمام پرس و جوها و تغییرات دارای ویژگیهای زیر هستند:
-
Atomic
- اتمی بودن به این معنی است که این قابلیت تضمین میکند که یا همهی تراکنش موفق میشوند یا هیچکدام از پردازشهای آن موفق نمیشوند. شما با حالتی روبرو نمیشوید که بخشی از تراکنش قبول شود و بخشی دیگر با مشکل روبرو شود.به بیان دیگر اگر بخشی از یک تراکنش با شکست روبرو شود، کل تراکنش ناموفق خواهد شد. با ویژگی اتمی بودن، یا “همه یا هیچ” اتفاق خواهد افتاد.
-
Consistent
- این ویژگی تضمین می کند که همهی داده های شما سازگار هستند. همه داده ها بر اساس تمام قوانین تعریف شده، از جمله constraints، cascade و triggers که در پایگاه داده اعمال شده اند معتبر خواهند بود.
-
Isolated
- تضمین می کند که همه تراکنش ها به صورت مجزا از هم انجام می شوند. هیچ تراکنشی تحت تأثیر هیچ تراکنش دیگری قرار نخواهد گرفت. بنابراین یک تراکنش نمی تواند دادههای هر تراکنش دیگری را که هنوز کامل نشده است بخواند.
-
Durable
- دوام به این معنی است که، هنگامی که یک تراکنش commit شد، در سیستم باقی می ماند – حتی اگر بلافاصله پس از تراکنش، سیستم از کار بیفتد. هر گونه تغییر ناشی شده از تراکنش باید به طور دائم ذخیره شود. اگر سیستم به کاربر بگوید که تراکنش موفقیت آمیز بوده است، تراکنش باید واقعا موفق شده باشد.
به بیان دیگر، تمام تغییراتی که در یک تراکنش گنجانده شدهاند یا به طور کامل اتفاق میافتند یا اصلا اتفاق نمیافتند. مثلا زمانی که شرایط ناخواستهای رخ بدهد، مثلا برنامه ما Crash کند، سیستم به علت نوسان برق یکباره خاموش شود یا سیستم عامل دچار مشکل شود، اگر تراکنشی در حال اجرا باشد و به اتمام نرسیده باشد، پایگاه داده به وضعیت قبل از آن تراکنش برمیگردد و به این صورت، تغییرات بطور ناقص بر روی پایگاه داده اعمال نخواهند شد.
ویژگیهای خاص SQLite
اول اینکه SQLite از نوع دادهای پویا(dynamic data type) برای جداول بهره میبرد. این یعنی هر نوع مقداری را میتوان در هر ستونی، بدون در نظر گرفتن نوع دادهای آن ذخیره کرد!
دوم اینکه SQLite به شما این امکان را میدهد که با یک connection به طور همزمان به چندین فایل پایگاهداده دسترسی پیدا کنید. این قابلیت ویژگیهای خیلی خوبی را به همراه خواهد آورد. مثلا میتوانید جدوالی از پایگاههای دادهای مختلف را با هم Join کنید و یا اطلاعات یک جدول را فقط با یک دستور در جدول دیگر کپی کنید.
و در آخر، SQLite به شما این امکان را میدهد که به جای استفاده از سیستم فایل، پایگاه داده خود را در حافظه RAM سیستم ایجاد کنید. این نوع پایگاهداده از سرعتی فوقالعاده برخوردار است!
منابع:
https://www.sqlite.org/features.html
https://www.sqlite.org/copyright.html
https://www.sqlite.org/docs.html
موفق و پیروز باشید…