Налаштування ObjectBox: об'єктна БД для мобільних додатків

Мобільний застосунок гальмує під час запису даних, і користувачі йдуть до конкурентів? Ми налаштовуємо ObjectBox — об'єктну базу даних, яка прискорює операції в рази порівняно з SQL-рішеннями. Наша команда реалізує проєкт під ключ: від проєктування моделі до синхронізації та підтримки, забезпечуючи стабільну роботу навіть за високих навантажень.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Налаштування ObjectBox: об'єктна БД для мобільних додатків
Середній
від 1 дня до 3 днів
Часті запитання

Ми часто стикаємося з ситуацією: додаток на 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 днів?

Процес налаштування включає кілька кроків:

  1. Аналітика схеми даних: виявляємо сутності та зв'язки.
  2. Проектування Entity з відношеннями (ToOne, ToMany).
  3. Інтеграція BoxStore в Application клас.
  4. Реалізація реактивних запитів через DataObserver.
  5. Тестування продуктивності: заміри швидкості запису/читання.
  6. Деплой у сторі додатків.

Нижче — типовий стек і код.

Підключення та моделі

// 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 та альтернативах. Отримайте оцінку — напишіть нам!

Наші компетенції:

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1009
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    902
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1331
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1179
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1106
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    713