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

Добрый вечер. И снова я) Появилась мысль организовать два канала для

работы с sqlite. В один будут падать действия для записи, в другой для чтения. Пулл соединения планирую сделать глобальной переменной. Будет ли чтение и запись ругаться?

29 ответов

12 просмотров

Чего вы пытаетесь добиться через каналы

МишанЯ- Автор вопроса
МишанЯ
Чтение запись от клиентов.

Я понимаю, вы так пытаетесь лимитировать кол-во соединений?

МишанЯ- Автор вопроса
Sasha Sakharov
Я понимаю, вы так пытаетесь лимитировать кол-во со...

Я пытаюсь решить уже проблему горутиной записи чтения с sqlite3

МишанЯ
Я пытаюсь решить уже проблему горутиной записи чте...

А проблема в чем? Дайте ссылку на сообщение исходное

МишанЯ- Автор вопроса
Sasha Sakharov
А проблема в чем? Дайте ссылку на сообщение исходн...

Нет исходного👀 Наброски которые удаляю ежедневно и пишу по другому...и снова удаляю. Делал без каналов. Ставил мютексы на пулл, но в таком режиме 100 записей производилось за 11 секунд. Это очень долго.

МишанЯ- Автор вопроса
Sasha Sakharov
А проблема в чем? Дайте ссылку на сообщение исходн...

Есть сервер. Сервер обрабатывает клиентов. Клиенты могут как писать в базу, так и читать оттуда. Клиенты сидят на горутинах. Соответственно запись чтение в базу происходит с горутин. Пробывал блокировать пулл мютексом, и эмулировал 100 записей, скрипт выполнялся 11 сек. Это долго. Решил отказаться от мютексов и использовать каналы. Один для хаписи другой для чтения. Действия с записями будут посылаться в один канал, чтения в другой. Если без каналов а тупо наутек отдать пулл как на записи так и на чтение, то происходит ошибка date base is locked.

Roman K
RWMutex пробовал?

Но да, надо учитывать, что как только ты горизонтально начнёшь масштабироваться, локи-мьютексы перестанут работать. Локи должны быть на принимающей стороне (БД), а не клиентской

МишанЯ
Есть сервер. Сервер обрабатывает клиентов. Клиенты...

Вы хотите сделать конкурентный на множество клиентов, но используете неподходящий интрумент - sqlite, пытаясь изнасиловать файловую систему. Возьмите условный постгрес, где есть мильтиверсионность и данные проблемы решены десятилетия назад.

МишанЯ- Автор вопроса
Sasha Sakharov
Вы хотите сделать конкурентный на множество клиент...

Sqlite пока что. Будет необходимость, будем другую.

МишанЯ- Автор вопроса
Sasha Sakharov
Вы хотите сделать конкурентный на множество клиент...

И не думаю я, что в том же постгрес конкурентнся обработка работает из коробки.

МишанЯ- Автор вопроса
Wingman
Jfyi: каналы тоже на мьютексах

Когда они в пределах языка go, но когда дело касается базы, то они там наведут хаос

МишанЯ- Автор вопроса
Roman K
Надо не думать, а читать документацию

По документации написано, что sqlite сама управляет, но на деле нифига

МишанЯ
По документации написано, что sqlite сама управляе...

По документации английским по белому написано, что параллельные запросы на запись нельзя. А в постгресе наоборот — https://ru.wikipedia.org/wiki/MVCC

МишанЯ- Автор вопроса
Roman K
По документации английским по белому написано, что...

Да мне и не нужно паралейные запросы на запись, это файл. Понятно. Мне надо чтобы запросы на запись не мешали запросам на чтение. Потому что sqlite способна обработать сотни запросов на запись за секунду.

МишанЯ
Да мне и не нужно паралейные запросы на запись, эт...

Ты транзакцию закрываешь после записи?

МишанЯ
Да мне и не нужно паралейные запросы на запись, эт...

Пишите в отдельную бд. Т.е. одна бд на запись, другая - только на чтение

Roman K
Репликация SQLite - что-то новенькое)

А никто не говорил про репликацию :)

Roman K
Что тогда там читать?)

Ну как. 1 бд заполняется на старте из неё только чтение, а вторая - только запись :) ну и housekeeping на старте :))))

Roman Timofeev
Ну как. 1 бд заполняется на старте из неё только ч...

вы слушаете передачу “я у мамы архитектор” 🙂

МишанЯ- Автор вопроса
МишанЯ
Да мне и не нужно паралейные запросы на запись, эт...

А разве любой запрос на запись не заблокирует все остальные запросы, в том числе и на чтение? В sqlite вроде так, в пределах одного коннекта. Мне кажется что правильнее заменить её, если планируется приличная нагрузка с большим количеством клиентов

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта