214 похожих чатов

Не совсем архитектурный вопрос, но всё-таки. Есть offline-first приложение. В нём sqlite

БД, вокруг которой завязана вся логика и которая выступает как SSOT.

Так же у приложения имеются настройки разных частей приложения.

Есть желание (и необходимость) некоторые настройки держать в этой же БД, чтобы можно было через неё спокойно устраивать экспорт-импорт данных.

Напрашивается какая-нибудь таблица SettingsTable со столбцами title TEXT, value ???.

И вот проблема в том, что значение разных настроек имеет разный тип. Где-то мы выбираем значение из предложенных вариантов, где-то переключается флажок, а где-то вводится текст.

Я знаю о том, что в sqlite используется type affinity, что по факту значения столбцов могут быть динамическими, но, к сожалению, не все инструменты позволяют с этим нормально работать.

И вот вопрос — насколько будет стоящей идея выставить тип для столбца значения в TEXT, как самый широкий, чтобы потом в нужных местах кастить к другим типам?

Или может у кого-то есть идея получше?

15 ответов

23 просмотра

может noSql больше подходит для сохранения настроек?

Konstantin-Dovnar Автор вопроса
Maksim Gridin
может noSql больше подходит для сохранения настрое...

NoSQL точно лучше подходит, но не покрывает условия задачи.

Konstantin-Dovnar Автор вопроса
Maksim Gridin
выгружать в json и сохранять как blob

Вот это уже любопытно. Надо будет подумать об этом.

Я может быть сделал бы два столбца key (TEXT, PK) и value (BLOB)

Konstantin-Dovnar Автор вопроса
Konstantin Dovnar
Вот это уже любопытно. Надо будет подумать об этом...

главное чтобы настроек не стало больше 2 МБ )

Konstantin Dovnar
В чём будут преимущества BLOB над TEXT?

Туда можно класть бинарные данные, если вдруг понадобится. Можно флажки как один байт хранить. Числа тоже легко конвертируются в байты.

Konstantin-Dovnar Автор вопроса
Andrey Kuznetsov
главное чтобы настроек не стало больше 2 МБ )

Конкретно настройки вряд ли даже подумают подобраться к этому пределу 🤔

Konstantin-Dovnar Автор вопроса
Arkadii Ivanov
Туда можно класть бинарные данные, если вдруг пона...

Хм, интересно. А строки так хранить выйдет? Я не особо знаком с BLOB'ами в sqlite.

Konstantin Dovnar
Хм, интересно. А строки так хранить выйдет? Я не о...

Да, думаю просто можно положить строку как есть. Я бы попробовал сначала.

если вы хотите уйти от каста и связанных с ним потенциальных проблем, то кроме как хранить данные в какой-то строго типизированной структуре не выйдет, т.е. в вашем случае либо заводить отдельные таблицы настроек для разных типов, либо хранить всё в одном объекте, который потом сериализовать в тот же json и хранить его в базе в виде строки

Konstantin-Dovnar Автор вопроса
Zlatko Pušić
если вы хотите уйти от каста и связанных с ним пот...

Да. Первый вариант мне не нравится, т.к. выйдут те же яйца, только в профиль, с проверками нужного column. Второй вариант уже интереснее, выше его предложили, о нём тоже подумаю. Спасибо.

Почему бы не заюзать DataStore для настроек? А чтобы SSOT не потерялось, мержить источники в репозитории

Konstantin-Dovnar Автор вопроса
Eugene P.
Почему бы не заюзать DataStore для настроек? А что...

Именно потому что придётся переносить ssot, чего я делать не хочу. Даже банальные import-export тогда сильно усложнятся.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта