۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

چرا باید از SQLite استفاده کنید

بیاموزید که چرا این پایگاه داده رابطه ای جاسازی شده فشرده برای بسیاری از برنامه های رایانه ای دسکتاپ، تلفن همراه و لبه می درخشد.

بیاموزید که چرا این پایگاه داده رابطه ای جاسازی شده فشرده برای بسیاری از برنامه های رایانه ای دسکتاپ، تلفن همراه و لبه می درخشد.

روی اکثر برنامه‌های تجاری را بلند کنید، و خواهید دید که آنها راهی برای ذخیره و استفاده از داده‌های ساختاریافته دارند. چه یک برنامه سمت مشتری، یک برنامه با صفحه جلویی وب یا یک برنامه دستگاه لبه، به احتمال زیاد یک برنامه تجاری به یک پایگاه داده نیاز دارد. در بسیاری از موارد، پایگاه داده embedded این کار را انجام می دهد. پایگاه داده های جاسازی شده سبک، فشرده و قابل حمل هستند—و برای برخی از برنامه ها، انتخاب بهتری نسبت به سرورهای سنتی هستند.

SQLite یک پایگاه داده منبع باز قابل جاسازی است که به زبان C نوشته شده و با SQL معمولی قابل استعلام است. . SQLite به گونه ای طراحی شده است که سریع، قابل حمل و قابل اعتماد باشد، چه فقط کیلو بایت داده یا حباب های چند گیگابایتی ذخیره کنید. ما نگاهی به SQLite خواهیم داشت، از جمله مکان و زمان استفاده از آن و نحوه مقایسه آن با جایگزین هایی مانند MySQL، MariaDB، و دیگر پایگاه های داده جاسازی شده محبوب.

SQLite برای چیست؟

رایج ترین و واضح ترین مورد استفاده برای SQLite، خدمت به عنوان یک پایگاه داده رابطه ای معمولی و جدول محور است. SQLite از تراکنش‌ها و رفتارهای اتمی پشتیبانی می‌کند، بنابراین خرابی برنامه یا حتی قطع برق شما را با یک پایگاه داده خراب باقی نمی‌گذارد. SQLite همچنین دارای ویژگی‌های دیگری است که در پایگاه‌های داده رده بالا یافت می‌شود، مانند نمایه‌سازی متن کامل، و پشتیبانی از پایگاه‌های داده بزرگ—تا ۲۸۱ ترابایت با اندازه ردیف تا ۱ گیگابایت.

SQLite همچنین یک راه سریع و قدرتمند برای ذخیره داده های پیکربندی برای یک برنامه ارائه می دهد. به جای تجزیه یک فرمت فایل مانند JSON یا YAML، یک توسعه‌دهنده می‌تواند از SQLite به عنوان رابطی برای آن فایل‌ها استفاده کند – اغلب بسیار سریع‌تر از عملیات دستی روی آن‌ها. SQLite می‌تواند با داده‌های درون حافظه یا فایل‌های خارجی (مثلاً فایل‌های CSV) به‌گونه‌ای کار کند که گویی جداول پایگاه داده بومی هستند، و راهی مفید برای پرس‌وجو از آن داده‌ها ارائه می‌دهد. همچنین از داده‌های JSON پشتیبانی می‌کند، بنابراین داده‌ها را می‌توان به‌عنوان JSON ذخیره کرد یا در محل جستجو کرد.

مزایای SQLite

SQLite دارای مزایای بسیاری است که از پلتفرم و قابلیت حمل زبان شروع می شود. در اینجا مزایای اصلی استفاده از SQLite آمده است:

  • این بین پلتفرم است: یکی از بزرگترین مزایای SQLite این است که می تواند تقریباً در هر مکانی اجرا شود. SQLite به انواع مختلفی از پلتفرم‌ها منتقل شده است: Windows، macOS، Linux، iOS، Android و غیره. به ویژه کاربران ویندوز می توانند از باینری های از پیش کامپایل شده برای Win32، UWP، WinRT و .Net معمولی استفاده کنند. هدف استقرار برنامه شما هرچه باشد، احتمال وجود دارد که نسخه ای از SQLite برای آن موجود باشد یا راهی برای انتقال کد منبع C به آن هدف وجود داشته باشد.
  • با اکثر زبان های برنامه نویسی سازگار است: برنامه هایی که از SQLite استفاده می کنند لازم نیست به زبان خاصی نوشته شوند، تا زمانی که راهی برای اتصال و کار با کتابخانه های خارجی نوشته شده در C وجود داشته باشد. باینری های SQLite مستقل هستند، بنابراین نیازی به جادوی خاصی برای استقرار ندارند—شما به سادگی می توانید آنها را در همان فهرست برنامه خود رها کنید.
  • بله، SQLite با پایتون کار می‌کند: بسیاری از زبان‌ها دارای پیوندهای سطح بالا برای SQLite به عنوان یک کتابخانه هستند و می‌توانند از آن در ارتباط با سایر لایه‌های دسترسی به پایگاه داده برای زبان استفاده کنند. برای مثال، Python، کتابخانه SQLite را بسته‌بندی می‌کند یک عنصر استاندارد با نسخه سهام مفسر پایتون. علاوه بر این، اشخاص ثالث طیف گسترده‌ای از ORMها و لایه‌های داده را نوشته‌اند که از SQLite استفاده می‌کنند، بنابراین در دسترسی به SQLite از طریق رشته‌های خام SQL (که نه تنها دست و پا چلفتی است، بلکه بالقوه خطرناک است) گیر نمی‌آورید.
  • خودگیر: از آنجایی که SQLite یک باینری مستقل است، به راحتی می توان آن را با یک برنامه مستقر کرد و سپس در صورت لزوم با برنامه حرکت کرد. هر پایگاه داده ایجاد شده توسط SQLite همچنین شامل یک فایل است که می تواند با استفاده از دستورات SQL فشرده یا بهینه شود.
  • افزونه‌های شخص ثالث: افزونه‌های باینری شخص ثالث برای SQLite عملکردهای بیشتری را اضافه می‌کنند. SQLCipher رمزگذاری AES 256 بیتی را به فایل های پایگاه داده SQLite اضافه می کند. دیگری، sqlean، توابع بومی SQLite را گسترش می‌دهد تا بسیاری از موارد دیگر را که به‌طور پیش‌فرض در دسترس نیستند، مانند تولید UUID یا معمولی، گسترش دهد. تطبیق عبارت.
  • ابزار گسترده: بسیاری از پروژه های شخص ثالث دیگر ابزارهای اضافی را برای SQLite فراهم می کنند، مانند برنامه افزودنی Visual Studio Code که امکان مرور پایگاه داده از داخل Visual Studio Code یا LiteCLI را فراهم می کند. خط فرمان تعاملی برای SQLite. فهرست مدیریت‌شده منابع SQLite در GitHub شامل گزینه‌های بسیار بیشتری است.
  • SQLite منبع باز است: در نهایت، کد منبع SQLite یک دامنه عمومی است، بنابراین می توان از آن در برنامه های دیگر بدون محدودیت عملی استفاده مجدد کرد.
CockroachDB ابزار مهاجرت پایگاه داده را با راه اندازی CockroachDB Serverless دریافت می کند

SQLite در مقابل MySQL

SQLite اغلب با MySQL مقایسه می‌شود، محصول پایگاه داده منبع باز پرکاربرد که جزء اصلی پشته برنامه‌های امروزی است. به همان اندازه که SQLite شبیه MySQL است، بسته به مورد استفاده، دلایل خوبی برای برتری یکی بر دیگری وجود دارد. این امر در مورد MariaDB، یکی دیگر از پایگاه داده های محبوب که گاهی اوقات با SQLite مقایسه می شود، صادق است.

انواع داده

SQLite دارای انواع داده های بومی نسبتاً کمی است—BLOB، NULL، INTEGER، REAL و TEXT. از سوی دیگر، هر دو MySQL و MariaDB دارای انواع داده‌های اختصاصی برای تاریخ‌ها و زمان‌ها، دقت‌های مختلف اعداد صحیح و شناور و موارد دیگر هستند.

MongoDB ویژگی های هوش مصنوعی مولد را برای افزایش بهره وری توسعه دهندگان اضافه می کند

اگر انواع داده‌های نسبتا کمی را ذخیره می‌کنید، یا می‌خواهید از لایه داده خود برای انجام اعتبارسنجی روی داده‌ها استفاده کنید، SQLite مفید است. با این حال، اگر می خواهید لایه داده شما اعتبار و عادی سازی خود را ارائه دهد، از MySQL یا MariaDB استفاده کنید.

پیکربندی و تنظیم

گزینه‌های پیکربندی و تنظیم SQLite حداقل هستند. بیشتر پرچم‌های داخلی یا خط فرمان آن با موارد لبه یا سازگاری با عقب سروکار دارند. این با فلسفه کلی سادگی SQLite مطابقت دارد: گزینه‌های پیش‌فرض برای اکثر موارد استفاده بسیار مناسب هستند.

MySQL و MariaDB یک جنگل واقعی از گزینه‌های پیکربندی مخصوص پایگاه داده و نصب را ارائه می‌دهند – مجموعه‌بندی، نمایه‌سازی، تنظیم عملکرد، موتورهای ذخیره‌سازی، و غیره. تعداد زیادی از گزینه‌ها به این دلیل است که این محصولات پایگاه داده ویژگی‌های بسیار بیشتری را ارائه می‌دهند. ممکن است مجبور شوید آنها را بیشتر تغییر دهید، اما احتمالاً به این دلیل است که در وهله اول تلاش می‌کنید کارهای بیشتری انجام دهید.

پایگاه داده تک کاربره در مقابل چند کاربره

SQLite برای برنامه‌هایی با یک کاربر همزمان، مانند برنامه‌های دسکتاپ یا تلفن همراه، بهترین گزینه است. MySQL و MariaDB برای مدیریت چندین کاربر همزمان طراحی شده اند. آنها همچنین می‌توانند راه‌حل‌های خوشه‌ای و مقیاس‌پذیر ارائه دهند، در حالی که SQLite نمی‌تواند.

برخی پروژه‌ها ویژگی‌های مقیاس‌بندی را به SQLite اضافه می‌کنند، البته نه به عنوان جایگزین مستقیم برای MySQL یا MariaDB. Canonical نوع خود را از SQLite ایجاد کرده است، dqlite، که برای مقیاس‌بندی در یک خوشه طراحی شده است. داده‌ها از طریق الگوریتم Raft در سراسر گره‌ها ثابت نگه داشته می‌شوند و استقرار dqlite فقط کمی سربار اداری بیشتری نسبت به SQLite دارد.

SQLite در مقابل پایگاه های داده جاسازی شده

