Some text some message..

۵ پایگاه داده (Database) محبوب برای توسعه اپلیکیشن موبایل

  • ۱۵ مرداد ۱۳۹۷
  • 38872
  • 0
  • مطالعه این مطلب، حدود 22 دقیقه زمان میبرد.

پیش‌نوشت۱: این متن حاوی لغات و عباراتی است که یا معادل فارسی ندارند یا معادل فارسی‌شان ملموس نیست و خواننده را گیج و سردر گم می‌کند. به همین دلیل سعی شده تا حد امکان از واژگان اصلی با املای انگلیسی استفاده شود و توضیحات هرکدام در انتهای متن آورده شود.

اپلیکیشن‌های موبایل هرچه داده‌های بیشتری داشته باشند بهتر کار می‌کنند. پایگاه‌های داده هم رایج‌ترین ابزار برای تأمین و مدیریت این داده‌ها هستند.  پس نتیجه می‌گیریم هر اپلیکیشن موبایل از یک پایگاه داده برای تأمین و مدیریت داده‌هایش بهره می‌برد. یکی از روش‌های رایج پیاده‌سازی پایگاه داده قرار دادن آن روی فضای ابری (Cloud) است که در اینصورت اپلیکیشن داده‌های خود را به شکل راه‌دور با یک هاست تبادل می‌کند. در این روش نیاز داریم که اپلیکیشن به صورت مداوم با یک اتصال سریع و مطمئن به پایگاه داده متصل باشد.

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

شاید هم بخواهیم علاوه بر اینکه داده‌ها روی یک هاست خارجی ذخیره می‌شوند، در حالتی که ستگاه به شبکه وصل نیست هم اپلیکیشن به درستی کار کند. در چنین شرایطی احتمالا انتضار داریم که دسترسی موقتی به شبکه داشته باشیم تا اطلاعات سینک شوند یا داده‌ها در گوشی ذخیره شوند و به محض آنلاین شدن تبادل و همگام‌سازی (Sync) صورت گیرد. در این حالت چه می‌توانیم بکنیم؟

پایگاه‌های داده Embeddable[1]، سبک، کتابخانه‌هایی Self-Contained[2] بدون هیچ جزء مرتبط به سرور، بدون نیاز به Adminstration[3]، یک Code Footprint[4] کوچک و نیازمند منابع محدود هستند. اپلیکیشن‌های موبایل به سادگی به آن‌ها متصل می‌شوند (دینامیک یا استاتیک) و از آن‌ها برای ایجاد و مدیریت پایگاه‌های داده (شخصی یا اشتراک‌گذاشته‌شده) ‌شان به صورت محلی روی دستگاه بهره می‌برند.

در حال حاضر چند پایگاه داده Embeddable برای استفاده روی اپلیکیشن‌های موبایل وجود دارند که می‌توانیم از آن استفاده کنیم. بیایید با هم چند مورد از محبوب‌ترین این نوع پایگاه‌های داده را بررسی کنیم. درمورد ویژگی‌های کلیدی آن‌ها صحبت کنیم و ببینیم در چه شرایطی می‌توانیم از آن‌ها استفاده کنیم. جدولی که در ادامه می‌بینیم خلاصه‌ای از انواع پایگاه‌های داده، انواع داده‌ای که می توانند ذخیره کنند، لایسنسی که تحت آن توزیع شده اند و پلتفرم‌هایی که پشتیبانی می‌کنند است.

دیتابیس برکلی

پایگاه داده برکلی (Berkley DB) از خانواده کتابخانه‌های منبع-باز (Open-Source) است و به ما اجازه می‌دهد داده‌هایمان را به روش ارتباطی قدیمی (با استفاده از SQL) یا به شکل جفت‌های key-value[5] (که در آن هم key هم value آرایه‌های بایتی هستند) یا به صورت شیء‌های جاوا (Java Objects) یا یک سند XML مدیریت کنیم. فارغ از API ای که انتخاب می‌کنیم، دیتابیس برکلی  ایندکس کردن، کش کردن، تعاملات (Transaction)، دسترسی تک نویسنده/ چند خواننده، جستجوی تمام متنی (برای رابط کاربری SQL)، بازیابی خودکار شکست، پاسخگویی، فشرده‌سازی و رمزگذاری را نیز شامل می‌شود.

یکی دیگر از ویژگی‌های خارق‌العاده پایگاه داده برکلی این است که APIهای SQL ای که ایجاد می‌کند کاملا با SQLLite سازگار است. در نتیجه، ما می‌توانیم اپلیکیشن‌های SQLLite خودمان را با استفاده از پایگاه داده برکلی به عنوان موتور ذخیره‌سازی بنیادین (Undelying Storage Engine)، بدون نیاز به بازنویسی ایجاد کنیم. تنها کاری که در این راستا باید انجام دهیم این است که نسخه مناسبی از کتابخانه پایگاه داده برکلی را نصب کنیم. چنین ترکیبی از SQLLite و پایگاه داده برکلی برای اپلیکیشن‌های همسو (Concurrent) و Write-Intensive[6] (More than the ratio 10/90: 10 data write for 90 read. ) عملکرد بهتری دارند.

پایگاه‌داده برکلی اتصالات API را میان چندین زبان برنامه‌نویسی به وجود می‌آورد. این زبان‌ها شامل این موارد هستند: C++ و جاوا. همچنین بر روی سیستم‌ عامل‌های مختلفی من جمله اندروید و iOS کامپایل (Compile)، اجرا و امتحان شده اند. علی رغم این‌ها، در شرایطی که می‌خواهیم از AGPL License در اپلیکیشن خودمان بهره ببریم اما نمی خواهیم کد مرجع (Source Code) خود را تبادل کنیم، کارمان با تأخیر مواجه می‌شود.

باید خاطر نشان کنیم که به خاطر تلاش برکلی برای تعبیه ویژگی‌هایی که از پایگاه‌های داده سنتی Client/Server انتظار می‌رود یک راهکار و روش سنگین وزن به شمار می‌آید. در نتیجه اگر واقعا اجباری به استفاده از برکلی نداشته باشیم راه‌حل‌های جایگزی سبک وزن‌تری در اختیار داریم.

نکته: اگرچه برکلی از iOS پشتیبانی می‌کند اما به دلیل ناسازگاری با قواعد و مقررا ت اپ استور (App Store)، اپلیکیشن روی آن مجوز قرار گرفتن ندارد.

دیتابیس کوچ بیس

کوچ بیس لایت (Couchbase Lite) یک پایگاه‌داده سند محور (Document oriented) است: داده‌ها به صورت سندهای JSON ذخیره می‌شوند. هر سند ممکن است یک یا چند ضمیمه داشته باشد. این ضمیمه‌ها الزاما داده‌های باینری غیرقابل ترجمه هستند که جدای از سند اصلی بارگذاری و ذخیره می‌شوند. کوچ بیس لایت شاخص‌های مداومی (به نام View) را پشتیبانی می‌کند و با بهره‌گیری از کوچک‌کننده نقشه، از آن‌ها گزارش می‌گیرد و مدیریت می‌کند.

ترکیب سه جز دیتابیس موبایل NoSQL JSON یعنی کوچ بیس لایت، کوچ بیس گتوی (Couchbase Gateway) و کوچ بیس سرور (Couchbase Server) راهکاری است که کوچ بیس موبایل (Couchbase Mobile) ارائه شده است. یکی از ویژگی‌های کلیدی کوچ بیس موبایل همگام‌سازی درونی (از طریق کوچ بیس گتوی) بین پایگاه‌های داده محلی (کوچ بیس لایت) و پایگاه‌های داده ابری (کوچ بیس سرور) است. این ویژگی باعث می‌شود، برنامه‌نویس از بار نوشتن کدهای همگام‌سازی به دست خودش راحت شود. برای پشتیبانی از این ویژگی، کوچ بیس لایت به همراه یک مکانیزم برطرف‌کننده تعارض (Conflict Resolution) ارائه می‌شود که بسیار شبیه چیزی است که توسط گیت (Git) استفاده می‌شود.

کوچ بیس لایت برای هر دو سیستم عامل اندروید و iOS از APIهای اصیل (Native) بهر می‌برد. این پایگاه داده همچنین از پلاگ-این (Plug-in) هایی نیز برای دو ابزار پرکاربرد و چندپلتفرمی برنامه‌نویسی موبایل (Phone Gap‌و Xamarin) برخوردار است.

دیتابیس لول

پایگاه داده لول (Level DB) یک کتابخانه منبع-باز (Open Source) نوشته گوگل است که ذخیره‌سازی Key-Vlue را پیاده‌سازی می‌کند –در شرایطی که Keyها و Valueها آرایه‌های ۸ بایتی هستند. در این روش داده‌ها به ترتیب Key مرتب می‌شود. پایگاه داده لول از Atomic Batch Updates، Forward and Backward Iteration روی کانتنت‌های پایگاه، اسنپ شات (Snapshot)، کش کردن، یکپارچگی داده‌ها و فشرده‌سازی خودکار داده‌ها پشتیبانی می‌کند. یکی از مهم‌ترین محدودیت‌های لول که به خاطر کتابخانه‌ها به وجو می‌آید این است که در هر لحظه بیشتر از یک فرایند حق دسترسی به پایگاه داده را ندارد.

پایگاه داده لول با زبان C++ نوشته شده است. برنامه‌نویسان iOS هم آن را به صورت مستقیم در اپلیکیشن‌هایشان و هم از طریق مدل‌های مختلف Objective-C که برای این کار وجود دارد استفاده کنند. برنامه نویسان اندروید هم می توانند از لول تحت JNI و NDK بهره ببرند.

دیتابیس SQLite

اس کیو لایت یک کتابخانه منبع باز برای مدیریت پایگاه‌های داده مرتبط است که می‌توانند روی دیسک و حافظه (Memory) ذخیره شوند. این پایگاه از تایپ داینامیک، تعاملات، جستجوی تمام متنی، دسترسی تک نویسنده و چند خواننده، کوئری‌های  بازه بهینه و کش اشتراکی (Shared Caching) پشتیبانی می‌کند.

اس کیو لایت هر پایگاه داده را به صورت یک دیسک فایل (Disk File) براساس یک فرمت چند پلتفرمی (Cross-Platform Format) ذخیره می‌کند. این یعنی ما می‌توانیم یک پایگاه داده اس کیو لایت را روی یک دستگاه ایجاد کنیم و تنها با کپی کردن فایل مربوطه روی دستگاهی دیگر با معماری متفاوت اجرا کنیم.

نویسندگان اس کیو لایت معتقدند که آن گسترده‌ترین پایگاه داده‌ای است که روی SQL پیاده شده است. اتصال‌ها (Bindings) برای اس کیو لایت در اکثر زبان‌های برنامه‌نویسی رایج وجود دارد. این پایگاه داده نیز روی گوشی‌های iPhone و اندرویدی اجرایی است.

دیتابیس UnQlite

به باور بسیاری از افراد یو ان کیو لایت (UnQLite) همتای NoSQL اس کیو لایت (SQLite) است هرچند که این محصولات کاملا از هم مستقل هستند. یو ان کیو لایت یک پایگاه داده منبع-باز است که رابط ذخیره هر دو نوع key-value و سند (Document) را در اختیار ما قرار می‌دهد. همچنین پایگاه داده، تعاملات، خواننده‌های چندگانه همسو (Multiple Concurrent Readers) و مکان‌نما برای گذرگاه‌های خطی (Cursors for Linear Traversal) روی حافظه (In-Memory) و روی دیسک (On-Disk) را پشتیبانی می‌کند.

مهم نیست از کدام رابط برای ذخیره کردن استفاده می‌کنید. موتور ذخیره‌سازی یو ان کیو لایت از جفت‌های key-value بهره می‌برد. ویژگی بارز و متمایز یو ان کیو لایت این است که می‌توانیم run-time ای را که یک موتور ذخیره‌سازی از آن استفاده می‌کند تغییر دهیم. در حال حاضر، یو ان کیو لایتبا دو موتور ذخیره‌سازی درونی (In-Built) کار می‌کند: یکی پایگاه داده روی دیسک و دیگری برای پایگاه داده روی حافظه.

یو ان کیو لایت به زبان C نوشته شده و بنابراین می‌توانیم آن را برای سیستم عامل‌های iOS  و اندروید به کار گیریم.

 

منبع: مقاله‌ای از سایت developereconomics.com با عنوان «Five popular databases for mobile»


[۱] Embeddable به معنی داشتن قابلیت Embedd کنندگی است. Embedded Systems یا سیستم‌های نهفته، در واقع رایانه‌هایی هستند که برای کنترل یک سیستم بزرگ و مشخص طراحی شده‌اند و مخصوصاً در زمان‌هایی که محدودیت‌هایی در مورد پردازش همزمان وجود دارد به کار می‌روند. [ویکی‌پدیا سیستم‌های نهفته، Wikipedia Embedded System]

[۲]  خودشمول

[۳]  مدیریت

[۴]  تکه کد پانویس (What is Code Footprint?)

[۵]  Key-Value Pairs که می‌توان آن را به جفت‌های کلید-مقدار ترجمه کرد

[۶]  در انگلیسی چنین شرح داده می‌شود: More than the ratio 10/90: 10 data write for 90 read. (+)

  • 0

نظرات کاربران

دیدگاه شما

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  • قدیمی
  • جدید
  • رأی موافق
  • رأی مخالف