دیتابیس Realm

219
realm | اُکسیما

معرفی پایگاه داده Realm


ما قصد داریم یک برنامه بسیار ساده با استفاده از پایگاه داده Realm ایجاد کنیم. این برنامه یک برنامه اندرویدی است. و در قالب این برنامه به این پایگاه داده بپردازیم .

امروزه، هنگام انتخاب یک پایگاه داده، گزینه های زیادی وجود دارد. ما گزینه های جذاب مختلفی داریم که هر کدام دارای نقاط قوت و ضعف خود هستند. یکی از آنها که برجسته شده است، پایگاه داده Realm است. پایگاه داده Realm می تواند توسط اندروید، iOS، React، و حتی توسعه دهندگان Xamarin استفاده شود.


چرا Realm ؟


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

با استفاده از Realm معماری نرم افزار خود را ساده می کنید در حالی که ویژگی های بسیار قدرتمندی را به شما می دهد. پلت فرم Realm در واقع شامل دو جزء اصلی است. پایگاه داده Realm و Realm Object Server. با توجه به اسناد رسمی، این دو جزء به صورت خودکار همگام سازی داده ها را قادر می سازد . در این مقاله قصد نداریم در مورد سرور Realm Object را صحبت کنیم.

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

برای مدت زمان بسیار طولانی، SQLite انتخاب اصلی ما برای پایداری در تلفن همراه بوده است و حتی اگر آن را به طور مستقیم استفاده نکنید، از بسیاری از کتابخانه ها استفاده می شود که حاوی بسته بندی راحت در اطراف آن مانند Couchbase Lite، Core Data، ORMLite و غیره .

Realm همچنین دارای سرعت بالایی است. با توجه به مستندات، Realm سریعتر از حتی SQLite خام در عملیات مشترک است،

Realm همچنین برای استفاده ساده است. در اینجا چند نمونه کد از نحوۀ کار با Realm بیان شده است:


Java :


        
public class Dog extends RealmObject {
  public String name;
  public int age;
}

Dog dog = new Dog();
dog.name = "Rex";
dog.age = 1;
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.copyToRealm(dog)
realm.commitTransaction();
RealmResults< Dog> pups = realm.where(Dog.class)
                               .lessThan("age", 2)
                               .findAll();
        
    

Swift :


        
class Dog: Object {
  @objc dynamic var name = ""
  @objc dynamic var age = 0
}

let dog = Dog()
dog.name = "Rex"
dog.age = 1
let realm = try! Realm()
try! realm.write {
  realm.add(dog)
}

let pups = realm.objects(Dog.self).filter("age < 2")

        
    

Javascript :


        
class Dog {}
Dog.schema = {
  name: 'Dog',
  properties: {
    name: 'string',
    age: 'int',
  }
};

let realm = new Realm();
realm.write(() => {
  realm.create('Dog', {name: 'Rex', age: 1});
});

let pups = realm.objects('Dog').filtered('age < 2');

        
    

C# :


        

public class Dog : RealmObject
{
  public string Name { get; set; }
  public int Age { get; set; }
}

var realm = Realm.GetInstance();
realm.Write(() =>
{
  realm.Add(new Dog
  {
    Name = "Rex",
    Age = 1
  });
});

var pups = realm.All< Dog>().Where(d => d.Age < 2);

        
    


یک پروژه ساده


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

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

ما یک EditText برای نام و سن کاربر برای قرار دادن در پایگاه داده داریم. سپس زیر آنها یک دکمه اضافه است که نام کاربری و سن را در پایگاه داده وارد می کند. همچنین دکمه فیلتر وجود دارد که پایگاه داده را برای کاربران خاص نمایش می دهد.


realm_application-oxima

گام اول :


classpath dependency به فایل build.gradle سطح پروژه اضافه کنید.

        

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
        classpath "io.realm:realm-gradle-plugin:5.1.0" //todo (1) add realm dependency
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
        
    

گام دوم :


Plugin realm-android را به بالای فایل build.gridle سطح application اعمال کنید.

        

apply plugin: 'com.android.application'
apply plugin: 'realm-android' //todo (2) add realm plugin
android {
    compileSdkVersion 27
    defaultConfig {
...
        
    

گام سوم :


کلاس مدل خود را با ارث بری از RealmObject تعریف کنید. این شبیه به کلاس های POJO روزمره شما است.

        

import io.realm.RealmObject;
//todo (3) Define your model class by extending RealmObject
public class User extends RealmObject{
    private String name;
    private int age;
    public User() {
    }
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
        
    

گام چهارم :


برای شروع، شما نیاز به مقداردهی Realm دارید، این کار فقط یک بار در هر برنامه مورد نیاز است، بنابراین محل خوبی برای انجام این کار در متد onCreate است.

        

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        //todo (4) Initialize Realm (just once per application)
        Realm.init(this);
        //todo (5) Get a Realm instance for this thread
        Realm realm = Realm.getDefaultInstance();
...
        
    

گام پنجم :


حال همه چیز آماده و مهیا است. گام بعدی اضافه کردن یک کاربر جدید با نام و سن است. کلیک کردن بر روی دکمه «ADD» این کاربر باید به دیتابیس اضافه شود همانطور که در نمودار بالا نشان داده شده است. شناسه برای نام های ویرایش متن، سن ، به ترتیب names_txt و age_txt هستند، و شناسه برای دکمه add_btn است .

        

   add_btn.setOnClickListener(v -> {
            // write operations in Realm must be wrapped in transactions.
            realm.beginTransaction();
            User user = realm.createObject(User.class); //todo  Create a new object
            user.setName(name_txt.getText().toString()); //todo get user name from Edittext and store in user object
            user.setAge(Integer.valueOf(age_txt.getText().toString())); //todo get user age from Edittext and store in user object
            realm.commitTransaction();
            // commit transaction
            Toast.makeText(this, "User added", Toast.LENGTH_LONG).show();
            clearText();
        });

        
    

هنگام انجام عملیات نوشتن روی Realm، باید در یک transaction صورت بگیرد . اساسا، در پایان یک عملیات نوشتن، می توانید آن را commite کنید و یا یا آن را cancel کنید. با commite کردن تمام تغییرات را ذخیره می شوند. اگر یک عملیات نوشتن را cancel کنید، تمام تغییرات از بین می روند.

اگر دقت کرده باشیدد، اولین مثال در این مقاله از copyToRealm () برای اضافه کردن یک شی جدید استفاده شده است و هر دو روش داده ها را در پایگاه داده ذخیره می کند.


گام ششم :


بنابراین تا اینجا ما توانستیم داده های دوست داشتنیمان را وارد کنیم، سوال بعدی این است که چگونه می توانیم آن را بیابیم؟ خب، اگر فکر میکنید که فرآیند ذخیره داده ها جالب بود، منتظر بمانید و ببینید که چگونه آن را بازیابی می کنیم. فرض کنید شما می خواهید همه کاربران که سن آنها کمتر از 45 است را دریافت کنید. این چگونه نظر می رسد:

        
        RealmResults< User> result = realm.where(User.class)
                            .lessThan("age", 45)//find all users with age less than 45
                            .findAll();//return all result that reach criteria

        
    

این عالی نیست؟ پس از انجام این کار، می توانید روی لیست نتایج بدست آمده حلقه بزنید و موارد مورد تیاز خود را برای مثال بدست آورید:

        
    StringBuilder stringBuilder = new StringBuilder();
                    for (int i = 0; i < result.size(); i++) {
                        stringBuilder.append(result.get(i).getName() + "  ");
                    }

        
    

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

پیوست ها :
  • این مقاله دارای پیوست نمی باشد.
loder | اُکسیما
»» نویسنده مقاله
حسین رئیسی | اُکسیما

حسین رئیسی
»» پشتیبانی مقاله

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


به اشتراک بگذارید ...

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

مقاله های پیشنهادی

حتی اکنون که Kotlin یک زبان رسمی و پشتیبانی شده برای نوشتن برنامه های اندروید است، شما هنوز هم می توانید احساس کنید که دلایل کافی برای تغییر وجود ندارد. جاوا ثابت کرده است که در طول تمام این سالها به خوبی کار می کند، پس چرا باید از کاتلین استفاده کنیم ؟ در این مقاله دلایلی را مطرح می کنیم است ،علی رغم نظر بسیاری از افراد ، استفاده از کاتلین یکی از بهترین چیزهایی است که می توانید انجام دهید.

حسین رئیسی

309

شما ممکن است شنیده باشید که پایتون محبوبیت زیادی را به دست آورده است، اما آیا می دانستید که در حال حاضر محبوب ترین زبان آموزشی و مقدماتی در دانشگاه های آمریکا است ؟ همینطور این زبان ، با توجه به بررسی IEEE ، چهارمین زبان محبوب دنیا بعد از زبان های کلاسیک و قدیمی جاوا، C و C ++ است ؟

حسین رئیسی

358

Flutter و ReactNative ؛ کدام یک دوست داشتنی تر است؟ با توجه به تقاضاهای زیادی که برای برنامه های تلفن همراه وجود دارد، تعداد زیادی از کسب و کارها و استارتاپ ها، به دنبال توسعه برنامه های موبایل می باشند .

حسین رئیسی

494