ورود و عضویت
0
سبد خرید شما خالی است
0
سبد خرید شما خالی است

دیتابیس Realm چیست؟ آموزش پیاده سازی در فلاتر + ویدیو

0 دیدگاه
10 دقیقه برای مطالعه
دیتابیس Realm

آموزش دیتابیس Objectbox
آموزش دیتابیس Hive
آموزش دیتابیس Sqlite

ذخیره سازی اطلاعات در هر نرم افزاری یکی از موارد بسیار ضروری میباشد که به عنوان یک برنامه نویس باید به ابعاد مختلف آن فکر کنید.

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

یکی از دیتابیس های محبوب در زمینه برنامه نویسی موبایل دیتابیس Realm می باشد که در زمینه برنامه نویسی نیتیو با زبان کاتلین نیز بسیار پرکاربرد میباشد. این دیتابیس از نوع NoSQL میباشد.

برای استفاده بهتر از این مطلب نیاز به آموزش فلاتر دارید.

پایگاه داده Realm چه نوع دیتابیسی است؟

دیتابیس Realm یک سیستم مدیریت دیتابیس object-oriented است که برای توسعه دهندگان اپلیکیشن های موبایل و دسکتاپ که توسط تیم MongoDB طراحی شده است. این دیتابیس بر روی دستگاه کاربر اجرا می شود و به همین دلیل به آن دیتابیس امبد شده (embedded database) نیز گفته می شود.

این سیستم مدیریت دیتابیس برای اندروید (Android)، iOS، و دیگر پلتفرم‌های موبایل قابل استفاده است. Realm به توسعه‌دهندگان اجازه می‌دهد داده‌های برنامه خود را به سرعت و با کارآیی بالا ذخیره و بازیابی کنند.

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

هسته مرکزی این پایگاه داده با زبان C++ برنامه نویسی شده است.

دیتابیس Realm از ویژگی های زیر برخوردار است:

  • سرعت بالا: Realm یک دیتابیس بسیار سریع است و می تواند به سرعت و به راحتی به داده ها دسترسی پیدا کند.
  • ساده بودن: Realm برای استفاده بسیار ساده است و نیاز به دانش زیادی در مورد پایگاه داده ها ندارد.
  • قابل اعتماد بودن: Realm با ACID سازگار است، که به این معنی است که داده ها همیشه در حالت یکپارچه و سازگار باقی می مانند.
  • امنیت: Realm از رمزگذاری AES-256 برای محافظت از داده ها استفاده می کند.

دیتابیس Realm برای انواع مختلفی از اپلیکیشن ها قابل استفاده است، از جمله:

  • اپلیکیشن های اجتماعی
  • اپلیکیشن های بازی
  • اپلیکیشن های سلامت و تناسب اندام
  • اپلیکیشن های مالی

دیتابیس شی گرایی چیست؟

گفتیم که Realm یک نوع دیتابیس شی گرا است و هیچ ارتباطی با ORM ها ندارد. در واقع این پایگاه داده از نوع شی گرایی است و قصد داریم تا بررسی کنیم این به چه معنی است؟

دیتابیس شی گرایی یک سیستم مدیریت پایگاه داده است که در آن اطلاعات در قالب اشیاء نمایش داده می شوند، که مشابه همان شیءهایی است که در برنامه نویسی شیءگرا استفاده می شوند. پایگاه داده های شیء با پایگاه داده رابطه ای (که مبتنی بر جدول هستند) متفاوت اند.

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

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

دیتابیس های شی گرا مزایای زیر را نسبت به پایگاه داده های رابطه ای دارند:

  • طبیعی تر: مدل شی گرا برای برنامه نویسان شی گرا آشناتر است.
  • انعطاف پذیرتر: مدل شی گرا به برنامه نویسان اجازه می دهد تا اطلاعات را به روشی که برای برنامه آنها مناسب است ذخیره کنند.
  • کارآمدتر: مدل شی گرا می تواند برای ذخیره و بازیابی اطلاعات کارآمدتر باشد.
  • ارث‌بری و پلی‌مورفیسم: این دیتابیس‌ها از مفاهیم ارث‌بری و پلی‌مورفیسم شی گرا بهره می‌برند، که این امکان را می‌دهد تا اشیاء از یکدیگر به ارث بروند و به تنوع در اشیاء دسترسی داشته باشیم.

در کل، دیتابیس‌های شی گرایی مناسب برای برنامه‌هایی هستند که دارای داده‌های پیچیده و با ساختار شی گرایی هستند، مانند اپلیکیشن‌های تحت وب، سیستم‌های اطلاعات جغرافیایی (GIS)، بازی‌های ویدئویی، و سایر برنامه‌هایی که نیاز به مدیریت داده‌های پیچیده و اشیاء دارند.

استفاده از Realm در فریمورک فلاتر

همانطور که گفتیم Realm دیتابیسی است که از ابتدا با هدف استفاده در اپلیکیشن های موبایل طراحی شده است و همین مورد باعث برتری آن نسبت به سایر گزینه ها میباشد.

شی گرایی بودن این پایگاه داده نیز باعث میشود تا نیازی به نوشتن کوئری های پیچیده نداشته باشید و به سادگی از آن استفاده کنید.

برای شروع ابتدا با دستور زیر پکیج مورد نیاز را به پروژه فلاتر اضافه میکنیم.

flutter pub add realm
    dart run realm install

طراحی کلاس مدل

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

در این مثال یک کلاس دانشجو در اختیار داریم که عملیات crud را روی انجام میدیم.

یک فایل به نام student ایجاد میکنیم.

import 'package:realm/realm.dart';

@RealmModel()
class _Student {
  @PrimaryKey()
  int? id;

  String? firstName;
  String? lastName;

}

در این کلاس با @RealmModel() مشخص کرده ایم که از این کلاس برای ذخیره سازی اطلاعات استفاده خواهیم کرد.

با کمک @PrimaryKey() نیز کلید اصلی پایگاه داده را مشخص میکنیم کدام فیلد باشد.

در ابتدای این فایل عبارت part ‘student.g.dart’; را نیز باید قرار دهید, این تکه در ادامه کدهای مورد نیاز کلاس را ایجاد میکند.

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

dart run realm generate

کلاس دیتابیس

برای اینکه کدهای بخش دیتابیس به شکل تمیز نوشته شوند یک کلاس جدا به نام StudentDatabase ایجاد میکنیم و تمام متدهای مورد نیاز برای انجام عملیات CRUD را در آن قرار میدهیم.

کدهای کلاس به شکل زیر میباشد.

import 'package:realm/realm.dart';

class StudentDatabase {
  // دسترسی به دیتابیس Realm
var config = Configuration.local([Car.schema]);

  final Realm realm = Realm(config );

  // افزودن یک دانشجو به دیتابیس
  void addStudent(Student student) {
    realm.write(() {
      realm.create<Student>(student, update: true);
    });
  }

  // خواندن همه دانشجویان از دیتابیس
  List<Student> getAllStudents() {
    final students = realm.objects<Student>().toList();
    return students;
  }

  // جستجوی دانشجو بر اساس شناسه
  Student? findStudentById(int id) {
    return realm.object<Student>(id);
  }

  // به‌روزرسانی یک دانشجو در دیتابیس
  void updateStudent(Student student) {
    realm.write(() {
      realm.create<Student>(student, update: true);
    });
  }

  // حذف یک دانشجو از دیتابیس
  void deleteStudent(int id) {
    realm.write(() {
      final student = realm.object<Student>(id);
      realm.delete(student);
    });
  }
}

در این کلاس یک نمونه از کلاس Realm میسازیم که برای پارامتر ورودی از آبجکت config که مشخص کننده کلاس مدل است استفاده میکنیم.

در ادامه چهار متد میسازیم که هر کدام عملیات CRUD را انجام میدهند.

برای ذخیره سازی اطلاعات از دستور realm.write استفاده میکنیم, اگر مقدار update را برابر true قرار دهید در صورت وجود رکورد آن را آپدیت میکند.

برای دریافت لیست کامل رکوردهای یک کلاس از دستور realm.objects().toList() میتوانید استفاده کنید.

اگر قصد جستجو در میان رکوردهای ثبت شده را براساس آیدی دارید از این دستور استفاده میتوانید کنید realm.object<Student>(id)

در متد deleteStudent هم که برای حذف اطلاعات در نظر گرفته ایم ابتدا رکورد مورد نظر را در پایگاه داده جستجو میکنیم و سپس آن را پاک میکنیم.

حالا کافیست هر زمان عملیات که میخواهیم روی دیتابیس انجام دهیم از این کلاس یک نمونه ایجاد کنیم.

به مثال زیر توجه کنید.

void main() {
  final studentDatabase = StudentDatabase();

  // افزودن یک دانشجو
  final student1 = Student(1, "علی", "رضایی");
  studentDatabase.addStudent(student1);

  // خواندن تمام دانشجوها
  final students = studentDatabase.getAllStudents();
  print("لیست دانشجویان:");
  students.forEach((student) {
    print("${student.firstName} ${student.lastName}");
  });

  // جستجو و به‌روزرسانی یک دانشجو
  final studentToUpdate = studentDatabase.findStudentById(1);
  if (studentToUpdate != null) {
    studentToUpdate.firstName = "محمد";
    studentDatabase.updateStudent(studentToUpdate);
    print("دانشجو به‌روزرسانی شد.");
  }

  // حذف یک دانشجو
  studentDatabase.deleteStudent(1);
  print("دانشجو حذف شد.");
}

این مثال یک دیتابیس Realm ایجاد کرده، داده‌های دانشجو را به آن اضافه کرده، آنها را خوانده، به‌روزرسانی کرده و سپس یکی از دانشجوها را حذف کرده است.

این نمونه به شما یک ایده از چگونگی استفاده از Realm در فریمورک فلاتر می‌دهد.

اگر قصد استفاده از دیتابیس NoSQL را دارید Realm یکی از بهترین گزینه هاست.

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

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

Hesam
28 اکتبر 2023
آموزش فارسی فلاتر
آموزش فارسی flutter