Настройка Isar во Flutter: индексы, запросы, реактивность

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

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, 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
    1002
  • 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 успешных внедрений.