серверу с периодическими плюс-минус одновременными пиками до 1-1.5К рпс, в каждом запросе происходит как чтение из базы, так и запись.
sqlite в пиковые моменты в итоге начинает ругаться, отдавая database is locked, что логично для её модели "многопоточности".
Кто-нибудь боролся с этим? Побеждали?
Из более-менее разумных вариантов приходит в голову только начинать обращаться с базой через буферизированный канал с ёмкостью 1, но очевидно, что этот вариант создаёт суперузкое бутылочное горлышко, поэтому хотелось бы узнать, возможно кто-нибудь решал (хотя бы частично) это комбинациями настроек?
От sqlite отказаться нельзя.
Целостность не важна от слова совсем, то есть вполне можем жертвовать транзакциями, синхронизацией и т.д.
Есть идеи?
кажется, ширина вашего бутылочного горлышка будет равна в точности ширине sqlite, так что норм решение
Ага, писать в /dev/null и читать из /dev/random. Целостность же СОВСЕМ не важна, да?
У sqlite есть несколько режимов, в том числе и неблокирующий
А почему от sqlite нельзя отказаться?
можно попробовать взять "in memory" версию. писать/читать в неё, а потом просто записывать на диск раз в N
какое соотношение запросов на чтение и запросов на запись?
а сервера(сервиса) один инстанс строго или надо масштабировать? открывайте долгосрочную сессию к бд потом копите данные и по количеству записей + периоду делайте флаш можно ведь N инсертов объединить в одну транзакцию
https://github.com/mattn/go-sqlite3/issues/274 интересный ишуй
Обсуждают сегодня