Небольшая заметка про SnappyDB. Это NoSQL база данных под Android, которая базируется на LevelDB и алгоритме сжатия Snappy.
LevelDB – это key-value база данных. Написана Google-ом для каких-то своих мега проектов.
Snappy – метод сжатия данных, сбалансированный на скорость (т.е. приоритет быстрота, а не степень сжатия). Также написана Google-ом.
Авторы SnappyDB на своем блоге приводят очень привлекательный график сравнивая скорость работы SnappyDB с SQLite.
Все это конечно очень и очень заманчиво, но лично меня она заинтересовала не поэтому. Дело не в скорости и даже не в том, что какие-то части этой БД делал Сам Google, а в более-менее нормальном API.
На практике у меня пока не возникали задачи, в которых нужно было обрабатывать на мобильных устройствах (а я напомню это именно БД для Android) терабайты данных. При этом хранить различные небольшие справочники, настройки, профили и прочую ерунду приходится регулярно.
Конечно по-хорошему можно использовать API Preferenes или SQLite, но в некоторых случаях это не очень удобно.
В частности у SQLite несколько громоздкий API, а в preferences нет удобных методов для сложных выборок по ключам.
Упоминая более-менее нормальное API я имел в виду следующее. Вот что нужно сделать чтобы получить значение по ключу в Preferences (Android API).
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
String username = sharedPref.getString("name", "");
Вот что нужно сделать чтобы получить значение по ключу в Snappy DB.
DB db = DBFactory.open(context);
String username = db.get("name");
Другими словами, API не такое “многословное” как стандартное Android API.
При этом если есть несколько записей (“name:0″,”name:1″,”name:2” и т.д.), то их можно получить как-то так:
db.findKeys("name:");
Такое “из коробки” в Preferences сделать пока невозможно.
Поэтому мне показалось, что Snappy DB это удобно. Можно использовать например в таких задачах как:
– Сохранить справочников кодов и их описание
– Запоминать время работы каких-то специальных команд или хранить данные по мониторингу
– Идентификатор пользователя и его профиль (например в XML или JSON формате)
В общем все было хорошо, пока не наткнулся на одну приставку под Android TV, на которой был установлен Android M. Так вот, на этом устройстве Snappy DB внезапно стала работать с ошибками. Поскольку БД нативная, а желания дебажить сишный код у меня в последнее время нет, пришлось отказаться от ее использования в текущих проектах.