Отображение таблицы в UI, написанном на flutter, с часто изменяемыми данными

Есть таблица с данными, которые часто изменяются.
Строк в ней примерно полмиллиона. Может изменяться каждая в отдельности строка.
Единовременно их отображать, конечно, не нужно. Но нужно иметь возможность быстро получать данные. Чем быстрее, тем лучше. И знать, что изменения произошли.
Читать данные напрямую из базы, конечно, не хочется.

На ум пока приходят только kafka и redis для хранения подобных данных.

На обновления в redis вроде не подписаться, kafka же не может гарантировать, что будет содержать только последние обновления, по одному ключу может лежать более одного варианта данных. Что в общем не очень критично, но желательно всё же иметь один вариант.

В общем, ищу хранилище данных, из которого можно очень быстро и много читать. Посоветуйте, пожалуйста, может ещё какие другие варианты, которые хорошо можно совместить с UI, написанным на Flutter для web, windows и linux.


Ответы (1 шт):

Автор решения: MiT

В 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 будет лучшим выбором.

→ Ссылка