Size: a a a

2020 July 01

YS

Yura Sokolov in Tarantool
vpol
ну так я про то же. накрутили бы сходу всякого, уже не был бы такой простой.
Я ж не про интерфейс, а про внутреннее устройство.
Да и интерфейс... вот он Resp3 делал. Почему не добавить в протокол id запроса? Хотя бы опциональную? Вот это уже сказывается ограниченность мышления.
источник

v

vpol in Tarantool
> Attribute type?
источник

YS

Yura Sokolov in Tarantool
Из внутреннего устройства, например:
- компактное представление для hash и list есть, а для set - нет. Т.е. маленький хэш может в виде линейного блоба храниться, без оверхед в 56 байт на элемент, а set только в виде хэш-таблицы (которая отвратительна)
- ttl элемента хранится не в самом элементе, а в отдельной хэш-таблице. + 56 байт на каждый элемент. + поход в ещё одну хэш-таблицу, чтобы проверить expiration. (А в нашем случае использования, значений без TTL вообще нет)
- в кластере чтобы держать список ключей в слоте, используются ещё одна хэш-таблица (правда с другим устройством). И ее тоже нужно мантейнить.
- expiration сделан рандомом. В итоге, какие-то значения залипают очень надолго.
- все бы ни чего, но если он решает по-эвиктить, то все может начать резко тормозить. Потому что если вставляется большой кусок, то ему приходится много мелких эвиктить. Не знаю, правда, как это решать :-( В memcached вытесняются сразу такого же размера. Кому-то это не нравится, зато тупняков нет. Как это в общем случае реализовать, не знаю. ) Можно было бы не тупить сразу, а пытаться дочистить потом; типа кроме max_memory иметь ещё real_max_memory. По max_memory начинать eviction, а тупить по real_max_memory.
- кластер... делает вид, что работает. На практике год назад разваливался от любого неосторожного приседания. Заслал им тестов и корявых фиксов. Тесты не приняли, сказали «мы тут на Ruby хотели переписывать тесты, потому пока не возьмём». Что-то починили, но из четырёх тестов один все ещё падает. В итоге, у нас в проде редис с костылём в этом месте.
источник

YS

Yura Sokolov in Tarantool
Для меня Redis и MongoDB (по крайней мере, в ее прошлом) - яркий пример, что для популярности продукт должен иметь простой интерфейс и делать вид, что работает. Как он внутри устроен - пофиг. На сколько он на самом деле надёжен - если ломается реже раза в квартал, то пофиг (а то и раза в месяц).
источник

YS

Yura Sokolov in Tarantool
Сейчас MobgoDB хорошо так подтянулся. По крайней мере, давно привычный функционал работает, репликация а-ля raft работает. Шардирование, если периодически скрещивать пальцы, работает.
источник

YS

Yura Sokolov in Tarantool
Вот может теперь и редис подтянется.
источник

v

vpol in Tarantool
все ломается. для меня главный вопрос - как ломается.
источник

KO

Konstantin Osipov in Tarantool
может хватит уже здесь редис обсуждать? никуда он не подтянется. у каждого проекта есть жизненный цикл свой и вера в то что он не зависит от мейнтейнера наивна.
источник

YS

Yura Sokolov in Tarantool
Konstantin Osipov
может хватит уже здесь редис обсуждать? никуда он не подтянется. у каждого проекта есть жизненный цикл свой и вера в то что он не зависит от мейнтейнера наивна.
Но зависимость может быть и отрицательной. Есть dependency, а есть addiction.
Redis Lab ведь есть. Деньги с редиса потихоньку стригут. Глядишь и не забросят. А там, конечно, видно будет, останется redis "на поддержке", или будет развиваться.
источник

KO

Konstantin Osipov in Tarantool
редис безусловно будет развиваться, но возможности по его развитию в первую очередь ограничены его моделью данных и самой идеологией простоты.
источник

KO

Konstantin Osipov in Tarantool
нельзя развиваться и накручивать новые фичи если ты хочешь оставаться простой базой. превратишься в монстра.
источник

KO

Konstantin Osipov in Tarantool
поэтому сальваторе и ушёл я думаю, редис во многих смыслах - готов, он хорош для своих целей, а развивать его - только портить.
источник

AP

Andrey Privalov in Tarantool
Dmitry Sharonov
если он потом никогда не меняется то збс
дада, все так
источник

AP

Alex Pristenskiy in Tarantool
Всем привет. Вроде просто должно быть, а не могу сообразить: есть GeoIP база (free, open) с подсетями и надо по IP находить какая подсеть (откуда пришли, страна, город - всё там есть)
Нашёл библиотеку https://github.com/hamishforbes/lua-resty-iputils , попробовал вручную в Tarantool - функции работают как надо. В базе же хочется 2 поля сделать: 1-е поле начало подсети, а 2-е поле - окончание подсети (parse_cidr как раз даст эти 2 номера при импорте из CSV), вот не пойму как сделать select() по 2-м разным полям чтобы число было больше 1-го и меньше 2-го поля одновременно?
источник

AP

Alex Pristenskiy in Tarantool
ну не все же 4млрд IPv4 загонять туда в одно поле.... 😊
источник

AP

Alex Pristenskiy in Tarantool
в базе в CSV первое поле задано подсетью вот так типа: "1.228.12.0/23"
источник

AP

Alex Pristenskiy in Tarantool
может кто GeoIP базы в Tarantool помещал и резолвил IP -> геоданные ?
источник

AP

Alex Pristenskiy in Tarantool
или просто сделать 1 ключевое поле и делать на 1 подсеть 2 инсерта и между ними искать (но надо итератор чтобы был типа between) ?
источник

AP

Alex Pristenskiy in Tarantool
localhost:9001> ip.parse_cidr("1.0.0.0/24")
---
- 16777216
- 16777471
...

localhost:9001> ip.parse_cidr("1.0.1.0/24")
---
- 16777472
- 16777727
...
источник

AK

Alexey Kuzin in Tarantool
Андрей Сыврачев
И как наиболее эффективно забюзать ядра? Для сети ведь есть boost::asio с пулом потоков, тут как то на фиберах это сделать. Сетевой поток чтобы много коннектов обрабатывал.
Сетевой поток в Тарантуле работает в асинхронном режиме и обрабатывает много коннектов. Достаточно эффективно, если этим правильно пользоваться. Под капотом там curl
источник