Size: a a a

2020 November 06

KN

Konstantin Nazarov in Tarantool
он интересный и частый
источник

Д

Дмитрий in Tarantool
Konstantin Nazarov
возможно вы просто обойдетесь  шардированным спейсом. но в любом случае — задайте вопрос на SO
Вопрос задал на SO. Выше ссылку кинул. Про поход в сеть вопрос хороший, ответа у меня нет, не замерял. Ранее с Ignite сталкивался, там была возможность спейсы дублировать по шардам. Т.е. там такая практика была вполне хорошей, но тут система иная, и тут может быть всё совсем не так конечно.
источник

VG

Vladislav Grubov in Tarantool
Дмитрий
Такой вариант тоже есть (одна из моделей). Но хотел попробовать еще когда общий слой размазан по всем, тогда, доступ к данным будет локальный, даже если узлы на разных машинах... по идее должно давать профит на сетевых хождениях, но это не точно. Возможно тут я вообще не прав и так не делают в Tarantool.
по правде говоря, решение упирается в то, насколько часто обновляются ваши словари, и насколько критично читать устаревшие данные.
если данные меняются часто, и читать устаревшие данные можно не более нескольких секунд, лучше вынести в отдельный репликасет тарантулов. если данные меняются пару раз в час, пачками, и можно читать устаревшие данные на несколько минут в прошлом, то можно создать обычные спейсы в каждом шарде, и map-запросами раскидывать в них данные с роутеров.

Можно раскидывать данные с выделенного стораджа, который будет ходить по остальным стораджам и актуализировать спейсы.

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

CC

Chris Calvin 🦖 in Tarantool
Yaroslav Dynnikov
мы думали про обновление, сделали даже пр, но мержить не стали. изменений много, а польза не очевидна. да к тому же разговоры про х2о масла в огонь подливают
Понял, спасибо. Видимо придется жить на своем форке....
источник

Д

Дмитрий in Tarantool
Vladislav Grubov
по правде говоря, решение упирается в то, насколько часто обновляются ваши словари, и насколько критично читать устаревшие данные.
если данные меняются часто, и читать устаревшие данные можно не более нескольких секунд, лучше вынести в отдельный репликасет тарантулов. если данные меняются пару раз в час, пачками, и можно читать устаревшие данные на несколько минут в прошлом, то можно создать обычные спейсы в каждом шарде, и map-запросами раскидывать в них данные с роутеров.

Можно раскидывать данные с выделенного стораджа, который будет ходить по остальным стораджам и актуализировать спейсы.

Решение с отдельным репликасетом, с точки зрения разработки и поддержки будет проще, но запросы будут немного медленее. В конце концов, на стораджах можно реализовать спейс-кеш, который будет актуализироваться из репликасета со словарем. Нужно бенчить под ваш кейс, короче
Да, согласен, надо замерять будет. Скорее всего будем выносить все же в отдельный репликасет. Единственное не до конца понимаю, что такое спейс кэш?
источник

VG

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

Д

Дмитрий in Tarantool
Спасибо. Теперь понятно.
источник

S

Sergey in Tarantool
Добрый вечер!
Простой вопрос, имхо, не для SO.

box.space.extensions.index.secondary:select(
       {city, 0},
       {limit=1}
   )
запрос возвращает 1 запись по порядку, как они добавлены в спейс, а хочется случайности.

в доке нашел только такой вариант, но нужен запрос с условиями
box.space.tester.index.secondary:random(1)
источник

EL

Eugene Leonovich in Tarantool
> Простой вопрос, имхо, не для SO.
не бывает таких вопросов
источник

AK

Alexey Kuzin in Tarantool
Sergey
Добрый вечер!
Простой вопрос, имхо, не для SO.

box.space.extensions.index.secondary:select(
       {city, 0},
       {limit=1}
   )
запрос возвращает 1 запись по порядку, как они добавлены в спейс, а хочется случайности.

в доке нашел только такой вариант, но нужен запрос с условиями
box.space.tester.index.secondary:random(1)
Ну ок, сделайте select с условиями, а потом из получившегося списка туплов возьмите рандомный элемент по индексу
источник

DS

Dmitry Sharonov in Tarantool
offset=math.random(0, box.space.extensions.index.secondary:count({city, 0}))
источник

AK

Alexey Kuzin in Tarantool
Ну не, с офсетом как-то не то
источник

AK

Alexey Kuzin in Tarantool
У тебя сложность будет квадратическая, в отличие от взятия по индексу из таблицы
источник

DS

Dmitry Sharonov in Tarantool
зато я не выгружаю резалтсет в луа
источник

S

Sergey in Tarantool
Почему с оффсетом не то?)
источник

AK

Alexey Kuzin in Tarantool
Ну можно зашардировать и вычислять сначала рандомный бакет, а потом выгружать только этот бакет :)
источник

S

Sergey in Tarantool
Eugene Leonovich
> Простой вопрос, имхо, не для SO.
не бывает таких вопросов
источник

S

Sergey in Tarantool
Alexey Kuzin
Ну можно зашардировать и вычислять сначала рандомный бакет, а потом выгружать только этот бакет :)
у меня еще 2 ключа
источник

S

Sergey in Tarantool
в M это так ORDER BY NEWID(), может на SQL переписать вместо lua?
источник

S

Sergey in Tarantool
Alexey Kuzin
Ну ок, сделайте select с условиями, а потом из получившегося списка туплов возьмите рандомный элемент по индексу
limit=1
у меня 1 тупл в результате всегда
источник