Отображение таблицы в UI, написанном на flutter, с часто изменяемыми данными
Есть таблица с данными, которые часто изменяются.
Строк в ней примерно полмиллиона. Может изменяться каждая в отдельности строка.
Единовременно их отображать, конечно, не нужно. Но нужно иметь возможность быстро получать данные. Чем быстрее, тем лучше. И знать, что изменения произошли.
Читать данные напрямую из базы, конечно, не хочется.
На ум пока приходят только kafka
и redis
для хранения подобных данных.
На обновления в redis
вроде не подписаться, kafka
же не может гарантировать, что будет содержать только последние обновления, по одному ключу может лежать более одного варианта данных. Что в общем не очень критично, но желательно всё же иметь один вариант.
В общем, ищу хранилище данных, из которого можно очень быстро и много читать. Посоветуйте, пожалуйста, может ещё какие другие варианты, которые хорошо можно совместить с UI, написанным на Flutter
для web
, windows
и linux
.
Ответы (1 шт):
В Flutter-приложениях для работы с локальными базами данных можно использовать несколько вариантов, в зависимости от требований и особенностей проекта. На стороне фронтенда есть два основных типа баз данных: SQL и NoSQL.
1. SQLite (с использованием библиотеки Drift)
SQLite — это реляционная база данных, которая хранит данные в виде таблиц (строки и столбцы) и использует язык SQL для выполнения запросов. Для работы с SQLite в Flutter часто используется библиотека Drift (ранее известная как Moor), которая предоставляет удобный интерфейс для работы с SQL-запросами и автоматическую генерацию кода. Drift упрощает работу с базой данных, делая код более декларативным и понятным.
Почему SQLite:
- Структурированные данные: Если ваши данные имеют чёткую структуру (например, таблицы с полями), а также если вам нужны сложные отношения между данными, такие как связи «один ко многим» или «многие ко многим», то реляционные базы данных, такие как SQLite, являются отличным выбором.
- Транзакции и целостность данных: SQLite поддерживает транзакции, что позволяет обеспечить целостность данных в случае сбоя.
- Гибкость запросов: SQL-запросы дают возможность гибко выбирать данные, фильтровать их и выполнять агрегатные функции.
- Поддержка больших данных: SQLite хорошо справляется с работой с большими объёмами данных и сложными запросами.
Пример использования SQLite в Flutter через Drift можно найти в официальной документации Drift.
2. NoSQL базы данных (Sembast, ObjectBox, Isar и другие)
NoSQL базы данных хранят данные в формате ключ/значение, документов или объектов. Эти базы данных часто используются, когда данные не имеют жёсткой структуры или когда важна скорость при работе с данными.
- Sembast — простая NoSQL база данных для Flutter, которая хранит данные в виде ключ-значение и JSON-документов. Она не требует сложной настройки и хорошо подходит для небольших приложений. Sembast на pub.dev
- ObjectBox — это объектно-ориентированная база данных, оптимизированная для высокой производительности. Она хорошо подходит для работы с большим количеством объектов и обеспечивает высокую скорость чтения и записи. ObjectBox на pub.dev
- Isar — это ещё одна высокопроизводительная NoSQL база данных, которая поддерживает хранение данных в виде объектов и хорошо подходит для работы с большим количеством данных. Isar на pub.dev
3. Выбор между SQL и NoSQL:
Если у вас много данных и каждая часть данных может изменяться независимо от других, реляционная база данных, такая как SQLite, будет предпочтительным выбором. Вот несколько причин:
- Производительность: SQLite лучше оптимизирована для работы с большим объёмом данных.
- Много структурированных данных: SQLite легче управляет данными, которые имеют чёткую структуру (например, таблицы с полями) и сложные отношения между ними.
- Изменения отдельных записей: В реляционных базах данных вы можете эффективно обновлять или изменять конкретные записи в таблицах, не затрагивая остальные данные.
- Надёжность и транзакции: SQLite обеспечивает надёжность и поддерживает транзакции, что важно для обеспечения согласованности данных, особенно при параллельной работе с несколькими частями данных.
Если вы планируете работать с большим количеством структурированных данных, которые могут часто изменяться, и если вам важна согласованность данных и поддержка сложных запросов, то SQLite будет лучшим выбором.