Избавьтесь от базы данных SQLite, если сохранение объекта в базе данных и выполнение запроса - это только то, что вам нужно в вашем приложении. Моя проблема с базой данных Android по умолчанию заключается в написании большого количества кода для простой вещи.
В своем тесте я рассматривал две базы данных: Realm (из-за множества хороших слов, которые я слышал о ней) и SnappyDB (я обнаружил, что Uber ее использует). Каждый предоставляет свой тест по сравнению с родным SQLite.
Поскольку мне не удалось найти документ, в котором можно было бы сравнить эти две базы данных, я решил сделать это сам, создав и интегрировав их в проект Android. IT позволяет мне сравнивать скорость вставки, поиска списка объектов и удаления всех объектов. Я попытался использовать лучший метод для каждого предложения, чтобы создать этот тест.
Тестовое устройство
Все результаты основаны на устройстве Nexus 5 на базе Android 6.0.1.
Процесс тестирования
На экране несколько кнопок, как видно на скриншоте.
- Первая кнопка создает в памяти 10 000 объектов. Это простые POJO, как вы можете увидеть здесь. (Блочный код этой части)
- Вторая кнопка пытается сначала сохранить эти объекты в Realm, а затем вставить их в SnappyDB. (Сохранить в Realm, сохранить в SnappyDB)
- Третья кнопка пытается найти список всех объектов, которые содержат конкретное значение id. Вы можете добавить значение с помощью предоставленного EditText. (Получить из Realm, получить из SnappyDB)
- Четвертая кнопка пытается удалить все элементы. (Удалить из Realm, удалить из SnappyDB)
Полученные результаты
Я нашел следующие результаты после 10 попыток в разных условиях.
Выводы
- У Realm супер БОЛЬШОЙ !!! проблема / ограничение, Realm не работает в модульных тестах, Realm работает только в инструментальных тестах.
- Если вы выберете неправильный подход, то попадете в беду, как я упал. Стоимость использования транзакции МИНУТЫ !. Вы видите, в какой степени время вставки упало с 300 до 1,7 с при выполнении вставки в транзакции (а не транзакции на вставку как показано здесь).
- Время чтения / поиска в Realm довольно быстрое и почти такое же, если игнорировать первую попытку. Однако допуск в SnappyDB очень высок - от 2 мс до 187 мс. Худший случай случился, когда я попытался найти «1», а лучший случай случился, когда я попытался найти «56248». Он показывает, что SnappyDB находит быстрее, когда вероятность содержать значение мала.
- В Realm есть особый способ удаления типа объекта путем удаления всех типов внутри транзакции. Однако я не нашел такого способа для SnappyDB, и поэтому он намного медленнее, потому что я повторяю список объектов и удаляю их один за другим.