Предположим, я использую Room из db v1, и к тому времени, когда мое приложение достигнет db v10, сколько методов миграции мне придется написать?
9.
Один из подходов: 1-> 2, 2-> 3, 3-> 4, 4-> 5, 5-> 6, 6-> 7, 7-> 8, 8-> 9 и 9- > 10.
Другой подход: 1-> 10, 2-> 10, 3-> 10, ..., 9-> 10.
Я предполагаю, что первый подход более популярен, так как его легче развивать. Для каждого нового выпуска базы данных вы просто создаете один дополнительный объект.
В sqlite мы получаем текущую версию установленного приложения в БД в onUpgrade, и мы просто проваливаем случай переключения без операторов прерывания, чтобы он удовлетворял всем обновлениям БД.
Это будет примерно столько же строк кода, которые вы дадите или возьмете, чем то, что вы сделали бы в Комнате. Каждый из ваших операторов case
превращается в объект Migration
, который обрабатывает постепенное обновление (например, 3-> 4).
Но это так неудобно, неуместно писать всего 45 методов, если у меня db v10!
Комната знает, как «склеить» отдельные миграции, необходимые для достижения целевой версии. Итак, в первом подходе, который я описал, если приложение необходимо перенести с 3 на 10, Room может использовать 3-> 4, 4-> 5, 5-> 6, ..., 9-> 10, чтобы получить есть.