Как стать автором
Обновить

Вектор енумов. С чем мы сталкиваемся в разработке

Время на прочтение 8 мин
Количество просмотров 10K
Всего голосов 32: ↑30 и ↓2 +28
Комментарии 14

Комментарии 14

Нифига не понятно, но очень интересно

Вектор енумов

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

Но ведь и для хранения любых других сущностей нужно подбирать контейнер, исходя из конкретного сценария. Хочешь быстро искать — делай маску, хочешь перебирать — массив или всё-таки вектор, если речь о мультимножестве.
Так что это больше похоже на выбор между отвёрткой и гаечным ключом, чем на построение велосипеда :)

И для быстрого поиска, и для перебора подойдет один int. Поиск можно делать через битовый &, перебор - через перебор значащих единиц в двоичном виде, который наверняка можно сделать через sse какой-нибудь, а потом кастуя к enum

Вроде как идеологически тут просится std::set. Но он, как и вектор, будет с динамическим хранилищем. Ну а если точно известно, что этих возможных значений немного — то старые добрые битовые флаги в int64 вполне подойдут…
Есть ещё всякие SmallVector'ы которые при малом размере хранят данные inline и прибегают к куче только когда значений много
А как вышло, что хеш, деленный на 300, всегда попадал в одно и то же место?
Если я правильно понял, при делении на шарды не было учтено, что все значения будут из диапазона от 0 до 299, и на триста равных диапазонов поделили весь диапазон до INT_MAX. И все значения попадали в первый из них.

В видео на удивление более понятно объясняется, YDB имеет некоторый идентификатор запроса в зависимости от которого происходит распределение по шардам, разработчик же зная количество шардов решил давать идентификаторы запроса в диапазоне от 0 до 300 (деля хеш на 300), но не учел, что ydb самостоятельно распределяет данные на шарды, деля целочисленные идентификаторы на равномерные диапазоны 0-12млн, 12-24 и тд

Футбольная команда:

1) Вектор Енумов

2) Откус Байтов

3) Инсëрт Игноров

4) Свобод Ресурсов

5) Шард Тресну́во — иностранный тренер.

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

Публиковать плейлист на ютубчике под видом статьи это свинство, господа.

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

Ага, за последние годы автоинкремента у нас стало на порядок меньше.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.