powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Битовое поле плюсы и минусы
25 сообщений из 27, страница 1 из 2
Битовое поле плюсы и минусы
    #39987014
redsunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток,
Прошу совета у опытных людей, можете объяснить в чем плюсы и минусы храненния свойств класса в битовом поле. Есть класс у него допустим 30 полей, мне нужно добавить еще 10 и все они имеют тип boolean, я бы хотел засунуть их в битовое поле и хранить там, на бэке эти поля только хранятся в модели. А вся логика по тому чтобы разобрать что там лежит находится во фронте. Надеюсь понятно объяснил.
Почему возник вопрос. Я прикладной программист и дорабатываю ПО от одной галеры через их sdk для конкретного клиента, и вижу что у них иногда возникают похожие ситуации и они всегда добавляют 10 boolean полей к классу, вместо добавления 1 поля с битовым полем и хранения всех данных в нем.
...
Рейтинг: 0 / 0
Битовое поле плюсы и минусы
    #39987018
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redsunrise
Доброго времени суток,
Прошу совета у опытных людей, можете объяснить в чем плюсы и минусы храненния свойств класса в битовом поле. Есть класс у него допустим 30 полей, мне нужно добавить еще 10 и все они имеют тип boolean, я бы хотел засунуть их в битовое поле и хранить там, на бэке эти поля только хранятся в модели. А вся логика по тому чтобы разобрать что там лежит находится во фронте. Надеюсь понятно объяснил.
Почему возник вопрос. Я прикладной программист и дорабатываю ПО от одной галеры через их sdk для конкретного клиента, и вижу что у них иногда возникают похожие ситуации и они всегда добавляют 10 boolean полей к классу, вместо добавления 1 поля с битовым полем и хранения всех данных в нем.

Я так понимаю вопрос в принципе больше теоретический?

Чем проще код, тем проще его поддерживать и развивать, это тебе не C++ и драйверы.
BitSet предпочтителен только в двух случаях - перфоманс по расходу памяти(допустим у тебя миллиард этих объектов и тебе надо гонять все это по сети, тут конечно битсет будет в тему), перфоманс в каких-нибудь хитрых многопоточных алгоритмах, когда много булеанов не влезет в один кэш лайн, а биткарта влезет - но это тоже такое себе, только в крайнем случае. Ну еще некоторые алгоритмы аля BloomFilter могут использовать битсеты, но опять же ты говоришь что ты прикладник

В целом - можешь конечно изучить матчасть, это всегда полезно но в 99.999% это тебе просто не понадобится.
Если же твой случай - добиться латенси 100 мс вместо 150 - тогда да, может тебе такое и пригодится, но я думаю ты бы тогда о таком не спрашивал..
...
Рейтинг: 0 / 0
Битовое поле плюсы и минусы
    #39987024
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redsunrise,
Если прикладной код, то клас делаю БИЗНЕС СУЩНОСТЬЮ.
Поля там бизнес осмысленные.
Если набираем осмысленных прлей 50 штук, то будет 50 полей вида Да/Нет.
...
Рейтинг: 0 / 0
Битовое поле плюсы и минусы
    #39987282
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redsunrise
Доброго времени суток,
Прошу совета у опытных людей, можете объяснить в чем плюсы и минусы храненния свойств класса в битовом поле. Есть класс у него допустим 30 полей, мне нужно добавить еще 10 и все они имеют тип boolean, я бы хотел засунуть их в битовое поле и хранить там, на бэке эти поля только хранятся в модели. А вся логика по тому чтобы разобрать что там лежит находится во фронте. Надеюсь понятно объяснил.
Почему возник вопрос. Я прикладной программист и дорабатываю ПО от одной галеры через их sdk для конкретного клиента, и вижу что у них иногда возникают похожие ситуации и они всегда добавляют 10 boolean полей к классу, вместо добавления 1 поля с битовым полем и хранения всех данных в нем.

Плюсы у bitset есть - это экономия места.

Чтоб знать какая будет экономия внутри класса надо посмотреть через эту штуку https://stackoverflow.com/questions/9368764/calculate-size-of-object-in-java

Подозреваю что размер может зависеть от версии JVM и от производителя. Возможно в ранних версиях Java
boolean отображался на алгебраический int в момент выполнения калькуляций.
...
Рейтинг: 0 / 0
Битовое поле плюсы и минусы
    #39987283
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
16 boolean занимают прибл 32 байта в том числе и заголовок класса
...
Рейтинг: 0 / 0
Битовое поле плюсы и минусы
    #39987314
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redsunrise,

