0
0

Realm ، Sqlite یا Room ؟

396 بازدید
Realm Realm ، Sqlite یا Room

Realm ، Sqlite یا Room ؟

Realm ، Sqlite یا Room ؟ کدام یک بهتر است و از کدام یک باید استفاده کنیم ؟

هنگام ایجاد یک برنامه Android ، هر توسعه دهنده با مشکلات زیادی روبرو است. علاوه بر آن که باید به یک طراحی چشم نواز و قابلیت استفاده فکر کنید ، اولین و مهمترین مسئله نحوه ذخیره اطلاعات خواهد بود .

برای هر توسعه دهنده Android بسیار مهم است که بانک اطلاعاتی یا دیتابیس مناسبی را انتخاب کند که متناسب با پروژه  باشد .

هنگامی که توسعه دهندگان شروع به جستجو برای پیدا کردن بهترین بانک اطلاعاتی می کنند ، می توانند مجموعه ای از راه حل ها را پیدا کنند ، به ویژه هنگامی که می خواهند تمام اطلاعات مورد نیاز را روی سرور ذخیره کنند.

اما هنگامی که نیاز به ذخیره داده ها در دستگاه کاربر وجود دارد ، تنها چند گزینه اصلی در دسترس خواهند بود. Realm ، SQLite و room 

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

در نتیجه در این مقاله می خواهیم به بررسی این سه نوع دیتابیس و بانک اطلاعاتی ، تفاوت ها ، نقاط قوت و ضعف آن ها و دلیل به وجود آمدن هر کدام بپردازیم .

Realm Realm ، Sqlite یا Room

SQLite

این بانک اطلاعاتی همچنان پرکاربردترین دیتابیس در بین بسیاری از دولوپر ها است که در سال 2000 توسط ریچارد هیپ ایجاد شد. SQLite در درجه اول به سمت ذخیره کلیه داده ها در دستگاه ها و دور شدن از معماری مشترک client-server  رفت . ذخیره تمام اطلاعات برنامه به طور مستقیم بر روی دستگاه تلفن همراه کاربر ، که  اکثر توسعه دهندگان اندرویدی نزدیک به 20 سال است که از آن برای پروژه هایی که نیاز به ذخیره داده ها در یک دستگاه و نه روی سرور دارند ، استفاده می کنند. و هزاران برنامه موبایل با استفاده از این دیتابیس ساخته شده است.

اگر بخواهیم صادقانه بگوییم ، SQLite برای برخی از پروژه های کوچک چندان بد نیست و اگر پروژه زیاد پیچیده نباشد می تواند تمام نیازهای برنامه شما را برآورده سازد. 

اما حتی قدرتمندترین ابزارها دارای اشکالاتی هستند. در صورتی که پروژه شما چندان پیچیده نباشد ، می توانید SQLite را انتخاب کنید. این پایگاه داده کاملاً متناسب با برنامه های کوچک است. در غیر این صورت ، ممکن است با چالش های زیادی روبرو شوید.  از جمله آنکه SQLite در یک پرونده واحد ذخیره می شود. 

دیتابیس sqlite به زبان C نوشته شده است و می تواند بیش از 30 زبان برنامه نویسی را پشتیبانی کند. هزاران برنامه کاربردی تلفن همراه وجود دارد که در معماری خود از SQLite استفاده می کنند. با وجود تمام ویژگی های عالی این دیتابیس ،  SQLite   دارای اشکالاتی است که منجر به انتشار راه حل  محبوب دیگری مثل  Realm یا room شد.

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

این پرونده را می توانید در هر کجا که دوست دارید در سلسله مراتب فهرست قرار دهید. در نگاه اول ممکن است این گزینه بسیار مناسب به نظر برسد ، با این وجود این خطر وجود دارد که سارقان اطلاعات بتوانند با فرآیندهایی یک بانک اطلاعاتی باز و بازنویسی کنند .

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

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

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

منطقی است که بانک اطلاعاتی برنامه شما با گذشت زمان رشد کند. اکثر برنامه نویسان جوان در این مرحله با مشکلات زیادی روبرو هستند زیرا تجربه کمی با ساختار query ها دارند. 

