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

Привет, работал кто-нибудь с badger или другими key-value хранилищами? Написал

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

Можно как-то организовать хранилище key-value с 100млн+ строками, чтобы две программы могли работать с одной базой? один постоянно только читает, второй обновляет\пишет\удаляет то что есть в БД.

33 ответов

23 просмотра

бери etcd, там это ещё и распределённо можно делать и вообще всё что захочется с kv

бери нормальную бд типа монги

Andrei 🦉 Sergeev
"монга" и "нормальная бд")

с другой стороный не могу назвать бд которая не дает подключиться более 100 клиентам и ей требуются костыли нормальной *пошел за попкорном*

возьмите redis, самое то судя по требованиям - key value со всякими плюшками сверху

А что за база не позволяет работать с двух воркеров?

Zver
А что за база не позволяет работать с двух воркеро...

badger. https://github.com/dgraph-io/badger возможно я просто что-то не так готовлю\применяю. Не спец, пишу как могу, не стреляйте)

Denis
слишком много для инмемори

+ именно. сервер у меня обычный 16гб RAM и на нем я всё не умещу в память

Denis
слишком много для инмемори

100кк key value пар? это вообще то копейки

Andrei 🦉 Sergeev
100кк key value пар? это вообще то копейки

100млн в инмемори, что то на богатом

Я тут подумал что первый же воркер может просто поднять у себя простую апи и по ней может стучаться второй воркер и получать данные? Тогда вообще база всегда одна и никаких лишних копирований. Может это правильное решение?

🅺🆁🅴🅻 🅰🅸🅵🅾🅻🅸🅽
+ именно. сервер у меня обычный 16гб RAM и на нем ...

тогда можно какую нибудь постгрю, она поддерживает jsonb и вообще шикарно работает на малом количестве ресурсов

🅺🆁🅴🅻 🅰🅸🅵🅾🅻🅸🅽
Я тут подумал что первый же воркер может просто по...

вы пытаетесь написать свою бд по сути, не стоит так делать без веской причины

можно свой сервер навернуть вокруг встраиваемой базы и чтобы компоненты приложения обращались к этому серверу по сети, например. по-моему вы просто пришли к тому, что вам не подходит встраиваемая БД.

Andrei 🦉 Sergeev
вы пытаетесь написать свою бд по сути, не стоит та...

Да не. У меня просто воркер2 должен знать сколько денег на счету АААБББ. Ну примерно) И у воркера2 есть своя база на PG и он вообще там много чем занимается. Но я запилил воркер1, который постоянно обновляет 100млн строк и хранит это дело в Key-Value badger базе. Ну и сначала подумал что надо как-то это дело перекидывать в базу PG. Или воркером2 открывать Key-Value базу. Но это как миниум перемещение > 5Gb данных по сети, что не очень то хорошо. Теперь мне вот мысль с поднятием API сервера на воркере1 все больше и больше нравится

Elmanov Anton
можно свой сервер навернуть вокруг встраиваемой ба...

Я во встраиваемую БД пришел, т.к. у меня сервер обычный HP microserver Gen8 с 16Гб ОЗУ и 4ТБ места. А работать хочется быстро и эффективно на выборках в 100млн строк. И ни PG, ни монгу я настроить нормально не смог ни на загрузку таких данных, ни выборку по ним в адекватное время. А тут kv меня прям удивила скоростью. Просто логики не хватает мне как организовать общение воркеров правильное.

🅺🆁🅴🅻 🅰🅸🅵🅾🅻🅸🅽
Я во встраиваемую БД пришел, т.к. у меня сервер об...

ну отчасти встраиваемая бд и быстрее тк это просто папка с файлами, залоченная конкретным процессом. а такие вещи, как сетевые коннекты и конкуррентные пользователи или фоновые операции они там не поддержаны. как я выше уже написал со встраиваемой бд можно сделать синглтон-логику. те какой 1 процесс открывает базу и работает с ней. а дальше другие компоненты связываются с ним по сети, например gRPC. можно еще оставить 1 процесс и наплодить горутин, раз у вас 1 сервер, то и горизонтальное масштабирование вам не придется втаскивать - не пробовали так?

Zver
А в ПГ индексы создавали?

Конечно! ПГ у меня на таких объемах работает еще сносно. Но как подходим к 500млн строк, так совсем всё печально становилось с выборками. Теперь даже не знаю когда снова рискну работать с пг)

Elmanov Anton
ну отчасти встраиваемая бд и быстрее тк это просто...

Вот именно то что и хочется попробовать теперь.

если у вас второй воркер это всего-лишь горутина внутри того же процесса, то этот второй воркер без труда переиспользует коннект к бд

Elmanov Anton
если у вас второй воркер это всего-лишь горутина в...

Не, это две разные программы самостоятельные.

🅺🆁🅴🅻 🅰🅸🅵🅾🅻🅸🅽
Не, это две разные программы самостоятельные.

а зачем они самостоятельные, если сервер всего 1 и это не изменится?

Elmanov Anton
а зачем они самостоятельные, если сервер всего 1 и...

Так один это сервер, который обслуживает пользователей. Бэкенд для web, android, ios клиентов. И просто иногда этому бэкенду надо знать балансы о неких "счетах". Вот тогда-то он и должен обращаться к чему-то готовому и мгновенно получать эту информацию. Вот для него и написан второй воркер, который много чего делает и в итоге укладывает готовые данные пачкой в KV хранилище у себя. И встраивать функционал одного в другого - это может быть сильно больно, т.к. тот что укладывает в KV хранилище очень сильно использует ресурсы и скорее всего уедет на более мощный сервер в будущем для того чтобы готовить данные быстрее.

🅺🆁🅴🅻 🅰🅸🅵🅾🅻🅸🅽
Я во встраиваемую БД пришел, т.к. у меня сервер об...

Clickhouse попробуйте от Яндекса. У меня на ней DPI анализатор крутиться в одном из проектов .

Andrei 🦉 Sergeev
возьмите redis, самое то судя по требованиям - key...

Спасибо. Идеальное решение оказалось. Всё работает как часики. И 100млн спокойно помещаются дважды в 16гб памяти, что позволяет производить все необходимые операции. И скорость. Прям впечатлил redis.

🅺🆁🅴🅻 🅰🅸🅵🅾🅻🅸🅽
Спасибо. Идеальное решение оказалось. Всё работает...

только не допускайте утилизации памяти/процессора выше 30% на редисе - иначе он вас сильно огорчит

Daniel Podolsky
только не допускайте утилизации памяти/процессора ...

Благодарю за рекомендацию!👍 В некие таймауты уже успел воткнуться на flushdb при 70млн+ строках в базе. Но как ни крути это лучшее решение из всего что опробовано. А опробовал много.

🅺🆁🅴🅻 🅰🅸🅵🅾🅻🅸🅽
Благодарю за рекомендацию!👍 В некие таймауты уже у...

ну вот еще аэроспайк можно попробовать. он кластерный, и именно таких проблем за ним не водится

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
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
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта