При разработке мобильного приложения для онлайн-каталога с 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. Шаги:
- Измените модель данных.
- Увеличьте версию схемы.
- Определите преобразование в
migrationcallback. - Протестируйте на копии базы.
Забытая миграция приведёт к крашу при открытии. Isar автоматически проверяет версию и вызывает ошибку при несоответствии.
Ограничения и миграции
Isar не поддерживает Web (для Web-проектов используйте Hive). На Desktop (Windows, macOS, Linux) работает через isar_flutter_libs. При изменении схемы данных необходимо настроить миграцию.
Что входит в настройку Isar?
- Анализ структуры данных и выделение критичных запросов.
- Проектирование схемы с индексами и оптимизация моделей.
- Реализация кодогенерации и настройка транзакций.
- Интеграция реактивных стримов с BLoC или Riverpod.
- Создание миграций для будущих изменений.
- Тестирование на реальных данных и профилирование.
- Документация по эксплуатации и обучение команды.
Процесс работы
- Анализ требований к данным и запросам.
- Проектирование схемы с индексами.
- Реализация модели и кодогенерация.
- Интеграция с BLoC/Riverpod через реактивные стримы.
- Настройка миграций.
- Тестирование на реальных данных.
- Деплой с документацией.
Сроки и стоимость
Базовая настройка (3–5 коллекций с индексами) — 1–2 дня. С интеграцией реактивных стримов и миграцией — 2–4 дня. Стоимость рассчитывается индивидуально. Свяжитесь с нами для оценки проекта. Закажите настройку Isar под ключ с гарантией результата. Получите консультацию по интеграции Isar в ваш проект. Гарантируем выполнение в срок — более 30 успешных внедрений.







