работы с sqlite. В один будут падать действия для записи, в другой для чтения. Пулл соединения планирую сделать глобальной переменной. Будет ли чтение и запись ругаться?
Чего вы пытаетесь добиться через каналы
Чтение запись от клиентов.
Я понимаю, вы так пытаетесь лимитировать кол-во соединений?
Я пытаюсь решить уже проблему горутиной записи чтения с sqlite3
А проблема в чем? Дайте ссылку на сообщение исходное
Нет исходного👀 Наброски которые удаляю ежедневно и пишу по другому...и снова удаляю. Делал без каналов. Ставил мютексы на пулл, но в таком режиме 100 записей производилось за 11 секунд. Это очень долго.
Есть сервер. Сервер обрабатывает клиентов. Клиенты могут как писать в базу, так и читать оттуда. Клиенты сидят на горутинах. Соответственно запись чтение в базу происходит с горутин. Пробывал блокировать пулл мютексом, и эмулировал 100 записей, скрипт выполнялся 11 сек. Это долго. Решил отказаться от мютексов и использовать каналы. Один для хаписи другой для чтения. Действия с записями будут посылаться в один канал, чтения в другой. Если без каналов а тупо наутек отдать пулл как на записи так и на чтение, то происходит ошибка date base is locked.
RWMutex пробовал?
Но да, надо учитывать, что как только ты горизонтально начнёшь масштабироваться, локи-мьютексы перестанут работать. Локи должны быть на принимающей стороне (БД), а не клиентской
Вы хотите сделать конкурентный на множество клиентов, но используете неподходящий интрумент - sqlite, пытаясь изнасиловать файловую систему. Возьмите условный постгрес, где есть мильтиверсионность и данные проблемы решены десятилетия назад.
Jfyi: каналы тоже на мьютексах
Sqlite пока что. Будет необходимость, будем другую.
И не думаю я, что в том же постгрес конкурентнся обработка работает из коробки.
Надо не думать, а читать документацию
Когда они в пределах языка go, но когда дело касается базы, то они там наведут хаос
По документации написано, что sqlite сама управляет, но на деле нифига
По документации английским по белому написано, что параллельные запросы на запись нельзя. А в постгресе наоборот — https://ru.wikipedia.org/wiki/MVCC
Да мне и не нужно паралейные запросы на запись, это файл. Понятно. Мне надо чтобы запросы на запись не мешали запросам на чтение. Потому что sqlite способна обработать сотни запросов на запись за секунду.
Ты транзакцию закрываешь после записи?
Пишите в отдельную бд. Т.е. одна бд на запись, другая - только на чтение
Репликация SQLite - что-то новенькое)
А никто не говорил про репликацию :)
Что тогда там читать?)
Ну как. 1 бд заполняется на старте из неё только чтение, а вторая - только запись :) ну и housekeeping на старте :))))
вы слушаете передачу “я у мамы архитектор” 🙂
дендрофекальная архитектура (c)
Мммм? Ты про пулл? db := sql.Open(...)?
А разве любой запрос на запись не заблокирует все остальные запросы, в том числе и на чтение? В sqlite вроде так, в пределах одного коннекта. Мне кажется что правильнее заменить её, если планируется приличная нагрузка с большим количеством клиентов
Обсуждают сегодня