Size: a a a

2021 May 21

KO

Konstantin Osipov in Tarantool
и компакт всем индексам сделали?
источник

KO

Konstantin Osipov in Tarantool
вторичные ключи есть?
источник

V

Vladimir Malyutin in Tarantool
box.space.kvmStat.index.begin:bsize()                     24592417
box.space.kvmStat.index.kvmStatBeginIndex:bsize()         90137308
box.space.kvmStat.index.kvmStatLocationBeginIndex:bsize() 101330040
box.space.kvmStat.index.kvmStatLocationKvmIdIndex:bsize() 98113688
box.space.kvmStat.index.primary:bsize()                   72530354
источник

V

Vladimir Malyutin in Tarantool
compact выполнял, ничего не изменилось
источник

R

R-omk in Tarantool
по http client может кто подсказать?  в доке сказано что body - строка    

глобально цель такая -   писать большие пачки json  по http в CH  
собственно на всем этапе закономерно должны отсутствовать луашные стринги, иначе это труба.
т.е. сперва нужно как то json положить в буфер,  а потом буфер отправить через post
источник

VG

Vladislav Grubov in Tarantool
А как вы этот json получили? Или у вас луатаблица? Или тапл?
источник

R

R-omk in Tarantool
ну допустим тапл, это не принципиально ,  тут же цель избежать луашных строк
источник

R

R-omk in Tarantool
на самом деле без разницы, я в csv / tsv могу писать,     все равно нету  готового решения писать в беферы хоть json хоть произвольный стринг,    ну и отправлять потом.
источник

R

R-omk in Tarantool
может есть какая ниюбудь магия ffi  через которую все это можно провернуть
источник

VG

Vladislav Grubov in Tarantool
По сути, придется переписать

https://github.com/tarantool/tarantool/blob/e1b816582f0992c43737a9780d97091936ddceed/src/lua/httpc.c#L145

Есть буфера, можно свой собрать, но в конце все равно придётся сделать ffi.string(buf, len) — и это создаст одну луашную строку.
источник

R

R-omk in Tarantool
"создаст одну луашную строку."  ну это все равно лучше чем    сделать 100k  раз конкатенацию,   однако  сперва нужно в такой буфер чем то последовательно  писать
источник

VG

Vladislav Grubov in Tarantool
Есть buffer.ibuf:

https://www.tarantool.io/en/doc/latest/reference/reference_lua/buffer/

Тот, кто бегает по таплам, может туда аккуратно запихать. Но вообще, звучит как простенькая хранимка на С: собирает таплы, раскладывает sprintf'ом, возвращает буфер.

Из комьюнити: https://github.com/moonlibs/bin/tree/master
источник

R

R-omk in Tarantool
вижу есть table.concat   ,  но все равно жалко на каждую запись новую луашную строку создавать

может как нибудь можно через  format string   сразу в буфер форматировать строку?
источник

MA

Mons Anderson in Tarantool
Посмотри на bin
если чего-то не будет хватать, можно добавить
источник

R

R-omk in Tarantool
ну я бегло глянул,   как я вижу  в коре есть   специальный буфер уже на slab аллокаторе  , такой буфер    используется  например в msgpack encode
источник

MA

Mons Anderson in Tarantool
я bin делал по мотивам ibuf, но так, чтоб работало везде, а не только в tt старше определённой версии
источник

MA

Mons Anderson in Tarantool
для данной задачи вряд ли будет разница между слаб-аллокатором и malloc'ом
источник

R

R-omk in Tarantool
хм, я думал bin раньше чем ibuf появился
__

в любом случае  просто покажите мне как правильно на ffi    сделать sprintf  в буффер    с учетом переполнения возможного ,   и как это потом обратно в строку перегнать чтобы в curl post загнать


это пример как просто чето  копировать в ibuf

   local ptr = buf:reserve(#bytes)
ffi.copy(ptr, bytes, #bytes)
источник

MA

Mons Anderson in Tarantool
ffi.C.snprintf( buf:reserve(N), N, "format", ... )
источник

MA

Mons Anderson in Tarantool
--[[ If you need raw char data fro buffer, call :pv() ]]
local ptr,len = buf:pv()
local str = ffi.string(ptr,len)
источник