Есть смысл, если у тебя там 10+ миллионов объектов обрабатывается одновременно.
...
Рейтинг: 0 / 0
Битовое поле плюсы и минусы
    #39987325
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Массив Boolean, можно ещё попробовать. Для сравнения.
...
Рейтинг: 0 / 0
Битовое поле плюсы и минусы
    #39987377
redsunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ко всем Я не ищу профита в том чтоб увеличить производительность или что то оптимизировать. Моя цель минимизировать доработки во всех системах при обновлении(в частности добавлении новых полей bool типа, а в последнее время такая задача довольно часто возникает) Опишу подробнее архитекутуру чтоб было понятнее : Есть
  • "система 0" - фронт на react
  • "система 1" - бэк на java
  • "система 2" - БД внешней системы
  • "система 3" - сервис отдающий данные через api из "системы 2" , которые прилетают по запросу из "системы 1" и обновляют данные сущности в "системе 1"
Так вот в "системе 2" , атрибуты сущности бывает периодически меняются, эти новые атрибуты приезжают через "систему 3" не в виде отдельных полей, а в виде Integer поля в котором содержится значение всех атрибутов,
  • например пришло значение 10, а значения флагов такие:
    • 2 - это флаг 1
    • 4 - это флаг 2
    • 8 - это флаг 3
    то с помощью побитового И можно узнать, что пришли флаги 1 и 3. сейчас в "системе 1" эти же атрибуты разбиты на отдельные поля класса (так устроена модель у вендора ПО), но у меня есть возможность эту модель кастомзировать(расширять своими полями) теперь пример кейса доработки: допустим в "системе 2" была выполнена доработка добавлен какой то новый флаг например со - значением 16 - флаг 4 при данной доработке в "системе 3" не потребуется никаких изменений в модели, так как новый флаг будет приходить в уже существующем поле в виде нового значения (например 26 - это значит что пришли флаги 1,3,4) варианты моей доработки "системы 1" и "системы 0" :
      вариант 1 - в "системе 1" если хранить все атрибуты в отдельных полях, потребуется добавить новое поле для каждого нового флага(выполнить доработку модели + доработка десериализации данной модели "системы 1" ), при таком подходе доработки потребуются как в "системе 1" на бэке, так и в "системе 0" на фронте для отображения этих полей.
    вариант 2 - если же в "системе 1" хранить все атрибуты в одном поле, то при получении нового флага из "системы 3" , не потребуется доработок, так как значение этого поля просто пробрасывается через "систему 1" в "систему 0" где уже и происходит разбор поля и его отображения. варианту 1 (также как и вендор ПО), т.е. дорабатываю и бэк и фронт, но хотел бы отказаться от доработки бэка для данного кейса, а дорабатывать только фронт, по варианту 2 . Но как писал PetroNotC Sharp при этом варианте теряется бизнес осмысленность данных полей, с другой стороны она вроде как и не нужна(т.к. поля не несут никакой бизнес логики для "системы 1" , они нужны только для отображения их на фронте в "системе 0" ). Хотел все взвесить перед тем как вносить изменения, и понять что вроде как и при очевидных плюсов для себя, есть наверное и минусы подобного подхода(например нарушение какого нибудь паттерна), о которых и хотел узнать у сообщества.
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39987390
    PetroNotC Sharp
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    redsunrise,
    Вау, сколько понаписал то)).
    Опиши систему2.
    Не может бд светить своим портом наружу.
    Ну почти не может.
    А если не бд а сервис, то нафига вообще ее упомянул?
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39987391
    PetroNotC Sharp
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    redsunrise,
    Отдели крупно не твои ИС. Там где ты не можешь повлиять и переписать.
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39987393
    PetroNotC Sharp
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    redsunrise,
    Система0 и система1 действуют по РЕСТ.
    Ели типа ангуляр на фронте, то это БЛ на фронте. Шли туда биты. Нет проблем.
    Про реакт не знаю.
    Если БЛ на бэке, то никаких бит не должно быть. Делай фасад или перекодируй.
    Всё.
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39987404
    Фотография mayton
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Я не очень понял проблему автора. Вроде как есть несколько систем между которыми надо синхронизировать
    бизнес-сущности. Проблема стара как мир. Ее решают по разному.

    Ее можно решить кодо-генерацией. Но это надо обсуждать с командой. Обычно команда (по личному опыту)
    резко негативно относится к коду который в системе производится в фазе компилляции различными самодельными
    maven-plugins, хотя я считаю что это оптимальный подход в части простоты-качества. В этом-же генераторе
    можно оформить и битовые и булевые поля для всех систем сразу. Но должен быть единый репозитарий описания
    этих-же сущностей. Идеально если в JSON-формате. Тогда его можно будет передавать смежным специалистам
    из UI/BackEnd и никто не будет кричать что ему здесь непонятно и так далее.
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39987412
    PetroNotC Sharp
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    mayton,
    Проблема тут. Или может не проблема а фича:
    авторТак вот в "системе 2", атрибуты сущности бывает периодически меняются, эти новые атрибуты приезжают через "систему 3" не в виде отдельных полей, а в виде Integer поля в котором содержится значение всех атрибутов,
    например пришло значение 10, а значения флагов такие:
    2 - это флаг 1
    4 - это флаг 2
    8 - это флаг 3
    то с помощью побитового И можно узнать, что пришли флаги 1 и 3.
    То есть кто то не отправляет в другую систему осмысленные поля. А решил ради экономии все поля сжать и отправить хэш строкой))))
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39988023
    Фотография crutchmaster
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    redsunrise
    моя цель минимизировать доработки во всех системах при обновлении

    Тогда о каких bitset'ах может идти речь? В любом случае на жабке придётся делать get/set и название на каждый boolean, не будешь же ты передавать наружу всё это интом и тащить инфу о том, как этот инт парсить и какие там поля где. Хотя, кто тебя знает.
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39988305
    Фотография mayton
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Топик про рутину. Яж писал про это. И тех людей которым лень завести еще 1 getter я поддерживаю.
    Но я поддерживаю ту лень, которая приводит к какой-то автоматизации рутины.
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39988366
    вадя
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    а если перейти к практике - то в битах удобно хранить график дежурств на месяц
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39988374
    PetroNotC Sharp
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    вадя
    а если перейти к практике - то в битах удобно хранить график дежурств на месяц
    счас перейдем к сокетам)))
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39988377
    Фотография mayton
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    О битах можно говорить когда есть фаза интенсивной работы с битами. Причем со всеми сразу.

    Но эта задача не будет считаться решённой пока мы не придумаем как хранить биты в бд (да-да в бизнес коде все данные лежат в бд). И это - безкомпромиссно.

    Придумайте обобщенный способ хранения битсета в бд.
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39988380
    вадя
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    mayton
    Но эта задача не будет считаться решённой пока мы не придумаем как хранить биты в бд (да-да в бизнес коде все данные лежат в бд).
    смотря сколько бит надо хранить в одном поле - 64 без проблем
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39988393
    Фотография mayton
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Зачем 64? Бизнес хочет роста.
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39988400
    вадя
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    mayton
    Зачем 64? Бизнес хочет роста.
    когда будут 128 разрядные машины - тогда ....
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39988408
    Фотография mayton
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    вадя
    mayton
    Зачем 64? Бизнес хочет роста.
    когда будут 128 разрядные машины - тогда ....

    Не вижу связи. Криптография работает на 4096 битах как-то на текущем железе.
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39988410
    вадя
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    mayton
    Криптография работает на 4096 битах как-то на текущем железе.
    не надо путать сладкое и скользкое
    64 бита это одна операция or/and/xor
    если у тебя 4096 - это уже циклы... 64бит * 64
    это уже равносильно хранение boolean
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39988431
    Фотография mayton
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    вадя
    mayton
    Криптография работает на 4096 битах как-то на текущем железе.
    не надо путать сладкое и скользкое
    64 бита это одна операция or/and/xor
    если у тебя 4096 - это уже циклы... 64бит * 64
    это уже равносильно хранение boolean

    А кто вообще говорил про 1 операцию?

    Я спрашивал как генерализованной dbms хранить это? Как обновлять отдельные биты?
    ...
    Рейтинг: 0 / 0
    Битовое поле плюсы и минусы
        #39988445
    вадя
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    mayton
    Я спрашивал как генерализованной dbms хранить это?
    какие проблемы?
    хранить 64бита? bigint
    mayton
    Как обновлять отдельные биты?
    разве в субд нет битовых операций?
    ...
    Рейтинг: 0 / 0
    25 сообщений из 27, страница 1 из 2
    Форумы / Java [игнор отключен] [закрыт для гостей] / Битовое поле плюсы и минусы
    Целевая тема:
    Создать новую тему:
    Автор:
    Закрыть
    Цитировать
    Найденые пользователи ...
    Разблокировать пользователей ...
    Читали форум (0):
    Пользователи онлайн (0):
    x
    x
    Закрыть


    Просмотр
    0 / 0
    Close
    Debug Console [Select Text]