@dba_ru

Страница 517 из 718
Al
27.05.2018
15:34:40
не понятно стремление хранить именно как битовую маску

Sheldhur
27.05.2018
15:36:33
так я и не стремлюсь

я спрашиваю чё лучше

создать по отдельной колонке или хранить битовую маску

Google
Dmitrii
27.05.2018
16:01:53
А база то какая?

Sheldhur
27.05.2018
16:02:26
мускуль

Dmitrii
27.05.2018
16:02:36
Ой, все.

Sheldhur
27.05.2018
16:02:51
ой, всё

Dmitrii
27.05.2018
16:03:08
Там способов кроме как создавать колонки не существует

Я не уверен что ты не выстрелишь себе в ногу если будешь использовать битмаску.

Sheldhur
27.05.2018
16:04:03
ну есть ещё вариант с SET и JSON

Dmitrii
27.05.2018
16:04:12
На btree селективность битмаски будет плохая, а у постгреса есть оптимизации свои для ьитовых операций

А что, в MySQL уже можно делать индексы по JSON?

Только вот про вот эти виртуальные поля, и экстрактирования полей из JSON не надо сейчас.

Sheldhur
27.05.2018
16:06:26
ой всё

lost
27.05.2018
16:34:20
либо денормализация, либо битовая маска, либо eav, либо json вот тебе 4 стула

Dmitrii
27.05.2018
16:35:18
eav так вообще бутылка.

Google
lost
27.05.2018
16:35:56
ну каждый сам выбирает на что садиться

Al
27.05.2018
17:13:59
либо денормализация, либо битовая маска, либо eav, либо json вот тебе 4 стула
Да нормально все с битовыми масками. Просто разбирать маску нужно на стороне приложения. А хранить просто как число. И будет счастье

lost
27.05.2018
17:14:54
Так и не говорил что плохо)

Dmitrii
27.05.2018
17:40:37
Да нормально все с битовыми масками. Просто разбирать маску нужно на стороне приложения. А хранить просто как число. И будет счастье
И как же искать в базе по маске? Захерачивать в базу 255 возможных значений? (или сколько там увас бит, или валидных комбинаций)?

Al
27.05.2018
17:48:13
Что не устраивает?

Dmitrii
27.05.2018
17:50:19
Мой бит может быть установлен в составе другого или ещё шести в комбинации которой я ваще ниипу

Так как мне число то собрать я не понял

Что не устраивает?
Вы точно представляете себе как работает BIT_AND функции в базе данных?

Skench
27.05.2018
18:30:19
Добрый всем день, не хотелось бы изобреть велосипед со скриптами, написал чисто для отдела маленькую БД с лицензиями ПО, в связи с тем, что сотрудники часто меняются или переезжают между залами, есть ли в mysql возможность, чтобы рандом просили проверить актуальность записи в таблице рандомных строк, какими то средствами которые есть в mysql выходил запрос на актуализацию данных в таблице? Я не разработчик БД, если вопрос глупый прошу подсказать какими средствами можно это реализовать, объяснять полностью не нужно. Спасибо заранее всем.

lost
27.05.2018
18:58:57
Встроенный планировщик и скрипт который будет проверять expire

Dmitrii
27.05.2018
19:16:42
Это тоже можно посчитать
Каждая из сущностей хранит int, которое на самом деле битмаска: 10010000 = 144 10011001 = 153 01011001 = 89 Теперь мне надо найти все записи, у которых подняты биты под номерами 8, 5 и 4 и не содержит бита под номером 1. Интересно мне узнать, какое (какие)же числа вы поставите в WHERE часть...

Dmitrii
27.05.2018
19:18:55
Ыыыы. Подумай. Это очень просто
Ыыыы так покажи раз просто.

Al
27.05.2018
19:27:50
Ыыыы так покажи раз просто.
https://ru.m.wikipedia.org/wiki/Булева_алгебра

Dmitrii
27.05.2018
19:28:39


Типичный пример под номером 1.

Google
Dmitrii
27.05.2018
19:29:07
Вопрос то читали? Что будет в WHERE части.

Al
27.05.2018
19:31:07
Вопрос то читали? Что будет в WHERE части.
select * from test where value & conv('10', 2,10);

Danil
27.05.2018
19:31:37
Ыыыы так покажи раз просто.
Where X&153=152 если mssql или bitand(X,153)=152 если оракл например. Если биты 8,5,4 нужны и 1 не нужен.

Dmitrii
27.05.2018
19:32:36
С функциями побитовых операций все понятно. Выше предлагали ставить челочисленное число и считать маску в приложении

Danil
27.05.2018
19:33:33
А, так это не исходная задача)

Dmitrii
27.05.2018
19:34:12
Собираешь маску которую ищешь. Получаешь число. Ищешь число.

Для меня это выглядит как WHERE mask = 152

Или я читать разучился?

Al
27.05.2018
19:39:23
С функциями побитовых операций все понятно. Выше предлагали ставить челочисленное число и считать маску в приложении
Точно так же. Каждый включеный бит это конкретное число в любой другой системе исчисления. То есть поиск каждогл включеного бита есть выборка числа в определенном пределе

Sheldhur
27.05.2018
19:39:54
нет

WHERE mask & n = n или WHERE mask & n > 0

Danil
27.05.2018
19:41:24
Первое скорее = mask

Sheldhur
27.05.2018
19:41:44
бля, маски нинужны на самом деле

SET хранится как маска



но опять же вопрос будет ли работать индекс в этом случае? SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;

если я всё правильно понимаю - нет

lost
27.05.2018
19:50:20
Индекс не будет работать никогда если на индексированную колонку применяются функции или любые преобразования

Danil
27.05.2018
19:53:59
Я помню лет 7 назад была у меня похожая идея, с масками, при установлении соответствия произвольному шаблону с атрибутами и свойствами, но в итоге положил на это болт, стал в бд хранить все компактнее, а вычисления делал на клиенте. По сравнению с скл-запросами (включая использование команд реляционной алгебры) производительность выросла порядка на 2 на больших объемах. На мелких тоже почти не просела. Что же касается битовых масок, смотрите не нарвитесь на то, что свойств будет так много, что маска выйдет за границы максимального целочисленного типа в вашей бд.

Google
Al
27.05.2018
19:57:00
https://dev.mysql.com/doc/refman/8.0/en/numeric-type-overview.html

BOOL, BOOLEAN These types are synonyms for TINYINT(1). A value of zero is considered false. 

lost
27.05.2018
19:58:24
Это ты к чему?

Al
27.05.2018
19:59:18
К 100500 столбикам :)

Danil
27.05.2018
20:03:28
Тут получается потолок - 64 свойства. У меня в том примере было больше.

Dmitrii
27.05.2018
20:06:02
Точно так же. Каждый включеный бит это конкретное число в любой другой системе исчисления. То есть поиск каждогл включеного бита есть выборка числа в определенном пределе
Еще раз повторю свой вопрос, раз так сложно. Ссылаясь на вашу же фразу — как за одно интовое сравнение сделать AND и OR поиск по маске посчитанной на клиенте?

(никак)

Dmitrii
27.05.2018
20:07:31
О, становится интереснее. И сколько же таких сравнений мне придется в базу отправить?

Danil
27.05.2018
20:07:35
Ты слищком старый. Кодишь в аппе. Молодежи нада что бы все в одном запросе было. Ибо кодписать это думать нужно. А так хоба и сервер кипит
Обычная тема - заказчик жмется на серверное железо, а производительность вынь да положь) При таком подходе хочешь не хочешь а СУБД разгружать приходится.

Dmitrii
27.05.2018
20:07:37
Давайте ка разберемся.

Al
27.05.2018
20:09:02
О, становится интереснее. И сколько же таких сравнений мне придется в базу отправить?
Посчитайте сами. Мне лень. Могу вам сказать что даже тысяча простых селектов будет скорее всего дешевле чем один ваш хитро выковыряный запрос с преобразованиями, масками и прочим фаршем.

Dmitrii
27.05.2018
20:09:27
А вас кто то ограничивает одним сравнением?
Ваше число — посчитанная маска, она уже жестко задает выключенные биты. Значит мне придется собрать все кобинации всего чего можно игнорировать и что нельзя и придется перечислять с индивирульаной OR маской

И об этом я сказал в самом начале. Сначала вы прикинулись валенком, а теперь таки признали наличие проблемы

После какой-то дебильной ссылки на булеву алгебру. Сюр.

Al
27.05.2018
20:11:00
Ваше число — посчитанная маска, она уже жестко задает выключенные биты. Значит мне придется собрать все кобинации всего чего можно игнорировать и что нельзя и придется перечислять с индивирульаной OR маской
Не придется. Выборка каждого бита это будет каждый раз вполне простой селект. То есть для 64 бит вам придется сделать 64 простых селекта и сделать групп

Danil
27.05.2018
20:11:02
Еще раз повторю свой вопрос, раз так сложно. Ссылаясь на вашу же фразу — как за одно интовое сравнение сделать AND и OR поиск по маске посчитанной на клиенте?
А какой размер поиска? Что, прямо реально всю таблицу шерстить нужно или что-то определенное, ограниченное, что можно без труда выгрузить на клиента или сервер приложений и влегкую сделать все что вам нужно уже там?

Google
Dmitrii
27.05.2018
20:12:43
На здоровье. Это говорит достаточно о вашем опыте
О вашем тоже, если вы в первую очередь бежите писать 64 селекта.

Не понимаю зачем вы дальше продолжаете дискуссию. Все же обсудили уже, не?

Al
27.05.2018
20:13:21
О вашем тоже, если вы в первую очередь бежите писать 64 селекта.
64 селекта это не сложно. Особенно если это разружает бд в разы

Dmitrii
27.05.2018
20:13:22
Мой опыт и ваш никто не просил обсуждать.

Danil
27.05.2018
20:15:02
Ваше число — посчитанная маска, она уже жестко задает выключенные биты. Значит мне придется собрать все кобинации всего чего можно игнорировать и что нельзя и придется перечислять с индивирульаной OR маской
Я что-то не пойму, это опять за тот пример с 8,5,4 надо и 1 не надо? В чем там сложность? Там 2 маски - первая полная, вторая на включение. В результате and числа с полной маской у вас всегда должна получиться маска на включение иначе число не подходит.

Это один оператор

Al
27.05.2018
20:15:23
Dmitrii
27.05.2018
20:16:16
Неизвестном количестве битов, условий и так далее.

10010000 10011001 11011001

Задачу можно искусственно уложнять сколько угодно

В конце концов вы придете к веренице говна в WHERE части или к 64м (лол) запросам.

Konstantin
27.05.2018
20:19:54
Блин

Я не понял немного чё ты пытаешься сказать

Страница 517 из 718