ObjectBox: τι είναι, NoSQL βάση δεδομένων και εργασία με δεδομένα

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-03-13 Χρόνος ανάγνωσης: 9 λεπ

Το ObjectBox είναι μια υψηλής απόδοσης NoSQL βάση δεδομένων βελτιστοποιημένη για κινητές και ακραίες συσκευές. Σε αντίθεση με την SQLite, χρησιμοποιεί τη δική της μορφή αποθήκευσης που βασίζεται σε επίπεδα αρχεία χωρίς επίπεδο SQL. Σύμφωνα με το ObjectBox Benchmarks, 2024, το ObjectBox εκτελεί λειτουργίες εισαγωγής και ανάγνωσης 10–100 φορές ταχύτερα από την SQLite σε συσκευές Android, καθιστώντας το την καλύτερη επιλογή για εφαρμογές κινητών υψηλού φόρτου.

Κύρια σημεία

  • ObjectBox — NoSQL βάση δεδομένων με επίπεδα αρχεία, χωρίς SQL και επίπεδο ORM
  • Απόδοση — 10–100 φορές ταχύτερη από την SQLite σε λειτουργίες εγγραφής και ανάγνωσης
  • Cross-platform — Android, iOS, Linux, macOS, Windows και WebAssembly
  • Αντιδραστικότητα — ενσωματωμένα Observable και Flow για παρακολούθηση αλλαγών
  • Εύκολη ενσωμάτωση — δημιουργία κώδικα μέσω σχολιασμών, χωρίς ερωτήματα SQL

Τι είναι το ObjectBox;

ObjectBox είναι μια in-memory NoSQL βάση δεδομένων που αναπτύχθηκε από τη γερμανική εταιρεία ObjectBox.io. Σε αντίθεση με τις παραδοσιακές σχεσιακές βάσεις δεδομένων, το ObjectBox αποθηκεύει αντικείμενα απευθείας σε επίπεδα αρχεία χρησιμοποιώντας τη δική του μορφή SLOT (Super Lightweight Object Tree). Αυτό εξαλείφει την επιβάρυνση του ORM και του αναλυτή SQL. Η μορφή SLOT είναι βελτιστοποιημένη για λειτουργία σε συσκευές με περιορισμένη μνήμη: τα δεδομένα ανασυγκροτούνται αυτόματα και το μέγεθος της βάσης δεδομένων είναι κατά μέσο όρο 4–6 φορές μικρότερο από μια ισοδύναμη βάση SQLite με τον ίδιο αριθμό εγγραφών.

Το ObjectBox υποστηρίζει όλες τις κύριες κινητές πλατφόρμες: Android, iOS και Flutter. Για Android, η δημιουργία κώδικα είναι διαθέσιμη μέσω του ObjectBox Gradle Plugin, το οποίο επεξεργάζεται σχολιασμένες οντότητες και δημιουργεί κλάσεις Box για εργασία με δεδομένα. Για Flutter, χρησιμοποιείται ένα εγγενές πρόσθετο με περιτύλιγμα Dart. Εκτός από κινητές πλατφόρμες, το ObjectBox λειτουργεί σε Linux, macOS, Windows και WebAssembly, επιτρέποντας την επαναχρησιμοποίηση του μοντέλου δεδομένων μεταξύ της εφαρμογής κινητού και του συγχρονισμού διακομιστή.

Σύμφωνα με δεδομένα έρευνας του ObjectBox (2023), η βάση δεδομένων χρησιμοποιείται σε περισσότερες από 5000 εφαρμογές στο Google Play, συμπεριλαμβανομένων εφαρμογών με κοινό άνω των 10 εκατομμυρίων χρηστών. Κύρια σενάρια: προσωρινή αποθήκευση δεδομένων, εργασία σε λειτουργία εκτός σύνδεσης και αποθήκευση χρονοσειρών (IoT). Το ObjectBox είναι ιδιαίτερα δημοφιλές σε εφαρμογές παρακολούθησης υγείας και φυσικής κατάστασης, όπου απαιτείται γρήγορη καταγραφή μετρήσεων αισθητήρων στη συσκευή χωρίς μόνιμη σύνδεση στο διαδίκτυο και συλλογή αναλυτικών στοιχείων από πολλές συσκευές.

Ιστορία και τοποθέτηση

ObjectBox εμφανίστηκε ως εναλλακτική λύση για τα Realm και SQLite στην πλατφόρμα Android. Η πρώτη σταθερή έκδοση κυκλοφόρησε το 2018. Βασική διαφορά από το Realm — το ObjectBox δεν έχει περιορισμούς GPL (χρησιμοποιεί Apache 2.0) και υποστηρίζει περισσότερες πλατφόρμες: από κινητές συσκευές έως διακομιστές Linux.

Βασικές δυνατότητες

ObjectBox παρέχει: αυτόματη δημιουργία κλάσεων Box, ενσωματωμένα ευρετήρια για γρήγορη αναζήτηση, συναλλαγές με υποστήριξη αναίρεσης, αντιδραστικά ερωτήματα μέσω RxJava και Kotlin Flow, καθώς και συγχρονισμό μεταξύ συσκευών μέσω ObjectBox Sync (ιδιόκτητο πρωτόκολλο). Σε αντίθεση με το Firebase Realtime Database, το ObjectBox Sync λειτουργεί με μοντέλο peer-to-peer χωρίς κεντρικό διακομιστή, μειώνοντας την καθυστέρηση και το κόστος υποδομής.

Πώς λειτουργεί το ObjectBox;

ObjectBox αποθηκεύει δεδομένα στη δική του δυαδική μορφή .mdb (ObjectBox Data File). Κάθε οντότητα αντιστοιχίζεται σε ένα αρχείο, όπου οι εγγραφές αποθηκεύονται διαδοχικά με σταθερή μετατόπιση. Αυτό επιτρέπει την ανάγνωση και εγγραφή μεμονωμένων αντικειμένων χωρίς πλήρη σάρωση του αρχείου.

Για εργασία με το ObjectBox δεν απαιτείται SQL: τα ερωτήματα δημιουργούνται μέσω fluent-API στον κώδικα. Ο μεταγλωττιστής δημιουργεί βοηθητικές κλάσεις MyObjectBox και κουτιά (Box) που ενσωματώνουν όλες τις λειτουργίες CRUD. Το μοντέλο δεδομένων περιγράφεται μέσω σχολιασμών @Entity, @Id, @Index και @Relation.

kotlin
// Σύνδεση ObjectBox σε Android
class App: Application() {
    lateinit var boxStore: BoxStore

    override fun onCreate() {
        super.onCreate()
        boxStore = MyObjectBox.builder()
            .androidContext(this)
            .build()
    }
}

ObjectBox vs SQLite: σύγκριση απόδοσης

Σύμφωνα με επίσημα σημεία αναφοράς, το ObjectBox υπερτερεί σημαντικά της SQLite σε ταχύτητα λειτουργιών, ειδικά σε μαζική εισαγωγή και μαζική ανάγνωση. Ωστόσο, η SQLite παραμένει το de facto πρότυπο για εφαρμογές κινητών λόγω της διάδοσης και της ενσωματωμένης υποστήριξης SQL.

ΛειτουργίαObjectBoxSQLiteΔιαφορά
Εισαγωγή (1000 εγγραφές)~5 ms~180 msx36 ταχύτερα
Ανάγνωση (1000 εγγραφές)~3 ms~70 msx23 ταχύτερα
Ενημέρωση (1000 εγγραφές)~6 ms~150 msx25 ταχύτερα
Αναζήτηση βάσει ευρετηρίου~0.1 ms~2 msx20 ταχύτερα
Μέγεθος βάσης (1000 αντικείμενα)~28 KB~112 KB4 φορές μικρότερο

Πότε το ObjectBox δεν είναι βέλτιστο

ObjectBox υστερεί έναντι της SQLite σε σενάρια όπου απαιτούνται σύνθετα ερωτήματα JOIN, συναθροιστικές συναρτήσεις (SUM, COUNT με ομαδοποίηση) ή ενσωμάτωση με υπάρχον σχήμα SQL. Εάν το έργο χρησιμοποιεί ήδη SQLite με Room ORM, η μετεγκατάσταση σε ObjectBox θα απαιτήσει επανεγγραφή όλης της λογικής πρόσβασης δεδομένων. Το ObjectBox επίσης δεν υποστηρίζει προσαρμοσμένα ερωτήματα SQL — μόνο fluent-API. Ωστόσο, για τυπικές λειτουργίες CRUD και προσωρινή αποθήκευση, το ObjectBox παρέχει αύξηση απόδοσης έως και 100 φορές, κάτι που επιβεβαιώνεται από επίσημα σημεία αναφοράς σε συσκευές Android με διαφορετικές εκδόσεις OS.

Παραδείγματα κώδικα με ObjectBox

ObjectBox χρησιμοποιεί σχολιασμούς για τον ορισμό οντοτήτων. Μετά τη μεταγλώττιση, δημιουργούνται κλάσεις Box με μεθόδους put, get, remove και query. Παρακάτω παρουσιάζονται τυπικές λειτουργίες για το μοντέλο Task σε μια εφαρμογή λίστας εργασιών.

