аннлн
раздельная память и хард-треды это про fork()
Snusmumriken
А, и правда, мутексируем-семафорим. Хм. Я всё ещё не особо шарю в линуксовой системщине.
аннлн
аннлн
Snusmumriken
аннлн
бедняги
Snusmumriken
Ага. Ну зато у тебя есть шанс в полной мере развлечься с шареньем этого пула по разным луа-стейтам ))
Snusmumriken
А в чём прекол pgpool? Это же простой однопоточный пул, ничего необычного. Такой же как в том же нгинксе.
аннлн
внезапно в connection pooling
Snusmumriken
Ну да
Snusmumriken
Что из этого следует?
аннлн
допустим, у тебя есть YOBA-хайлоад-постгрес-сервер, с max_connections = 1024
Snusmumriken
Ага
аннлн
и ВНЕЗАПНО прилетает 1025 запросов, который выполняется по полторы секунды каждый...
Snusmumriken
То что оно не открывает новых соединений если коннект уже установлен — я понял, просто это ни коим боком к многопоточке и системщине не относится, я такое писал не один раз.
аннлн
Snusmumriken
Поставить один запрос в очередь
аннлн
очевидно
аннлн
а каким способом-то?
Snusmumriken
В.. Пуле? ))
аннлн
вот у тебя есть openresty с pgmoon
Snusmumriken
Ага
аннлн
pg:connect() вернёт ошибку, если слотов на сервере не хватает
Snusmumriken
shared-dict в который пихаем запросы, и оттуда же считываем. Пока не придёт наш ответ, просто спим.
И поток который разруливает пул, делает коннекты, пишет, отправляет обратно в шаред-дикт ответы. В опенресте так можно.
аннлн
постгрес это чуть больше, чем запрос - ответ
аннлн
вполне себе стандартная практика и хороший тон — объявить SQL-запрос и выполнять его с разными параметрами
аннлн
аннлн
ну, доля правды в этом есть
аннлн
с современными вычислительными ресурсами можно действительно изгаляться как хочется
аннлн
но хочется стотыщмульоновRPS на пентиуме4 же
аннлн
ещё и человекочитаемо
Snusmumriken
Эх, идеалы
аннлн
Эх, идеалы
local server = require 'http.server'
local sql = require 'tarantool_psql'
local json = require 'json'
local db = sql.connect{ host = '127.0.0.1', port = 5432, user = '', password = '', dbname = '', sslmode = 'disable', connections = 128, }
local httpd = server.new('127.0.0.1', arg[1])
httpd:route({path = '/.*'}, function(req)
local link = db.pool.get()
local query, result = link:query("select * from users")
db.pool:put(link)
return {status=200, body=json.encode(result)}
end)
httpd:start()
Snusmumriken
На моей практике, идеала могут достичь только какие-то абстрактные концепции или алгоритмы, вроде бинарных деревьев, алгоритмов брезенхема/ву/ли/дейкстры и т.д, а конкретная реализация будет несовершенной всегда.
аннлн
собственно, близко к идеалам
аннлн
стотыщмлнRPS на впске с 1гб памяти
Snusmumriken
local server = require 'http.server'
local sql = require 'tarantool_psql'
local json = require 'json'
local db = sql.connect{ host = '127.0.0.1', port = 5432, user = '', password = '', dbname = '', sslmode = 'disable', connections = 128, }
local httpd = server.new('127.0.0.1', arg[1])
httpd:route({path = '/.*'}, function(req)
local link = db.pool.get()
local query, result = link:query("select * from users")
db.pool:put(link)
return {status=200, body=json.encode(result)}
end)
httpd:start()
Потому что куча библиотек скрывает низкоуровневые хаки и кучу нечитаемой грязи ))
аннлн
да я бы не сказал, что всё сильно плохо
аннлн
аннлн
драйвер на сях, очевидно
Snusmumriken
Ну вот я про то.
Карочи, чтобы снаружи было всё красивенько, грязь должна быть где-то в глубине. Это такое правило размазывания грязи по исходному коду.
Красивости как правило достигаются хаками "чтобы вон там снаружи было красиво".
аннлн
чорт
Snusmumriken
https://github.com/tarantool/pg/blob/master/pg/init.lua оригинал
аннлн
я не знаю, что курили в мейлсру
Snusmumriken
Блен, мне вот это вот нравится.
Есть огромный концерн с кучей отделов. Один отдел обсренькался (дизайн и маркетинг) — и весь концерн поливается какахами, вне зависимости от.
Ну, это всё равно что высказывания в духе "в европе одни гомосексуалисты, вон, гей-парады проводят" ))
Мейлру — точно такая же компания как и яндекс. Просто с другой ЦА и долбанутым маркетингом. И они делают нормальные продукты, в т.ч. тарантул.
аннлн
собственно, их поделку пришлось перепиливать буквально с нуля
аннлн
поэтому я и ковыряю чейчас всякие там потоки и прочую системщину
аннлн
всё же апстримом хочется иметь lua, а не мейлрушное поделие, которое даже не собирается (!!!)
Snusmumriken
Я собирал по оф-инструкциям, собралось. На бубунте ))
Korsar
Snusmumriken
Давай уж сразу толерастов.
аннлн
выключите этого бота, блин :c
Snusmumriken
Нет
Snusmumriken
если ещё и запустишь официальный™ пример: https://github.com/tarantool/http#working-with-stashes — подарю 0.01 BTC!
аннлн
(спойлер: httpd:route(...) = attempted to call nil value)
аннлн
(спойлер2: это будет работать с модулем конкретной версии, http-1.1.0-1)
Snusmumriken
Ага
аннлн
(спойлер3: об этом написано примерно нигде.)
аннлн
git log, чо.
Timur
аннлн
зачем отдельно объекты connection_pool и connection
аннлн
ЧТОААААААА
Snusmumriken
Ну смотри. У нас есть пул соединений. В нём содержатся соединения.
И есть само соединение ))
Snusmumriken
return setmetatable({ -- connection variables host = opts.host, port = opts.port, user = opts.user, pass = opts.pass, db = opts.db, size = opts.size, conn_string = conn_string, -- private variables queue = queue, usable = true }, pool_mt)
Snusmumriken
Ты можешь присылать ссылки в виде "кода" типа "http://url.com". Не будет блочить.
аннлн
local SQL_PARAMS = {host = '127.0.0.1', port = 5432, user = false, password = false, dbname = false, sslmode = 'disable'}
for param,default in pairs(SQL_PARAMS) do conn_string = (opts[param] or default) and string.format("%s%s='%s' ", conn_string, param, opts[param] or default) or conn_string end
аннлн
не?
аннлн
Snusmumriken
Можно так, можно так.
аннлн
аннлн
я понимаю, что можно так, а можно так
аннлн
но блин, зачем
Snusmumriken
Вот тут уже пошли философские вопросы
Timur
всё еще не понимаю природы претензий - пока одна вкусовщина
Timur
и когда ты пишешь код в большой команде или Open-source проекте - ты пишешь "для того парня".
Максимально простым способом
Snusmumriken
И довольно разреженно, подробно, с минимумом вложенностей и колбеков. Максимально прямо, чтобы не дай бог не запутались.