значения, которые мне нужно засунуть в бд, вместо файла, потому что я хочу менять его во время работы приложения без перезапуска.
И так вопрос:
Как в sqlite3 завести конфиг. Просто создать новую таблицу и туда одну строку записать ? Или это как-то по другому делают ?
Могут ли быть 2 одновременно работающие процесса, которые будут считывать значение этого конфига? Если нет, то все, что требуется, - сохранить последнее значение при завершении процесса. Если возможен конкурентный доступ, значит есть вероятность гонки данных, и просто базой/файлом не обойтись. Как верно сказали - нужен мьютекс или Лок на уровне базы. Если sql, то select for update. В Гугле самый популярный совет - юзать файл, на втором месте использовать viper.
а что произойдет в случае конкурентного доступа в базе без select for update?
например?
Можно и конфиг перечитывать, зачем бд
В кейсе, который мы обсуждаем, изначально оговорена необходимость базы для сохранения некоторых данных конфигурации, которые могут меняться. Я не пересказывал всю историю процесса из переписки.
да, я прочитал. но гонка то в какой момент возможна и как она будет выглядеть? судя по "select for update", это, допустим, какой-нить постгрес )
1 процесс пишет, второй читает. Все примерно одновременно = гонка
куда он пишет и куда он читает? в постгрес? и будет "гонка"?
Да неважно куда. Гонка данных и на постгресе и на любом хранилище может быть.
интересно :) а каким симптомы будут у гонки данных в постгрессе, в таком случае?
Чтобы закрыть разговор, приведу следующий пример: В конфиге лежит счётчик. Каждый запуск программы считывает его текущее значение, делает работу и записывает новое значение, прибавив 1 к предыдущему вычитанному.
Обсуждают сегодня