Ми часто стикаємося з ситуацією: додаток на Android гальмує при масовому вставленні даних — запис 1000 об'єктів через Room займає 15 секунд. Клієнт втрачає користувачів через лаги. ObjectBox вирішує цю проблему: нативна C++ реалізація без SQL-парсингу дає до 10x прискорення на операціях запису. У нашій практиці ми впровадили ObjectBox у IoT-трекер, де кожні 5 хвилин зберігалося 500 точок — час запису впав з 8 до 0.7 секунд. Економія часу розробки: до 2 тижнів на проекті за рахунок автоматичного codegen і відсутності DAO. Додатково об'єктна модель скорочує обсяг коду на 30-40%, що прямо знижує витрати на розробку та підтримку.
Ми налаштовуємо ObjectBox під ключ, включаючи моделі, реактивні запити та синхронізацію. Оцінимо ваш проект за один день — зв'яжіться з нами, щоб почати.
Чому ObjectBox швидший за SQLite?
ObjectBox — об'єктна база, не реляційна. Немає JOIN, немає GROUP BY — але для роботи з графом об'єктів (сутності зі зв'язками) це не потрібно. Бенчмарки ObjectBox показують 10x перевагу перед Room/SQLite на записі. У реальних проектах розрив залежить від патернів: масові вставки — виграш 3–10x, читання за ID — приблизно однаково. Для IoT-додатків, трекерів, ігрових збережень, каталогів з фільтрацією ObjectBox ідеальний. Економія на розробці — до 40% порівняно з традиційними рішеннями.
Як налаштувати ObjectBox за 3–5 днів?
Процес налаштування включає кілька кроків:
- Аналітика схеми даних: виявляємо сутності та зв'язки.
- Проектування Entity з відношеннями (ToOne, ToMany).
- Інтеграція BoxStore в Application клас.
- Реалізація реактивних запитів через DataObserver.
- Тестування продуктивності: заміри швидкості запису/читання.
- Деплой у сторі додатків.
Нижче — типовий стек і код.
Підключення та моделі
// build.gradle (app) plugins { id("io.objectbox") } dependencies { implementation("io.objectbox:objectbox-kotlin:3.8.0") } @Entity data class Task( @Id var id: Long = 0, var title: String = "", var description: String = "", var priority: Int = 0, var dueDate: Long = 0, var isCompleted: Boolean = false ) { val tags: ToMany<Tag> = toMany() } @Entity data class Tag( @Id var id: Long = 0, var name: String = "", @Index var color: String = "" ) @Id — обов'язковий Long для внутрішнього ObjectBox ID. Це не UUID і не ваш бізнес-ідентифікатор — використовуйте окреме строкове поле для синхронізації з сервером.
Ініціалізація та BoxStore
// Application клас class MyApp : Application() { companion object { lateinit var boxStore: BoxStore private set } override fun onCreate() { super.onCreate() boxStore = MyObjectBox.builder() .androidContext(this) .name("tasks-db") .build() } } // Використання в ViewModel class TaskViewModel : ViewModel() { private val taskBox: Box<Task> = MyApp.boxStore.boxFor(Task::class.java) val tasks: LiveData<List<Task>> = liveData(Dispatchers.IO) { val query = taskBox.query(Task_.isCompleted.equal(false)) .order(Task_.priority, QueryBuilder.DESCENDING) .build() emitSource(query.subscribe().toLiveData()) } } query.subscribe().toLiveData() — ObjectBox DataObserver автоматично сповіщає при зміні даних у box. Це реактивна підписка без зайвого коду.
Запити через QueryBuilder
ObjectBox не використовує строковий SQL. Запити через типобезпечний QueryBuilder з Properties — згенерованими метакласами (Task_, Tag_):
// Фільтрація з декількома умовами val urgentTasks = taskBox.query( Task_.isCompleted.equal(false) .and(Task_.priority.greater(2)) .and(Task_.dueDate.less(System.currentTimeMillis() + 86_400_000L)) ) .order(Task_.dueDate) .build() .find() // Повнотекстовий пошук — потребує @Index(type = IndexType.VALUE) + FTS val searchResults = taskBox.query( Task_.title.contains("meeting", StringOrder.CASE_INSENSITIVE) ) .build() .find() Немає JOIN — відношення через ToOne/ToMany. ObjectBox підвантажує пов'язані об'єкти lazy за замовчуванням:
// ToMany завантажується при першому зверненні val taskTags = task.tags // lazy load, звернення до DB ObjectBox Sync
Зазначимо: як і Realm, ObjectBox пропонує комерційний сервер синхронізації — ObjectBox Sync. Двостороння синхронізація, конфлікт-резолюція, дельта-оновлення. Це окремий продукт з ліцензійною моделлю. Ми інтегруємо Sync у ваш додаток під ключ.
Як працює ObjectBox Sync?
ObjectBox Sync використовує дельта-синхронізацію: передаються лише змінені об'єкти, а не вся база. Резолюція конфліктів налаштовується: можна обрати "останній пише", "локальний пріоритет" або кастомну логіку. Для початку достатньо встановити сервер Sync і вказати URL у клієнті.
Порівняння ObjectBox і Room
| Критерій | ObjectBox | Room/SQLite |
|---|---|---|
| Швидкість запису (1000 об'єктів) | ~0.5 сек | ~5-15 сек |
| Швидкість читання за ID | ~0.1 мс | ~0.2 мс |
| Реактивні запити | DataObserver | Flow/LiveData через DAO |
| Синхронізація | ObjectBox Sync (commercial) | Firebase, ручна |
| Типовий термін впровадження | 3–5 днів | 5–10 днів |
Типові проблеми та рішення
| Проблема | Рішення |
|---|---|
| ID не UUID | ObjectBox призначає Long ID автоматично — вони унікальні лише локально. Для серверної синхронізації додайте окреме строкове поле з @Index. |
| Codegen при кожній збірці | Плагін генерує MyObjectBox.java та класи _. Якщо схема змінилася, а gradle cache не скинувся — компілятор скаржиться на невідповідність. ./gradlew clean вирішує. |
| Відкритий BoxStore — один на додаток | Спроба відкрити другий BoxStore на той самий файл викликає виняток. Singleton через Application клас обов'язковий. |
Чому ObjectBox підходить для IoT-додатків?
IoT-пристрої генерують потік часових даних: координати, показники сенсорів, логи. ObjectBox обробляє масові вставки без затримок, а реактивні підписки дозволяють миттєво оновлювати UI. У трекері, який ми робили, запис 500 точок на хвилину не викликав лагів — на відміну від Room, де збирач сміття призводив до фризів. ObjectBox також доступний для Flutter і React Native, що спрощує кросплатформну розробку.
Що входить у роботу
- Проектування об'єктної моделі з відношеннями
- Налаштування BoxStore, codegen, оптимізація індексів
- Реалізація реактивних запитів (LiveData/Flow)
- Інтеграція ObjectBox Sync (при необхідності)
- Тестування продуктивності (бенчмарки до/після)
- Документація зі схеми та доступів
- Підтримка 30 днів після здачі
Замовте налаштування ObjectBox для вашого мобільного додатку — ми гарантуємо результат. Більше 5 років ми займаємося мобільною розробкою і реалізували 50+ проектів на ObjectBox та альтернативах. Отримайте безкоштовну оцінку — напишіть нам!







