Битовые операции SQL

Я попался на бит для новой парадигмы безопасности под названием VMAC. Переменная матрица контроля доступа. Я хочу сделать логическое следствие для битовых строк. Просто пытаюсь избежать эхоурека (изобретать велосипед).

  1. Прежде чем я заново изобрету колесо, есть ли установленный ярлык для эмуляции ⇒ (логическое следствие) с использованием AND и OR и NOT или других базовых бинарных операторов SQL?

  2. XNOR позволит мне сократить ⇒ эмуляцию до четырех операций: NOT, XOR, OR и AND. Но это не широко доступно. Любые известные ярлыки для XNOR? Я думал о чем-то вроде операции "И" над операндами плюс неопубликованные операнды с макушки головы.

  3. Есть ли какие-либо комментарии по поводу эффективности, достигаемой за счет реализации побитовых структур данных на 64-битной платформе, или скорости многопоточных приложений, использующих параллельные потоки, работающие на сегментах размером в слово большего объекта данных?

(Извините, я не ученый)

4 ответа

если A, то B логически эквивалентно (не A) или B

Если вы управляете битовой строкой, то

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/

Другие вопросы по тегам