Битовые операции SQL
Я попался на бит для новой парадигмы безопасности под названием VMAC. Переменная матрица контроля доступа. Я хочу сделать логическое следствие для битовых строк. Просто пытаюсь избежать эхоурека (изобретать велосипед).
Прежде чем я заново изобрету колесо, есть ли установленный ярлык для эмуляции ⇒ (логическое следствие) с использованием AND и OR и NOT или других базовых бинарных операторов SQL?
XNOR позволит мне сократить ⇒ эмуляцию до четырех операций: NOT, XOR, OR и AND. Но это не широко доступно. Любые известные ярлыки для XNOR? Я думал о чем-то вроде операции "И" над операндами плюс неопубликованные операнды с макушки головы.
Есть ли какие-либо комментарии по поводу эффективности, достигаемой за счет реализации побитовых структур данных на 64-битной платформе, или скорости многопоточных приложений, использующих параллельные потоки, работающие на сегментах размером в слово большего объекта данных?
(Извините, я не ученый)
4 ответа
Если вы управляете битовой строкой, то
x -> y
может быть выражено в C/C++ (или SQL) как:
~x | y
Что касается скорости, то побитовые операторы на одном машинном слове невероятно быстры, поскольку они реализованы в одной арифметической инструкции процессора. Повышение производительности при выполнении математических операций должно быть практически пренебрежимо малым по отношению к работе по фактическому извлечению данных.
Есть ли какие-либо комментарии (3) об эффективности, достигнутой благодаря реализации побитовых структур данных на 64-битной платформе? Скорость в многопоточных приложениях, использующих параллельные потоки, работающие с сегментами размером в слово большего объекта данных
Лично я не задумывался об этом, но у Раймонда Чена есть некоторые комментарии.
Это всего лишь несколько вещей, которые следует учитывать при рассмотрении вопроса о том, следует ли вам изменить свои поля на битовые поля. Конечно, битовые поля сохраняют память данных, но вы должны сбалансировать ее с затратами на размер кода, отладку и сокращение многопоточности. Если ваш класс будет создан всего несколько раз (а "несколькими" я думаю меньше, чем несколько тысяч раз), то эти затраты, скорее всего, превысят экономию.
Определение XNOR
это A*B +!A*!B
Поэтому в SQL это может быть реализовано так:
DECLARE @A AS BIT;
DECLARE @B AS BIT;
(@A & @B) | (~@A & ~@B)
Альтернативную запись можно найти здесь: http://michaelmairegger.wordpress.com/2011/10/14/sql-nand-xnor/