SQLite از تنها پایگاه داده قابل جاسازی فاصله دارد. بسیاری دیگر ویژگی‌های مشابهی را ارائه می‌کنند اما بر موارد استفاده یا مدل‌های استقرار متفاوت تأکید دارند.

  • Apache Derby: یک موتور SQL قابل جاسازی که توسط Oracle به عنوان جاوا DB نیز بسته بندی شده است. از آنجایی که Apache Derby به زبان جاوا نوشته شده است و به JVM نیاز دارد، عمدتاً برای جاسازی در برنامه های جاوا.
  • Firebird Embedded: پایگاه داده Firebird، که بصورت متقاطع اجرا می شود -پلتفرم و دارای بسیاری از ویژگی های سطح بالا، به عنوان یک کتابخانه در دسترس است که می تواند در یک برنامه مشتری جاسازی شود. مجموعه ویژگی‌های آن به خوبی با SQLite مقایسه می‌شود، اما SQLite جامعه کاربری و پایگاه پشتیبانی بسیار بزرگ‌تری دارد.
  • Realm: یک پایگاه داده رابطه‌ای با کارایی بالا که برای محیط‌های موبایل (عمدتاً Android) طراحی شده است که می‌تواند از محیط‌های دسکتاپ مانند ویندوز نیز پشتیبانی کند. با این حال، Realm مبتنی بر شی است و از پرس‌و‌جوهای SQL استفاده نمی‌کند – اگر بخواهید خوب است نه استفاده از SQL، اما بد است اگر SQL آشنا و راحت است. Realm اکنون یک پروژه MongoDB است و با این هشدار همراه است که “به خودی خود یک محصول “کاربر نهایی” با یک API پایدار و پشتیبانی شده عمومی نیست.”
  • VistaDB: یک پایگاه داده جاسازی شده برای زمان اجرا .Net. VistaDB در نسخه‌های خاص برای طعم‌ها و تجسم‌های مختلف .Net و با بسیاری از شرکت‌ها در دسترس است ویژگی هایی مانند رمزگذاری کامل پایگاه داده. با این حال، این یک محصول تجاری است، نه منبع باز.
  • Berkeley DB: یک پروژه Oracle، اسماً یک فروشگاه کلید/مقدار، اما پروژه‌ای که از SQLite در نسخه‌های اخیر به عنوان راهی برای رسیدگی به پرسش‌های SQL استفاده می‌کند. موتور پایگاه داده زیربنایی Berkeley DB دارای پیشرفت‌هایی در عملکرد است که SQLite نمی‌تواند مطابقت، مانند توانایی مدیریت چندین عملیات نوشتن همزمان. Berkeley DB دارای مجوز دوگانه است، یا تحت GNU Affero GPL 3 یا از طریق مجوز تجاری، بسته به مورد استفاده شما.
Xamarin Forms مرده است. حالا چی؟

محدودیت های SQLite

انتخاب‌های طراحی SQLite باعث می‌شود که برای برخی از سناریوها مناسب باشد اما برای برخی دیگر مناسب نیست. در اینجا چند مکان وجود دارد که SQLite به خوبی کار نمی کند:

  • برنامه‌هایی که از ویژگی‌هایی استفاده می‌کنند که SQLite پشتیبانی نمی‌کند: SQLite پشتیبانی نمی‌کند—و در بسیاری از موارد سعی نمی‌کند از آن پشتیبانی کند—ویژگی های مختلف پایگاه داده رابطه ای. بسیاری از موارد گوشه ای هستند، اما حتی یکی از آنها می تواند معامله را به هم بزند.
  • برنامه‌هایی که به طراحی‌های کوچک‌تر نیاز دارند: نمونه‌های SQLite منحصر به فرد و مستقل هستند و هیچ همگام‌سازی بومی بین آنها وجود ندارد. آنها را نمی توان با هم فدرال کرد یا به یک خوشه تبدیل کرد. هر برنامه نرم افزاری که از طرحی با مقیاس بزرگ استفاده می کند، نمی تواند از SQLite استفاده کند. همانطور که در بالا ذکر شد، برخی از اشخاص ثالث SQLite را برای افزودن آن ویژگی‌ها گسترش داده‌اند، اما آنها در طراحی SQLite نیستند.
  • برنامه‌های دارای عملیات نوشتن همزمان از چندین اتصال: SQLite پایگاه داده را برای عملیات نوشتن قفل می‌کند، بنابراین هر چیزی که شامل چندین عملیات نوشتن همزمان باشد می‌تواند منجر به مشکلات عملکرد شود. با این حال، برنامه‌هایی که چندین بار خواندن همزمان دارند، معمولاً سریع هستند. SQLite 3.7.0 و بالاتر Write-Ahead Logging mode را فراهم می کند تا چندین نوشتن سریعتر کار کنند، اما با برخی محدودیت ها همراه است برای یک جایگزین، Berkeley DB، در بالا ذکر شد.
  • برنامه‌هایی که نیاز به تایپ داده قوی دارند: SQLite دارای انواع داده نسبتاً کمی است—مثلاً نوع تاریخ بومی ندارد. این بدان معنی است که برنامه باید اکثر انواع را اجرا کند. اگر می‌خواهید پایگاه داده برخلاف برنامه کاربردی، ورودی‌ها را برای مقادیر datetime عادی و محدود کند، ممکن است SQLite برای شما کار نکند.