После изменений данных иногда требуется дополнительно произвести какие то действия, это может быть пересчет каких то агрегаций, отправка сообщения и пр. Процессу вносившему изменения как правило важно знать только результат транзакции и не очень интересно ожидать выполнения дополнительных операций. Асинхронный вызов можно организовать через очередь. В следующий раз напишу как это сделать через обычную таблицу и job, а сегодня о компоненте Service Broker. У Service Broker много возможностей, он позволяет взаимодействовать и между сервера, но местами не так удобен и гибок, в итоге часто эффективней выносить такую логику за СУБД. Но для простых и понятных задач вполне годная штука. 1. Создаем БД IF DB_ID (N 'DB_001' ) IS NOT NULL DROP DATABASE DB_001; GO CREATE DATABASE DB_001 2. Включаем Service Broker ALTER DATABASE [DB_001] SET ENABLE_BROKER with rollback IMMEDIATE ; 3. Создаем два типа сообщений CREATE MESSAGE TYPE [AsyncRequest] VA...
CTE(обобщенное табличное выражение) может ссылаться на себя, создавая рекурсивное CTE. Рекурсивное CTE многократно выполняется, чтобы возвращать подмножество данных до тех пор, пока не получится конечный результирующий набор. Обычно рекурсивные запросы используются для возвращения иерархических данных, например: отображение сотрудников в структуре организации или генерация последовательности. Структура рекурсивного CTE WITH cte_name ( column_name [,...n] ) AS ( CTE_query_definition –- Anchor member is defined. UNION ALL CTE_query_definition –- Recursive member is defined referencing cte_name. ) -- Statement using the CTE SELECT * FROM cte_name CTE разбивается на закрепленный и рекурсивный элементы. Запускается закрепленный элемент с созданием первого вызова. Рекурсивный элемент ссылается на закрепленный и вызывается пока не вернет пустой набор. Классический пример с сотрудниками DECLARE @Employees TABLE ( ID int NOT NULL, [Name] nvarchar(200) NOT NULL, Manag...
В посте О битовых операциях были рассмотрены логические побитовые операции и побитовые сдвиги. В качестве примеров были взяты битовые флаги и множества. Если применения битовых флагов вообщем то понятно, то для множества необходима структура данных и набор алгоритмов по работе с ней. В книге Донован А. Керниган Б. - Язык программирования Go приведен пример битового вектора. Такая структура хорошо подходит для множества небольших положительных чисел над которым часто проводят операции объединения, пересечения, разность и пр. Реализуем на Go структуру и основные методы. Тип вектора имеет одно поле. Срез беззнаковых целочисленных значений, каждый бит которых представляет возможный элемент множества. type IntSet struct { words [] uint } Нам понадобится узнать размер слова const sizeWord = 32 << (^ uint ( 0 ) >> 63 ) На 32 разрядных платформах sizeWord будет равен 32, на 64 соответственно 64. Когда не часто работаешь с битовыми операциями может...
Комментарии
Отправить комментарий