Size: a a a

2021 May 31

AL

Andrey L in Tarantool
ну да, не сама - это понятно
источник

AL

Andrey L in Tarantool
ну т.е. если конец функции - конец обслуживания запроса клиента, то всё ровно? содержимое res копирнется до переключения на другой файбер?
источник

VG

Vladislav Grubov in Tarantool
ага, мы даже где-то это использовали. Но тут одна ошибка и ты ошибся, очень опасная оптимизация
источник

AL

Andrey L in Tarantool
а детали какие-нибудь? :)
источник

VG

Vladislav Grubov in Tarantool
Если эту функцию или обвязку вокруг будет кто-то дорабатывать, то легко прийти к ситуации, в которой гонка случится. Можно попытаться закрыться луа-мьютексом, но тогда из-за gc вы потеряете выигранный перф.

В целом, я бы предложил использовать require "table.new" -- он позволяет аллоцировать сразу необходимое количество слотов в таблице, чтобы избежать реаллокаций, и, возможно, если очень-очень нужно, пул таблиц, которые очищаются при возврате в пул.

Плюс к этому, дополнительно обложиться замерами таймингов выполнения, что оптимизация реально что-то дает
источник

AL

Andrey L in Tarantool
спасибо
источник

ЕК

Евгений Кривошлыков... in Tarantool
Схема на mysql меня устраивает всем, кроме быстро действия. При работе в 20 потоков база начинает жутко тормозить. В памяти данные или на жёстком диске не критично лишь бы работало
источник

ЕК

Евгений Кривошлыков... in Tarantool
Плюс нравится возможность писать на си логику приложения максимально близко к данным. Хотел бы часть логики которую сейчас делается отдельно перенести в базу
источник

ЕК

Евгений Кривошлыков... in Tarantool
Часто меняются битовые маски, числовое поле grow и строковое list
источник

AK

Alexey Kuzin in Tarantool
Приложение написано на C?
источник

AK

Alexey Kuzin in Tarantool
В общем, я пока предлагаю посмотреть на примеры настройки кэша по той ссылке, что я скидывал. Можно будет хранить не весь кэш, а обновлять время доступа к записям и удалять "холодные" записи, то есть кэш с вытеснением (eviction). По характеру наполнения выглядит как read-through cache (первый запрос через базу, последующие в кэш + операции расчёта в Тарантуле).
источник

AK

Alexey Kuzin in Tarantool
20 потоков на запись или на чтение? Как распределяется нагрузка на чтение и запись?
источник

ЕК

Евгений Кривошлыков... in Tarantool
Запись / Чтение = 50 / 50
источник

ЕК

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

AK

Alexey Kuzin in Tarantool
Тогда write-behind
источник

AK

Alexey Kuzin in Tarantool
Для такого использования можно реализовать операции перемещения данных на нижние слои, работать с данными непосредственно в тарантуле + в процессе перемещения будет происходить вытеснение в MySQL + read-through кэш для данных с нижних уровней, к которым идёт частое обращение
источник

ЕК

Евгений Кривошлыков... in Tarantool
Спасибо. Возможно это то, что мне нужно. Попробуй почитать подробеее.
источник

n

n1 in Tarantool
Я плох в сравнениях БД, но точно ли тарантул тут нужен? Может другие какие-то, как я понимаю это не принципиально
источник

AK

Alexey Kuzin in Tarantool
Окей, какие есть варианты?
источник

AK

Alexey Kuzin in Tarantool
По крайней мере, с помощью Тарантула можно решить эту задачу, и как выяснилось, просто дисковая база не подходит, а просто хранить всё в памяти тоже не получится.
источник