Ορισμός οντότητας

Κάθε οντότητα σχολιάζεται με @Entity. Το πεδίο με @Id γίνεται το πρωτεύον κλειδί, το @Index επιταχύνει την αναζήτηση βάσει πεδίου. Το ObjectBox υποστηρίζει αυτόματη δημιουργία ID σε τιμή 0.

kotlin
@Entity
data class Task(
    @Id var id: Long = 0,
    @Index var title: String = "",
    var isCompleted: Boolean = false,
    var priority: Int = 0
)

Λειτουργίες CRUD

Box είναι η κύρια κλάση για εργασία με οντότητες. Η μέθοδος put() αποθηκεύει ή ενημερώνει το αντικείμενο, η get() διαβάζει βάσει ID, η remove() διαγράφει. Όλες οι βασικές λειτουργίες είναι σύγχρονες και εκτελούνται στο νήμα που τις καλεί.

kotlin
val taskBox: Box<Task> = boxStore.boxFor(Task::class.java)

// Δημιουργία
val task = Task(title = "Αγορά προϊόντων", priority = 3)
val newId = taskBox.put(task)

// Ανάγνωση
val savedTask = taskBox.get(newId)

// Ενημέρωση
savedTask.isCompleted = true
taskBox.put(savedTask)

// Διαγραφή
taskBox.remove(newId)

Αντιδραστικά ερωτήματα

ObjectBox υποστηρίζει αντιδραστικά ερωτήματα μέσω .subscribe(). Ο συνδρομητής λαμβάνει ειδοποιήσεις σε κάθε αλλαγή δεδομένων που αντιστοιχεί στη συνθήκη του ερωτήματος. Αυτό είναι βολικό για το UI που ενημερώνει αυτόματα τη λίστα κατά την προσθήκη ή αφαίρεση στοιχείων.

kotlin
val query = taskBox.query()
    .equal(Task_.isCompleted, false)
    .orderDesc(Task_.priority)
    .build()

query.subscribe { tasks ->
    // tasks — List, ενημερώνεται αυτόματα
    updateUi(tasks)
}

Σχέσεις και ερωτήματα στο ObjectBox

ObjectBox υποστηρίζει σχέσεις μεταξύ οντοτήτων — To-One, To-Many και Many-to-Many. Οι σχέσεις ορίζονται μέσω του σχολιασμού @Relation. Σε αντίθεση με την SQLite, το ObjectBox δεν χρησιμοποιεί ξένα κλειδιά: οι σχέσεις υλοποιούνται μέσω λιστών ID σε επίπεδα αρχεία, επιταχύνοντας την πλοήγηση στο γράφημα αντικειμένων.

One-to-Many μέσω @Backlink

Η σχέση @Backlink επιτρέπει τη μετάβαση από την παιδική οντότητα στη γονική χωρίς ξεχωριστό πεδίο αναφοράς. Το ObjectBox διατηρεί αυτόματα την αντίστροφη αναφορά, εξαλείφοντας τον διπλασιασμό δεδομένων και τον συγχρονισμό μεταξύ δύο πινάκων.

Fluent ερωτήματα

ObjectBox Query Builder επιτρέπει τη δημιουργία αλυσίδων συνθηκών: equal, notEqual, greater, less, in, contains, startsWith. Όλες οι συνθήκες συνδυάζονται μέσω and/or. Το αποτέλεσμα μπορεί να ταξινομηθεί, να περιοριστεί και να ληφθεί ως List ή LazyList (για μεγάλα σύνολα δεδομένων).

Ρύθμιση ευρετηρίων για επιτάχυνση αναζήτησης

ObjectBox δημιουργεί αυτόματα ευρετήριο για το πεδίο @Id. Για προσαρμοσμένα ευρετήρια, χρησιμοποιήστε τον σχολιασμό @Index σε πεδία που αναζητούνται συχνά. Τα ευρετήρια επιταχύνουν τα ερωτήματα equal και in, αλλά επιβραδύνουν την εισαγωγή — μην δημιουργείτε ευρετήριο σε πεδία που δεν αναζητούνται. Το ObjectBox υποστηρίζει σύνθετα ευρετήρια για ταυτόχρονη φιλτράρισμα σε πολλά πεδία. Τα σύνθετα ευρετήρια είναι ιδιαίτερα χρήσιμα για φίλτρα σε λίστες: για παράδειγμα, η αναζήτηση ημιτελών εργασιών υψηλής προτεραιότητας εκτελείται δεκάδες φορές ταχύτερα με σύνθετο ευρετήριο στα πεδία isCompleted και priority.

ObjectBox Sync — συγχρονισμός μεταξύ συσκευών

ObjectBox Sync είναι μια ιδιόκτητη τεχνολογία για συγχρονισμό δεδομένων σε πραγματικό χρόνο μεταξύ συσκευών. Χρησιμοποιεί πρωτόκολλο βασισμένο σε WebSocket με επίλυση συγκρούσεων βάσει last-writer-wins. Το Sync είναι κατάλληλο για εφαρμογές που χρειάζονται συγχρονισμό εκτός σύνδεσης: σημειώσεις, λίστες εργασιών, δεδομένα IoT από πολλούς αισθητήρες. Ωστόσο, για παραγωγή απαιτείται αγορά άδειας χρήσης.

kotlin
// Ερώτημα με πολλαπλές συνθήκες
val highPriorityIncomplete = taskBox.query()
    .greater(Task_.priority, 5)
    .equal(Task_.isCompleted, false)
    .build()
    .find()

// Αναζήτηση υποσυμβολοσειράς
val searchResults = taskBox.query()
    .contains(Task_.title, "προϊόν", StringOrder.CASE_INSENSITIVE)
    .build()
    .find()

Συχνές Ερωτήσεις

Είναι το ObjectBox δωρεάν για εμπορική χρήση;

ObjectBox διανέμεται υπό την άδεια Apache 2.0, η οποία επιτρέπει εμπορική χρήση χωρίς περιορισμούς. Η λειτουργία ObjectBox Sync (διαπλατφορμικός συγχρονισμός) είναι ιδιόκτητη και απαιτεί αγορά άδειας για παραγωγή.

Υποστηρίζει το ObjectBox πολυνηματικότητα;

BoxStore είναι ασφαλές για νήματα: πολλά νήματα μπορούν να διαβάζουν δεδομένα ταυτόχρονα. Η εγγραφή μπλοκάρεται σε επίπεδο Box. Για σύνθετες συναλλαγές χρησιμοποιήστε το boxStore.runInTx(), το οποίο εγγυάται την ατομικότητα μιας ομάδας λειτουργιών.

Μπορεί το ObjectBox να χρησιμοποιηθεί με Kotlin Multiplatform;

Ναι, το ObjectBox υποστηρίζει Kotlin Multiplatform (KMP) από την έκδοση 3.0. Διαθέσιμοι στόχοι: Android, iOS, JVM και Native. Για KMP χρησιμοποιείται ξεχωριστό πρόσθετο Gradle objectbox-kotlin με υποστήριξη expect/actual.

Πώς δημιουργώ αντίγραφο ασφαλείας της βάσης δεδομένων ObjectBox;

ObjectBox αποθηκεύει δεδομένα σε αρχεία .mdb στον κατάλογο της εφαρμογής. Για αντίγραφο ασφαλείας, αντιγράψτε ολόκληρο τον κατάλογο ObjectBox μέσω BoxStore.copy() ή χειροκίνητα μετά την κλήση boxStore.close(). Τα ζωντανά αρχεία δεν μπορούν να αντιγραφούν — αυτό θα καταστρέψει τα δεδομένα.

Σε τι διαφέρει το ObjectBox από το Room;

Room είναι ORM πάνω από SQLite, απαιτεί ερωτήματα SQL και έχει επιβάρυνση για αντιστοίχιση αντικειμένων. Το ObjectBox είναι NoSQL χωρίς SQL, πολύ ταχύτερο, αλλά δεν υποστηρίζει σύνθετα JOIN και δεν είναι σχεσιακή βάση δεδομένων. Η επιλογή εξαρτάται από την εργασία: για σχεσιακά δεδομένα — Room, για γρήγορη αποθήκευση αντικειμένων — ObjectBox.

Σύνοψη

  • ObjectBox — NoSQL βάση δεδομένων με 10–100 φορές υψηλότερη απόδοση από την SQLite σε κινητές συσκευές
  • Επίπεδα αρχεία — ιδιόκτητη μορφή SLOT χωρίς επίπεδο SQL και κόστος ORM
  • Σχολιασμοί — @Entity, @Id, @Index, @Relation για περιγραφή μοντέλου δεδομένων
  • Αντιδραστικότητα — ενσωματωμένα Observable και Flow για αυτόματη ενημέρωση UI
  • Cross-platform — Android, iOS, Linux, macOS, Windows, WebAssembly
  • Προσωρινή αποθήκευση και εκτός σύνδεσης — το κύριο σενάριο του ObjectBox σε εφαρμογές κινητών
  • Σύσταση — επιλέξτε ObjectBox για εργασίες όπου η ταχύτητα επεξεργασίας δεδομένων είναι πιο σημαντική από τη σχεσιακή ακεραιότητα

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης