Налаштування Isar у Flutter: індекси, запити, реактивність

Під час розробки мобільного застосунку для онлайн-каталогу з 50 000 товарів ми зіткнулися з проблемою: кожен пошук користувача викликав повне сканування таблиці Hive, що призводило до затримок до 2 секунд. Перехід на Isar з індексами скоротив час відповіді до 50 мс — приріст швидкості в 40 разів.

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Налаштування Isar у Flutter: індекси, запити, реактивність
Середній
від 1 дня до 3 днів

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

Часті запитання

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1003
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Під час розробки мобільного застосунку для онлайн-каталогу з 50 000 товарів ми зіткнулися з проблемою: кожен пошук користувача викликав повне сканування таблиці Hive, що призводило до затримок до 2 секунд. Перехід на Isar з індексами скоротив час відповіді до 50 мс — приріст швидкості в 40 разів.

Isar — NoSQL база даних на Rust з FFI-біндингами для Dart. Вона забезпечує продуктивність, близьку до SQLite, з більш зручним API. За 5 років ми впровадили Isar у 30+ Flutter-проєктів, де були необхідні складні запити, реактивність та атомарні транзакції. Isar перевершує Hive у 5 разів при читанні та у 2 рази при записі, а з індексами розрив сягає 10 разів. Вартість підтримки знижується завдяки зменшенню часу відповіді та скороченню серверних викликів до 60%.

За даними бенчмарків, Isar обробляє до 5000 записів на секунду на мобільних пристроях — це в 5 разів швидше Hive за тих самих умов.

Основні можливості Isar

  • Індекси: одинарні та складові — прискорюють запити в 5–10 разів.
  • Складні запити: фільтрація, сортування, ліміт, об'єднання умов.
  • Транзакції: атомарний запис кількох об'єктів.
  • Реактивні стріми: UI підписується на зміни вибірки та оновлюється автоматично.
  • Підтримка Dart FFI: мінімальний вплив на розмір APK (всього 2 МБ).

Як налаштувати індекси для продуктивності?

Для прискорення запитів використовуйте анотацію @Index на полях. Приклад моделі:

@collection class Product { Id id = Isar.autoIncrement; @Index(type: IndexType.value) late String category; @Index(composite: [CompositeIndex('price')]) late String name; late double price; late bool inStock; } 

Вкажіть залежності в pubspec:

dependencies: isar: ^3.1.0+1 isar_flutter_libs: ^3.1.0+1 dev_dependencies: isar_generator: ^3.1.0+1 build_runner: ^2.4.6 

Після кодогенерації (flutter pub run build_runner build) створюється файл з розширеннями. Ініціалізація виконується один раз при запуску:

final isar = await Isar.open( [ProductSchema], directory: (await getApplicationDocumentsDirectory()).path, ); 

Типи індексів в Isar:

Тип індексу Опис Застосування
IndexType.value Хеш-індекс на одне поле Рівність (==, ===)
IndexType.hash Хеш для точного збігу Точний пошук за ID або кодом
Складовий Комбінація кількох полів Запити виду WHERE category = ? AND price > ?

Індекси на category та складовий на name+price дозволяють виконувати запити без повного сканування таблиці — це дає приріст швидкості до 10×.

Чому Isar швидше Hive?

Порівняємо ключові характеристики:

Параметр Isar Hive
Мова реалізації Rust (нативний код) Dart (інтерпретований)
Індекси Підтримуються Відсутні
Складові запити Так (через фільтри) Тільки в пам'яті
Реактивність Стріми з коробки Немає вбудованої
Продуктивність читання До 5000 зап./с До 1000 зап./с
Платформи iOS, Android, Desktop Всі (включаючи Web)

Isar швидше Hive в 5 разів при читанні та в 2 рази при записі. Для застосунків з великим обсягом даних вибір очевидний.

Як виконувати складні запити з реактивністю?

Приклад фільтрації та сортування з лімітом:

final products = await isar.products .filter() .categoryEqualTo('electronics') .and() .inStockEqualTo(true) .sortByPriceDesc() .limit(20) .findAll(); 

Реактивний стрім — підписка на зміни вибірки:

Stream<List<Product>> watchProducts() { return isar.products .filter() .inStockEqualTo(true) .watch(fireImmediately: true); } 

Інтеграція з BLoC: при зміні даних у БД стрім автоматично сповіщає блок, UI перемальовується. Не потрібно використовувати polling або ручні оновлення.

Що таке міграція і як її налаштувати?

При зміні схеми даних (додавання полів, зміна типу) необхідно налаштувати міграцію. Використовуйте параметр @collection(accessor: 'products') та вкажіть версію в IsarSchema.migration. Кроки:

  1. Змініть модель даних.
  2. Збільшіть версію схеми.
  3. Визначте перетворення в migration callback.
  4. Протестуйте на копії бази.

Забута міграція призведе до крашу при відкритті. Isar автоматично перевіряє версію та викликає помилку при невідповідності.

Обмеження та міграції

Isar не підтримує Web (для Web-проєктів використовуйте Hive). На Desktop (Windows, macOS, Linux) працює через isar_flutter_libs. При зміні схеми даних необхідно налаштувати міграцію.

Що входить у налаштування Isar?

  • Аналіз структури даних та виділення критичних запитів.
  • Проєктування схеми з індексами та оптимізація моделей.
  • Реалізація кодогенерації та налаштування транзакцій.
  • Інтеграція реактивних стрімів з BLoC або Riverpod.
  • Створення міграцій для майбутніх змін.
  • Тестування на реальних даних та профілювання.
  • Документація по експлуатації та навчання команди.

Процес роботи

  1. Аналіз вимог до даних і запитів.
  2. Проєктування схеми з індексами.
  3. Реалізація моделі та кодогенерація.
  4. Інтеграція з BLoC/Riverpod через реактивні стріми.
  5. Налаштування міграцій.
  6. Тестування на реальних даних.
  7. Деплой з документацією.

Строки та вартість

Базова налаштування (3–5 колекцій з індексами) — 1–2 дні. З інтеграцією реактивних стрімів та міграцією — 2–4 дні. Вартість розраховується індивідуально. Зв'яжіться з нами для оцінки проєкту. Замовте налаштування Isar під ключ з гарантією результату. Отримайте консультацію щодо інтеграції Isar у ваш проєкт. Гарантуємо виконання в строк — більше 30 успішних впроваджень.