Realm เป็นโซลูชันฐานข้อมูลมือถือที่ให้ทางเลือกแทนฐานข้อมูล SQL แบบดั้งเดิมเช่น SQLite ได้รับการออกแบบมาโดยเฉพาะสำหรับอุปกรณ์เคลื่อนที่ และกลายเป็นตัวเลือกยอดนิยมสำหรับการจัดเก็บและจัดการข้อมูลในแอปพลิเคชัน Android ในบทความนี้ เราจะสำรวจพื้นฐานของ Realm และวิธีการใช้ใน Android เพื่อจัดเก็บ ดึงข้อมูล และจัดการข้อมูล

อาณาจักรคืออะไร? Realm เป็นโซลูชันฐานข้อมูลแบบโอเพ่นซอร์สและเชิงวัตถุที่สร้างขึ้นโดยเฉพาะสำหรับอุปกรณ์มือถือ มอบวิธีที่ง่าย รวดเร็ว และมีประสิทธิภาพในการจัดเก็บข้อมูลบนอุปกรณ์เคลื่อนที่ ต่างจากฐานข้อมูล SQL แบบดั้งเดิม Realm ไม่ได้ใช้โมเดลเชิงสัมพันธ์ ซึ่งทำให้ใช้งานง่ายและมีประสิทธิภาพมากขึ้นในการจัดเก็บข้อมูลบนอุปกรณ์เคลื่อนที่

เริ่มต้นใช้งาน Realm ใน Android หากต้องการเริ่มต้นใช้งาน Realm ใน Android คุณจะต้องเพิ่มไลบรารี Realm ในโครงการของคุณ ซึ่งสามารถทำได้โดยการเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ build.gradle ของแอปของคุณ:

implementation 'io.realm:realm-android:<latest-version>'

ถัดไป คุณจะต้องสร้างอินสแตนซ์ฐานข้อมูล Realm คุณสามารถทำได้โดยสร้างคลาสที่ขยายคลาส RealmObject ดังนี้:

import io.realm.RealmObject
import io.realm.annotations.PrimaryKey

open class Person(
    @PrimaryKey var id: Int = 0,
    var name: String = "",
    var age: Int = 0
) : RealmObject()

เมื่อสร้างอินสแตนซ์ฐานข้อมูล Realm แล้ว คุณสามารถเริ่มจัดเก็บและเรียกข้อมูลได้แล้ว

เลือก

หากต้องการดึงข้อมูลจากฐานข้อมูล Realm คุณสามารถใช้เมธอด where เพื่อกรองผลลัพธ์ได้ เช่น:

val realm = Realm.getDefaultInstance()
val results = realm.where(Person::class.java).findAll()

แทรก

หากต้องการแทรกข้อมูลลงในฐานข้อมูล Realm คุณสามารถสร้างอินสแตนซ์ใหม่ของ RealmObject และใช้เมธอด copyToRealm เพื่อบันทึกได้ เช่น:

val realm = Realm.getDefaultInstance()
realm.beginTransaction()
val person = realm.createObject(Person::class.java, primaryKeyValue)
person.name = "John Doe"
person.age = 30
realm.commitTransaction()

อัปเดต

หากต้องการอัปเดตข้อมูลในฐานข้อมูล Realm คุณสามารถใช้เมธอด copyToRealmOrUpdate เพื่อบันทึกการเปลี่ยนแปลงได้ เช่น:

val realm = Realm.getDefaultInstance()
realm.beginTransaction()
val person = realm.where(Person::class.java).equalTo("id", primaryKeyValue).findFirst()
person?.name = "Jane Doe"
realm.commitTransaction()

ลบ

หากต้องการลบข้อมูลจากฐานข้อมูล Realm คุณสามารถใช้เมธอด delete ได้ เช่น:

val realm = Realm.getDefaultInstance()
realm.beginTransaction()
val person = realm.where(Person::class.java).equalTo("id", primaryKeyValue).findFirst()
person?.deleteFromRealm()
realm.commitTransaction()

ความสัมพันธ์

ความสัมพันธ์แบบหนึ่งต่อหนึ่ง: ในความสัมพันธ์แบบหนึ่งต่อหนึ่ง อินสแตนซ์ของ RealmObject หนึ่งเกี่ยวข้องกับอินสแตนซ์ของ RealmObject อื่นเพียงอินสแตนซ์เดียวเท่านั้น ตัวอย่างเช่น พิจารณาวัตถุ Person และ Address วัตถุ Person มี Address เพียงตัวเดียว ดังนั้นคุณจึงสามารถกำหนดความสัมพันธ์นี้ใน Realm ได้โดยการเพิ่มฟิลด์ Address ให้กับวัตถุ Person

import io.realm.RealmObject
import io.realm.annotations.PrimaryKey

open class Person(
    @PrimaryKey var id: Int = 0,
    var name: String = "",
    var age: Int = 0,
    var address: Address? = null
) : RealmObject()

open class Address(
    @PrimaryKey var id: Int = 0,
    var street: String = "",
    var city: String = "",
    var state: String = "",
    var zip: String = ""
) : RealmObject()

ความสัมพันธ์แบบหนึ่งต่อกลุ่ม: ในความสัมพันธ์แบบหนึ่งต่อกลุ่ม อินสแตนซ์ของ RealmObject หนึ่งเกี่ยวข้องกับหลายอินสแตนซ์ของ RealmObject อื่น ตัวอย่างเช่น พิจารณาวัตถุ Person และ Pet วัตถุ Person สามารถมีวัตถุ Pet ได้หลายวัตถุ ดังนั้นคุณจึงสามารถกำหนดความสัมพันธ์นี้ใน Realm ได้โดยการเพิ่มวัตถุ RealmList จาก Pet ให้กับวัตถุ Person

import io.realm.RealmList
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey

open class Person(
    @PrimaryKey var id: Int = 0,
    var name: String = "",
    var age: Int = 0,
    var pets: RealmList<Pet> = RealmList()
) : RealmObject()

open class Pet(
    @PrimaryKey var id: Int = 0,
    var name: String = "",
    var breed: String = ""
) : RealmObject()

ความสัมพันธ์แบบกลุ่มต่อกลุ่ม: ในความสัมพันธ์แบบกลุ่มต่อกลุ่ม อินสแตนซ์ของ RealmObject หนึ่งเกี่ยวข้องกับหลายอินสแตนซ์ของ RealmObject อื่น และในทางกลับกัน ตัวอย่างเช่น พิจารณาวัตถุ Person และ Event วัตถุ Person สามารถเข้าร่วมได้หลายวัตถุ Event และวัตถุ Event สามารถเข้าร่วมได้ด้วยวัตถุ Person หลายชิ้น หากต้องการใช้ความสัมพันธ์นี้ คุณจะต้องเพิ่มออบเจ็กต์ RealmList จาก Person ไปยังออบเจ็กต์ Event และออบเจ็กต์ RealmList จาก Event ไปยังออบเจ็กต์ Person

import io.realm.RealmList
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey

open class Person(
    @PrimaryKey var id: Int = 0,
    var name: String = "",
    var age: Int = 0,
    var events: RealmList<Event> = RealmList()
) : RealmObject()

open class Event(
    @PrimaryKey var id: Int = 0,
    var name: String = "",
    var date: String = "",
    var attendees: RealmList<Person> = RealmList()
) : RealmObject()

โดยสรุป Realm เป็นโซลูชันฐานข้อมูลมือถือที่ทรงพลังและมีประสิทธิภาพ ซึ่งทำให้ง่ายต่อการจัดเก็บ เรียกค้น และจัดการข้อมูลในแอปพลิเคชัน Android API ที่ใช้งานง่ายของ Realm ประสิทธิภาพที่แข็งแกร่ง และการสนับสนุนความสัมพันธ์ในตัวทำให้ Realm เป็นตัวเลือกยอดนิยมสำหรับการพัฒนาแอปที่ขับเคลื่อนด้วยข้อมูล ไม่ว่าคุณจะทำงานกับข้อมูลจำนวนเล็กน้อยหรือจัดการชุดข้อมูลขนาดใหญ่ Realm ก็มีเครื่องมือและคุณสมบัติที่คุณต้องการในการสร้างและบำรุงรักษาแอปพลิเคชันประสิทธิภาพสูงและปรับขนาดได้ หากคุณกำลังมองหาโซลูชันฐานข้อมูลที่รวดเร็วและเชื่อถือได้สำหรับโปรเจ็กต์ Android ของคุณ ลองพิจารณาลองใช้ Realmดู