Size: a a a

2021 March 05

ИМ

Игрь Минеев... in Tarantool
А если хочется посмотреть что из самой луа чаще исопльзуется внутри?
Разве нет никакой статистики встроенной в тарантул луа?
источник

ИМ

Игрь Минеев... in Tarantool
И еще сложный вопрос. before_replace он ведь работает только на новые изменения? Как чекать при перезапуске, что все записи удовлетворяют заданному предикату?
Хочется три шага
1) Чекнуть что все ок, удалив ненужные
2) Поставить before_replace
3) Включить репликацию с других нод

Так ведь можно?
Не очень понимаю где на это смотреть с точки зрения once и применения настроек
источник

VG

Vladislav Grubov in Tarantool
Триггеры можно поставить до поднятия из снапшота, но только в 2.х+
источник

MF

Michael Filonenko in Tarantool
Игрь Минеев
А если хочется посмотреть что из самой луа чаще исопльзуется внутри?
Разве нет никакой статистики встроенной в тарантул луа?
сам тарантул не пишет
сложившейся практики по перфу луа пока нет
источник

VG

Vladislav Grubov in Tarantool
Игрь Минеев
И еще сложный вопрос. before_replace он ведь работает только на новые изменения? Как чекать при перезапуске, что все записи удовлетворяют заданному предикату?
Хочется три шага
1) Чекнуть что все ок, удалив ненужные
2) Поставить before_replace
3) Включить репликацию с других нод

Так ведь можно?
Не очень понимаю где на это смотреть с точки зрения once и применения настроек
Это будет выглядеть как-то так:

local function my_trigger()
   -- do what you must
end

local my_space = 'space_name'

box.ctl.on_schema_init(function()
   box.space._space:on_replace(function(prev, sp)
       if sp.name == my_space then
           box.on_commit(function()
               rawset(_G,
                   'my_space_before_replace',
                   box.space[my_space]:before_replace(
                       my_trigger,
                       rawget(_G, 'my_space_before_replace')
                   )
               )
           end)
       end
   end)
end)
источник

MF

Michael Filonenko in Tarantool
Vladislav Grubov
Это будет выглядеть как-то так:

local function my_trigger()
   -- do what you must
end

local my_space = 'space_name'

box.ctl.on_schema_init(function()
   box.space._space:on_replace(function(prev, sp)
       if sp.name == my_space then
           box.on_commit(function()
               rawset(_G,
                   'my_space_before_replace',
                   box.space[my_space]:before_replace(
                       my_trigger,
                       rawget(_G, 'my_space_before_replace')
                   )
               )
           end)
       end
   end)
end)
лущ проверить что спейс инсертиться, чтобы случайно на альтерах не понаставлять лишних триггеров
источник

VG

Vladislav Grubov in Tarantool
я поэтому rawset/rawget использую :)
источник

MF

Michael Filonenko in Tarantool
ок
источник

ИМ

Игрь Минеев... in Tarantool
Vladislav Grubov
Это будет выглядеть как-то так:

local function my_trigger()
   -- do what you must
end

local my_space = 'space_name'

box.ctl.on_schema_init(function()
   box.space._space:on_replace(function(prev, sp)
       if sp.name == my_space then
           box.on_commit(function()
               rawset(_G,
                   'my_space_before_replace',
                   box.space[my_space]:before_replace(
                       my_trigger,
                       rawget(_G, 'my_space_before_replace')
                   )
               )
           end)
       end
   end)
end)
А как это полечит уже существующие записи в БД?
Если вдруг они перестали удовлетворять предикату
источник

VG

Vladislav Grubov in Tarantool
Игрь Минеев
А как это полечит уже существующие записи в БД?
Если вдруг они перестали удовлетворять предикату
во время рекавери (поднятия снапа и xlog'ов), вызывается триггер before_replace, в принципе, вы можете в нем поменять данные (например скипнуть какое-то количество транзакций, сделать свою валидацию).
Важно только помнить, что изменения, сделанные в этом тригере во время рекавери не будут писаться в журнал. Но после поднятия можно будет сделать box.snapshot
источник

VG

Vladislav Grubov in Tarantool
но я даже не знаю кому это вообще пригодится, кроме как для очень сложного восстановления после аварии. Потому что по сути, такой подход обнуляет консистентность
источник

ИМ

Игрь Минеев... in Tarantool
Мне достаточно их обнулить (set nil).
источник

ИМ

Игрь Минеев... in Tarantool
если она уже сейчас не удовлетворяет предикаату, то никогда больше и не будет. Так что при повторном запуске снова отсеится. Спасибо
Сделаю еще доп снепшот
источник

VG

Vladislav Grubov in Tarantool
Игрь Минеев
А если хочется посмотреть что из самой луа чаще исопльзуется внутри?
Разве нет никакой статистики встроенной в тарантул луа?
м, ну в принципе, можно использовать debug.sethook(my_lua_trigger, "c") он позволит отлавливать вызовы луашных функций. Но я бы не рекомендовал его включать на проде, и не уверен, что луаджит его не скорит
источник

ИМ

Игрь Минеев... in Tarantool
Vladislav Grubov
м, ну в принципе, можно использовать debug.sethook(my_lua_trigger, "c") он позволит отлавливать вызовы луашных функций. Но я бы не рекомендовал его включать на проде, и не уверен, что луаджит его не скорит
О, спасибо, попробуем. Нет, в проде никто не будет выставлять)
источник

VG

Vladislav Grubov in Tarantool
Игрь Минеев
О, спасибо, попробуем. Нет, в проде никто не будет выставлять)
загляните вот сюда тогда: https://www.lua.org/pil/23.2.html
источник

MA

Mons Anderson in Tarantool
R-omk
ну создаете пул воркеров которе будет отправлять запросы,  сколько одновременно воркеров столько и запросов одновременно будет пытатся отправлять,   начнет тупить  значит нужно уменьшать количество воркеров и   добавлять репликасеты в шардинг .. вот и вся математика
мы по такой схеме используем moonlibs/xqueue с воркерами на lua
в принципе при раобте с https хватает где-то 10 воркеров
источник

ИМ

Игрь Минеев... in Tarantool
tarantool.error.SchemaReloadException: b'Wrong schema version, current: 1, in request:  78'

Может я не понимаю как работают encodings в tarantool для python3

У меня есть бинарное поле, которое хочу получить. Видимо если я прописываю ecoding=None, то нужно каждый call хитро оборачивать что ли и вызывать encode?

Нельзя на конкретный call это выключить?


Ну и да, изначально проблема была в
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 0: invalid start byte



(смотрел вот это: https://github.com/tarantool/tarantool-python/issues/105)



UPD: Обновился до 0.7.1 и зарабатало, спасибо
источник

AT

Alexander Turenko in Tarantool
Да, с получением проблемы решили.
источник

AT

Alexander Turenko in Tarantool
Вот над отправкой надо думать, руки до этой задачи не доходят.
источник