БД, вокруг которой завязана вся логика и которая выступает как SSOT.
Так же у приложения имеются настройки разных частей приложения.
Есть желание (и необходимость) некоторые настройки держать в этой же БД, чтобы можно было через неё спокойно устраивать экспорт-импорт данных.
Напрашивается какая-нибудь таблица SettingsTable со столбцами title TEXT, value ???.
И вот проблема в том, что значение разных настроек имеет разный тип. Где-то мы выбираем значение из предложенных вариантов, где-то переключается флажок, а где-то вводится текст.
Я знаю о том, что в sqlite используется type affinity, что по факту значения столбцов могут быть динамическими, но, к сожалению, не все инструменты позволяют с этим нормально работать.
И вот вопрос — насколько будет стоящей идея выставить тип для столбца значения в TEXT, как самый широкий, чтобы потом в нужных местах кастить к другим типам?
Или может у кого-то есть идея получше?
может noSql больше подходит для сохранения настроек?
выгружать в json и сохранять как blob
NoSQL точно лучше подходит, но не покрывает условия задачи.
Вот это уже любопытно. Надо будет подумать об этом.
Я может быть сделал бы два столбца key (TEXT, PK) и value (BLOB)
В чём будут преимущества BLOB над TEXT?
главное чтобы настроек не стало больше 2 МБ )
Туда можно класть бинарные данные, если вдруг понадобится. Можно флажки как один байт хранить. Числа тоже легко конвертируются в байты.
Конкретно настройки вряд ли даже подумают подобраться к этому пределу 🤔
Хм, интересно. А строки так хранить выйдет? Я не особо знаком с BLOB'ами в sqlite.
Да, думаю просто можно положить строку как есть. Я бы попробовал сначала.
если вы хотите уйти от каста и связанных с ним потенциальных проблем, то кроме как хранить данные в какой-то строго типизированной структуре не выйдет, т.е. в вашем случае либо заводить отдельные таблицы настроек для разных типов, либо хранить всё в одном объекте, который потом сериализовать в тот же json и хранить его в базе в виде строки
Да. Первый вариант мне не нравится, т.к. выйдут те же яйца, только в профиль, с проверками нужного column. Второй вариант уже интереснее, выше его предложили, о нём тоже подумаю. Спасибо.
Почему бы не заюзать DataStore для настроек? А чтобы SSOT не потерялось, мержить источники в репозитории
Именно потому что придётся переносить ssot, чего я делать не хочу. Даже банальные import-export тогда сильно усложнятся.
Обсуждают сегодня