Почему Hive быстрее SQLite и за счет чего достигается такая скорость
Что проверяют
Понимаете ли вы, что сравниваются хранилища разного класса, а не две похожие базы. Hive это key-value хранилище на Dart для мобильного приложения, SQLite это полноценная реляционная СУБД с журналом и планировщиком. Интервьюер смотрит, назовёте ли вы механику выигрыша и границу, за которой он пропадает.
Как отвечать
Скорость Hive берётся из того, чего в нём нет:
- нет SQL: ни разбора запроса, ни планировщика, ни оптимизатора. Чтение по ключу это поиск в обычной хеш-таблице;
- индекс ключей в оперативной памяти: box держит карту «ключ, смещение в файле», поэтому чтение это одно позиционирование, а обычный box вдобавок держит в памяти и сами значения;
- запись только в конец файла: изменение и удаление это новая запись в хвост, без правки B-дерева на месте. Мусор убирает отдельная компактизация;
- свой бинарный формат: объект пишется адаптером напрямую, без слоя типов SQL и без маршалинга через платформенный канал, на котором построены классические обвязки sqflite;
- нет ACID и журнала: SQLite ради надёжности делает fsync и ведёт WAL, а это самая дорогая часть записи.
Дальше честная часть ответа: Hive выигрывает на типовом мобильном профиле, то есть на настройках, кэше ответов, сессии, небольших списках объектов. На выборках с условиями, сортировками и связями он проигрывает, потому что фильтрация превращается в перебор значений на стороне Dart.
Где спотыкаются
Начинают рассказывать про Hadoop, MapReduce и петабайты. Apache Hive это другая система с тем же именем. В мобильном контексте речь про локальное хранилище, и разговор о распределённой обработке закрывает вопрос сразу.
Объявляют Hive быстрее всегда. На больших коллекциях преимущество переворачивается: обычный box поднимает все значения в память при открытии, и приложение платит и памятью, и временем старта. Там, где нужен поиск по полям, выигрывает индекс SQLite.
Не называют цену. У append-only файла нет транзакций на несколько ключей, согласованность между боксами приходится держать руками, а файл растёт до компактизации. Для денег и офлайн-очереди это аргумент в пользу SQLite.