برای توسعه دهندگان با تجربه ،  که چند سال است که با SQL و SQLite کار کرده اند ، حل همه این مسائل بسیار آسان است. اما برای تازه واردهایی که به تازگی با کاربرد SQLite برای توسعه اندروید آشنا شده اند و کار با آن را شروع کرده اند ، این دیتابیس و ساختار عظیم آن پیچیده و پر دردسر به نظر می رسد . 

برای انتقال داده ها در SQLite ، شما باید جدولی مشابه جدول مورد نظر خود را ایجاد کنید. سپس باید تمام داده ها را از جدول قدیمی کپی کنید ، جدول قدیمی را رها کنید و پس از آن نام های جدید را تغییر دهید. مسئله اصلی اینجاست که شما نمی توانید یک جدول یا ستون را تغییر نام دهید ، همچنین نمی توانید آن را حذف کنید. 

ساختار گسترده و پیچیدگی SQLite توسعه دهندگان را وادار به جستجوی برای راه حل های ساده تری می کند . 

در مقایسه با بانک اطلاعاتی SQLite ، دیتابیس Realm ، یک سیستم بسیار ساده و شهودی است که می توانید با آن کار کنید. این دیتابیس یک سیستم عامل ORM کاملاً کارآمد است. این بدان معنی است که می توانید یک شیء را به راحتی ذخیره کنید ، بخوانید و نیازی به فکر کردن در مورد مجموعه های داخلی نخواهید داشت . 

Realm Realm ، Sqlite یا Room

Room  یا Realm:

در این مقاله ما تفاوت بین کتابخانه های جدید ” Room  ” و قدیمی ” Realm” را بررسی و برخی از جوانب مثبت و منفی هر دو کتابخانه را بازگو  خواهیم کرد ، اما انتخاب با شماست که در پروژه بعدی خود از کدام یک استفاده کنید . Realm ، Sqlite یا Room ؟

دیابیس room فقط لایه ای بالاتر از SQLite بومی است . به همین علت  به میزان زیادی قابلیت شخصی سازی در نمایش داده ها را دارد (شما query های خود را در SQL می نویسید و آنها در زمان کامپایل اجرا می شوند ). با این حال room مستلزم ایجاد روابط با استفاده از کلیدهای خارجی و like است ، بنابراین نمودارهای پیچیده اشیاء می توانند کمی دردسر ساز شوند . از طرف دیگر Realm  به هیچ دانش SQL نیاز ندارد. شما لازم نیست که هیچ عبارت SQL برای کار با آن بنویسید .

Realm یک کتابخانه بسیار بزرگتر از room  است زیرا شامل یک پایگاه داده جداگانه است. Realm در برخی موارد می تواند حتی تا حدود 3 تا 4 مگابایت به حجم  برنامه شما اضافه کند. از آنجا که room  فقط یک لایه در بالای SQLite است ، فقط چند ده کیلوبایت به APK اضافه می کند. اگر نگران محدودیت روش dex هستید ، room نیز حاوی روشهای بسیار کمتری است.

room به طور رسمی توسط Google پشتیبانی می شود . از طرف دیگر ، Realm مدتی است که فعالیت خود را آغاز کرده است (حدود 4 سال پیش رسماً برای اندروید منتشر شد) و بارها باگ های آن در این مدت برطرف شده است و اصلاحات بسیاری از مشکلات را پشت سر گذاشته است. علاوه بر این ، Realm از iOS  نیز پشتیبانی می کند ، بنابراین برای توسعه هر دو سیستم عامل با لایه های تقریباً یکسان داده می تواند برای معماری برنامه های مشابه امکان پذیر باشد.

Realm یک سیستم مدیریت است که می تواند به راحتی جایگزین SQLite شود. Realm بسیار دیرتر از SQLite ظاهر شد. توسعه آن در سال 2010 آغاز شد و نام اول آن TightDB بود. در سال 2014 سازندگان آن ، نامش را به Realm تغییر دادند و نسخه بتا آن را منتشر کردند.

Realm به طور گسترده ای برای توسعه تلفن همراه مورد استفاده قرار می گیرد . این دیتابیس با Java ، Swift و Objective-C ، Xamarin ، React Native کار می کند.

بیایید نگاهی دقیق تر به این دو دیتابیس بیاندازیم .

 
Realm Realm ، Sqlite یا Room

Realm در بین بسیاری از توسعه دهندگان محبوبیت دارد . دلیل استفاده زیاد از Realm و برخی ویژگی آن بدین صورت است  : 

  1. از اشیاء استاندارد جاوا استفاده می کند.
  2. با استفاده از  C ++ نوشته شده است.
  3. برای ایجاد بانک های اطلاعاتی ساده است. 
  4. این کتابخانه به خوبی مستند شده است و شما می توانید بدون هیچ دانش قبلی از بانک اطلاعات Realm به راحتی در پروژه خود استفاده کنید.
  5. به عبارتی Realm یک سیستم مدیریت پایگاه داده غیر ارتباطی است که به شما این امکان را می دهد که روابط بین اشیاء را مانند آنچه در هر نمودار شیء به زبان دلخواه خود انجام می دهید ، اعلام کنید.
  6. Realm با API Query Builder به خوبی کار می کند.
  7. Realm به شما این امکان را می دهد تا اشیاء را کپی کنید تا در خارج از نمونه Realm در دسترس باشند.
  8. یکی از تفاوت های مهم این دیتابیس با دو دوست دیگرش این است که Realm قبل از room  متولد شده است ، بنابراین بالغ تر است.
  9. در مورد Realm ، تمام روابط با استفاده از درخت B + برقرار می شوند. شما فقط نیاز به ایجاد کلاس POJO خود و ایجاد رابطه ، و تعریف schema دارید.
  10. Realm  قابل رمزگذاری است.
  11. Realm از پیوند بین اشیاء پشتیبانی می کند.
  12. هر نتیجه در مورد Realm  با استفاده از  lazy-loaded است.
  13. Realm با ContentProvider کار نمی کند.
  14. هیچ نوع پشتیبانی برای نوع adapters وجود ندارد ، شما باید از getter/setter استفاده کنید.
  15. Realm برای iOS نیز در دسترس است ، بنابراین اگر قصد ایجاد یک برنامه cross-platform را دارید ، Realm شما را ناامید نخواهد کرد.
  16. اندازه این کتابخانه 3-4 مگابایت است.
  17. Realm توسط شرکتهای بزرگی مانند IBM ، CISCO ، Amazon ، Google و Intel استفاده می شود.
  18. خط کدهای Realm بسیار کمتر از sqlite است.
  19. وقتی در مورد سرعت صحبت می کنیم ، Realm از SQLite بهتر است. و این حقیقت با تحقیقات منتشر شده در وب سایت رسمی Realm اثبات شده است . Realm  ده  برابر سریعتر از SQLite خام است. به عنوان مثال ، Realm اجازه می دهد تا 20 هزار رکورد  در یک ثانیه در دیتابیس درج شود در صورتی که SQLite اجازه می دهد تا فقط 9 هزار رکورد در ثانیه در دیتابیس درج کنید.
  20. Realm به توسعه دهندگان اجازه می دهد تا اشیاء را کپی کرده و همچنان به آنها در خارج از پایگاه داده نیز دسترسی داشته باشند. اما این پایگاه داده محدودیت های خاصی نیز دارد. چندین پرونده به طور موازی در آن قابل دسترسی نیستند.
  21. اکنون Realm از ویژگی های متنوعی برخوردار است که می تواند روند توسعه را تسهیل کند. به عنوان مثال ، این دیتابیس از فرمت فایل JSON نیز پشتیبانی می کند. اعلان های تغییر داده به شما امکان را می دهد که هر تغییری در پایگاه داده خود را ردیابی کنید ، در حالی که رمزگذاری اطلاعات ، دیتاهای کاربر را نیز ایمن نگه می دارد.
  22. Realm اطلاعات را کپی نمی کند. در عوض ، این بانک اطلاعاتی روی اشیاء زنده کار می کند. SQLite هنگام ارسال یک query ، داده ها را از دیتابیس کپی می کند. بنابراین برای ذخیره همه تغییرات ، یک بار دیگر باید مجددا query ذخیره اطلاعات و درج مجدد آن ها در دیتابیس را نیز بنویسیم.
 
Realm Realm ، Sqlite یا Room

Room

دیتابیس Room کتابخانه ای است که به طور خاص توسط Google طراحی شده تا همه نقاط ضعف SQLite را رفع کند. Room یک لایه انتزاعی بالاتر از SQLite را فراهم می کند و این باعث می شود کل سیستم بسیار ساده تر و کارآمد تر باشد تا بتواند با یک توسعه دهنده کار کند. توسعه دهندگان Google نه تنها موفق به جبران مشکلات SQLite در این کتابخانه شدند بلکه در برخی موارد حتی از Realm نیز پیشی گرفتند.

Room جدیدترین کتابخانه دیتابیس های داخلی است که در سال 2017 توسط Google IO با مؤلفه های معماری Android معرفی شده است. Room یک لایه انتزاع نسبت به SQLite فراهم می کند که به ما این امکان را می دهد که از قدرت کامل SQLite استفاده کنیم و برای حل چندین مشکل SQLite به ما اجازه می دهد در بعضی موارد از Realm نیز سبقت بگیریم .

سه بخش اصلی در Room وجود دارد :

  1. Database
  2. Entity
  3. DAO

اگر بخواهیم ویژگی های این دیتابیس را بررسی کنیم باید به موارد ذیل اشاره کنیم :

  1. Room به فضای ذخیره سازی 50 KB نیاز دارد در حالی که اندازه Realm می تواند به 4 مگابایت برسد.
  2. مشکلات مربوط به امنیت SQLite  تا حدودی توسط Room حل شد. Room توسعه دهندگان را قادر می سازد پسوند SQLite را پشتیبانی کنند که از رمزگذاری پشتیبانی می کند.
  3. Realm تقریباً از 2000 روش یا method  استفاده می کند ، در حالی که Room فقط 300  متد دارد.
  4. در مورد Room مسئله multi-threading وجود ندارد.
  5. این کتابخانه از lazy loading پشتیبانی می کند . از نظرکاربر lazy loading چندان جالب نیست زیرا احتمال دارد در UI و بارگذاری اطلاعات روی دیسک باعث ایجاد مشکلاتی دربرنامه شود . اما این موضوع  حدود 16 ms زمان می برد.
  6. از آنجا که Room روی SQL کار می کند ، می توانید query  خود را به راحتی بنویسید.
  7. Room نیز می تواند رمزگذاری شود.
  8. می توانید در چند مرحله از LiveData در Room استفاده کنید . Room استفاده از کلاس LiveData را بدون تأخیر و وقفه امکان پذیر می کند. دیگر مشکل و تاخیر وجود ندارد!!
  9. انتقال داده : این احتمالاً یکی از لذت بخش ترین چیزهایی است که ما از دیدن آن در دیتابیس Room خوشحال می شویم. با استفاده از این ابزار ، انتقال داده ها دیگر مشکلی ندارد.
  10. Room  نسخه ای است که دارای 7 سال تجربه آزمایش شده است.
Realm Realm ، Sqlite یا Room
Realm Realm ، Sqlite یا Room

مقایسه ای بین امکانات خواندن و نوشتن اطلاعات در دیتابیس ها :

نتایج آزمون عملکرد سیستم مدیریت پایگاه داده برای عملیات CRUD در بین دیتابیس های Realm ، Sqlite یا Room نشان می دهد که عملیات های ساده در برخورد با بانک های اطلاعاتی غیر مرتبط به مراتب بهتر است.

وقتی قصد خواندن اطلاعات ( select ) را داریم ، بانک اطلاعاتی Realm به طور غیرقابل مقایسه ای سریعتر از سایر سیستم ها است . زمان خواندن در واقع لحظه ای است.

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

هنگام به روزرسانی اطلاعات پایگاه داده (update ) ، پایگاه داده های غیر مرتبط هنوز سریعتر هستند.  Realm و Room به نتایج مشابهی رسیدند.

برای حذف داده ها (delet) از دیتابیس ،  Room  و Realm به نتایج بسیار مشابهی رسیده اند.  اما باید توجه داشت که عملیات پاکسازی پایگاه داده به ندرت استفاده می شود.

در مقایسه سیستم های ارائه شده ، باید به حافظه مورد استفاده پایگاه داده ها نیز توجه شود. در این حالت  بدترین Realm است که اندازه بانک اطلاعاتی آن 36 مگابایت است.  پرونده های بانک اطلاعاتی Room  دو  برابر بیشتر از GreenDao طول می کشد ، اگرچه هر دو مبتنی بر SQLite هستند. 

در صورت بروز مشکل در اجرای بانک اطلاعاتی ، در کلیه سیستم ها وضعیت بسیار مشابه است ، زیرا همه با استفاده از حاشیه نویسی ها ایجاد می شوند.

به طور خلاصه ، پایگاه داده های غیر رابطه ای برای یک کار ساده مانند ایجاد ، خواندن ، به روزرسانی و حذف بهتر هستند. با این حال ، این بدان معنا نیست که برای عملیات پیچیده تر نتایج یکسان خواهد بود.

 
Realm Realm ، Sqlite یا Room
Realm Realm ، Sqlite یا Room

نتیجه گیری :

بسته به پیچیدگی مدل داده برنامه شما ، نگرانی های مربوط به اندازه APK  و تجربه شخصی شما هر دو Realm ، Sqlite یا Room گزینه های مناسبی می توانند باشند .

اگر پروژه شما کار با پایگاه داده سنگین دارد می توانید از Realm  استفاده کنید و برای پروژه های  کوچک می توانید از Room استفاده  کنید .

هر گزینه ذکر شده در بالا هر دو جنبه قوی و ضعیف را دارد. SQLite می تواند توسعه دهنده تازه کار را با پیچیدگی خود بترساند ، به همین دلیل مبتدیان بیشتری از Realm برای اولین پروژه های Android خود استفاده می کنند.

Realm می تواند بدون هیچ گونه تنظیمات اضافی کار کند ، در حالی که SQLite ممکن است مدت زمان طولانی تری برای انتخاب پیکربندی مناسب برای پروژه های خاص نیاز داشته باشد.

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

درست مانند سایر ابزارها ، هر توسعه دهنده ای پس از بررسی نقاط قوت و ضعف را انتخاب می کند که از کدام بانک اطلاعاتی برای برنامه های Android خود استفاده کند. سادگی Realm ممکن است این تصور را ایجاد کند که بهترین پایگاه داده برای توسعه برنامه های Android است. Realm در شروع آسان و مدرن است و همه چیز را برای یک پروژه کوچک و متوسط ​​در بردارد و به صورت مستقیم و بدون تنظیمات اضافی کار می کند.

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

در طی زمان می توانید با آنها آشنا شوید تا بدانید که چگونه آنها را دوست داشته باشید.

به عنوان سخن آخر می توانید از هر کام از دیتابیس های موجود استفاده کنید و  با توجه به مشخصات هر پروژه و معماری آینده آن ، بهترین بانک اطلاعاتی را برای برنامه های Android خود انتخاب کنید.

آیا این مطلب را می پسندید؟
اشتراک گذاری:
زهرا فریدونی
علاقه‌مند و فعال در زمینه برنامه نویسی سمت وب و همچنین مدرس وب و برنامه نویسی اندروید هستم. از زمان دانشجویی برنامه نویسی کار میکردم . اما از سال ۹۴ به صورت تخصصی تر به برنامه نویسی روی آوردم و از سال ۹۶ شروع به تدریس برنامه نویسی وب و اندروید کردم. https://novindevelopers.com/about/

نظرات

0 نظر در مورد Realm ، Sqlite یا Room ؟

دیدگاهتان را بنویسید

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

  1. توی این متن تناقض وجود دارد یک جا می گید که «اگر پروژه شما کار با پایگاه داده سنگین دارد می توانید از Realm استفاده کنید و برای پروژه های کوچک می توانید از Room استفاده کنید .»
    و پایین ترش بر عکس گفته می شه که برای پروژه های بزرگ از Room بهتر است استفاده شود.
    ممنون می شم بررسی بشه

    ۱۲

    1. سلام . دوست عزیزم این دو گزینه هیچ منافاتی ندارند اگر توجه کنید در مورد اول نوشته شده اگر دیتابیس شما بزرگ و سنگین است بهتر است از Realm استفاده کنید .
      اما در مورد دوم گفتیم اگر کلا پروزه شما بزرگ هست و کد نویسی های زیادی داره علاوه بر بخش دیتابیسش که فقط یک بخشش هست ROOM به علت کمتر بودن تعداد خط کدهاش هم میتونه گزینه خوبی باشه و استفاده از SQLite همراه با Room میتونه گزینه خوبی باشه . در هر صورت هم ROOM و هم Realm برای راحتی ما به وجود آمدند و اگر همه انتظارات رو realm برطرف میکرد اصلا room به وجود نمی آمد . اینکه شما کدام رو انتخاب میکنید به نظرم بیشتر میتواند به ارتباطی که با آنها برقرار میکنید برگرده .

      ۱۲