Size: a a a

2021 January 15

R

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

DK

Dmitry Krokhin in Tarantool
Eugene Leonovich
только я это к тому что
$client->batch(function() {
  $this->call('func1');
  $this->call('func2');
});
не очень подходит для такого кейса
не подходит.. но слать батчи в разные коннекты возможно будет противоречить например интерактивным транзакциям, а они вроде как вот-вот дошли подоспеть) мы многое переделали надеясь что потом всё обернётся в такую транзакцию.
источник

DK

Dmitry Krokhin in Tarantool
Eugene Leonovich
нужно держать это в голове либо какой то явный апи для батчинга придумывать
мне кажется что да - батчинг это какая-то отдельная подсистема и было бы классно подсмотреть как это реализовано для других платформ, потому что с ходу ничего такого не припоминаю, только что-то вроде unit of work
источник

EL

Eugene Leonovich in Tarantool
я посмотрел, у всех по разному, у кого то это явный батчинг, у когото неявный спрятанный за стандартным апи
источник

R

R-omk in Tarantool
ща отправлю пример как у нас кое где сделан батчинг для сфинкса , там sql
источник

R

R-omk in Tarantool
R-omk
ща отправлю пример как у нас кое где сделан батчинг для сфинкса , там sql
источник

R

R-omk in Tarantool
тоесть на одном  $sph можно породить много запросов, но конечный резолвинг     происходит в момент foreach ($r as $row) {
источник

EL

Eugene Leonovich in Tarantool
ну и у меня сейчас так:

for ($i = 0; $i < 1_000_000; ++$i) {
   $result[] = $client->evaluate("return $i");
}
источник

EL

Eugene Leonovich in Tarantool
но минус этого api я описывал выше с try/catch
источник

R

R-omk in Tarantool
единственное что нужно учесть возможность явного выполнения  для функций которые не подразумевают возврат результата... иначе последнее место где можно выполнить запрос - в деструкторе объекта клиента
источник

EL

Eugene Leonovich in Tarantool
угу, есть такая возможность
источник

EL

Eugene Leonovich in Tarantool
и в деструкторе тоже вызывается
источник
2021 January 16

VS

Vladislav Shpilevoy in Tarantool
R-omk
по теме: Consistent Map-Reduce in vshard

https://github.com/tarantool/vshard/discussions/261

@olegrok  @gerold103


Нужно предусмотреть возможность включения pin  не только при вызове со стороны роутера, но и непосредственно с самого репликасета.

Сценарий может быть такой :
Файберы на репликасетах получают задания из системы событий (внутренней или внешней это неважно) и понимают что на время обработки события нужно залочить все перемещения бакетов, например это может быть полезно для миграций , когда нужно все существующие и вновь приходящие данные обработать; при этом может понадобиться согласование с остальными репликасетами, но опять же это можно сделать и через внешний стейт менеджер, лишь бы была возможность взять pin и не отпускать его ни в коем случае пока явно не будет сигнала... Это может показаться похожим на двухфазное отключение шедулера и затем двухфазное включение, но это не совсем так... скорее это двухфазное снятие пинов

Другой пример использования:
(такое могло бы быть применимо в crud )
ситуации когда   tuple-merger невозможно использовать из за мультикей индексов или  когда вообще нужен курсор и сортировка не по текущим индексам,  в таком случае должна использоваться техника временных таблиц, при которой каждый воркер map скрринит данные в своем репликасете в тот момент когда ему удалось взять pin и затем отправляет во временное хранилище для reduce и сортировки,  после чего уже роутер может  свободно по курсору отдавать данные;  тоесть это такой асинхронный подход когда  момент принятия заявки на map reduce может не совпадать с моментом его фактического исполнения.

что касается решения map reduce в лоб  то не совсем ясно как использовать курсор в случае работы с mcallrw ,  ведь все время пока не вышел таймаут и курсор не закрыт   нужно держать пины на шардах ,   скажем  как  клиенту имея уже открытый курсор  делать последовательные запросы к роутеру для получения следующей порции данных...  
выходит что нужно держать пины открытыми  пока все выполнится.

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

===

Кроме того, было бы не плохо  сделать систему триггеров или хуков, для случая когда шедулер запланировал перемещения  чтобы он мог посигналиить и "мягко" попросить  по возможности завершиться фоновым таскам и снять пины.

хотелки:
Такая же система хуков или триггеров нужна и при смене rw - ro , нужно иметь возможность "попросить "  снять  ref rw,  но об этом я много писал в тикетах vshard...
То же самое и о процессе выключения , тоесть при переходе из ro  в ничто ,   нужно иметь возможность дождаться снятия pin и ref     предварительно "предупредив " о скором завершении.

На текущий момент  по факту все переключения rw- ro       и   выключения - это жесткое отрубалово вместо реджекта вновь прибывших и ожидания завершения текущих.
Я обновил обсуждение и поотвечал там же в комментах
источник

R

R-omk in Tarantool
Vladislav Shpilevoy
Я обновил обсуждение и поотвечал там же в комментах
ща гляну
источник

РС

Роман Степанов... in Tarantool
Доброго времени суток друзья!
Заказ на создание курсов от ООО «Кодебай»
Предложения принимаются до 14.02.2021
Приглашаем к сотрудничеству как отдельных специалистов, так и команды.
- Будьте готовы подтвердить свою экспертность. Опыт работы в сфере ИТ/ИБ от 5 лет.
- Если решите возглавить создание курса, но у вас нет команды, поможем найти помощников.
- Если команда не нужна, тоже не проблема.
За каждый курс создатель или команда получают 300 000 - 1 000 000 руб, в зависимости от объема и сложности работ. Оплата по факту 100% готовности курса. После создания курса, при желании, можно оказывать услуги инструктора своего курса.
Каждый курс должен состоять из теории и практики. Теория в тексте + видео в записи. Озвучку роликов берем на себя, если с голосом "не очень" :).
В выборе тематики курса не ограничиваем. Уже созданные курсы можно посмотреть по ссылке: https://school.codeby.net/lms.html
При отклике сразу присылайте резюме и план курса.
https://freelance.codeby.net/orders/zakaz-na-sozdanije-kursov-ot-ooo-kodebaj-214.html
источник

MA

Mons Anderson in Tarantool
Хм. Вроде и спам, но в то же время вроде и прикольный :)
источник

МК

Максим Кобылинсикий... in Tarantool
День добрый,  а есть возможность сделать выборку с использованием двух ключей?
источник

VG

Vladislav Grubov in Tarantool
Максим Кобылинсикий
День добрый,  а есть возможность сделать выборку с использованием двух ключей?
если только:
local tuple1, tuple2 = box.space.myspace:get(key1), box.space.myspace:get(key2)

но если вы про композитный индекс, то все же так:
local tuple = box.space.myspace:get({key1, key2})
источник

МК

Максим Кобылинсикий... in Tarantool
Vladislav Grubov
если только:
local tuple1, tuple2 = box.space.myspace:get(key1), box.space.myspace:get(key2)

но если вы про композитный индекс, то все же так:
local tuple = box.space.myspace:get({key1, key2})
Не совсем то, мне нужно, чтобы в одном кортеже присутствовали индексы с нужным значением)
источник

VG

Vladislav Grubov in Tarantool
Максим Кобылинсикий
Не совсем то, мне нужно, чтобы в одном кортеже присутствовали индексы с нужным значением)
то есть вы хотите, что-то типа: select * from "myspace" where "field1" == "key1" and "field2" == "key2"; ?
источник