Useful Constraints

Usually we use constraints to specify the allowable values for the columns in tables. And it works perfect! But beyond that, constraints help query analizer to generate more effective query plans. How it works? Read below. There is an opinion "Give MS SQL Server all information you know about data you store". What does it mean? First of all, obvious things: use the most suitable data type (use int, instead of bigint or float for example), set size of strings and binary data (nvarchar(10) instead of nvarchar(max)). And second - the constraints: if the value in a column may be in the range from 1 to 4, you should specify this as a contraint, SQL Server will thank you!
(далее…)

Неизвестный T-SQL

Несколько редко используемых, но вполне полезных функций MSSQL. Если вы никогда не слышали о функциях CHOOSE, ROW_NUMBER, RANK, DENSE_RANK, FIRST_VALUE, LAST_VALUE, LAG, LEAD, PERCENTILE_CONT и PERCENTILE_DISC, то ниже вы узнаете, какие полезные вещи можно сделать их помощью. Так же, я покажу несколько примеров использования выражений OVER и PARTITION BY в оконных функциях. (далее…)

О пользе ограничений

Как мы привыкли, ограничения (CONSTRAINT) - способ указания допустимых значений для столбцов в таблице. С этой своей функцией они справляются на отлично! Но помимо этого, ограничения так же помогают анализатору запросов генерировать более эффективный план выполнения. Как именно? Читайте ниже. Есть такое мнение "Дайте MS SQL максимальную информацию о данных, которые вы храните". Что это значит? Во-первых, очевидные вещи: подбирайте наиболее подходящий тип данных (там где нужен int, можно не использовать bigint или float), указывайте размерность строковых или бинарных данных (nvarchar(10) вместо nvarchar(max)). А во-вторых - это ограничения: если значение в столбце может быть в пределах от 1 до 4 то укажите это явно, сервер вам только спасибо скажет!
(далее…)

Паттерны: Retry vs Circuit Breaker

Сегодня хочется рассказать про два интересных паттерна: Retry и Circuit Breaker. На первый взгляд они очень похожи, но используются для решения совершенно разных проблем. (далее…)

Replacing Mocks with Spies

Mock objects are useful when verifying that a method was called is more important than verifying the outcome of calling that method. Completing a Reservation For example, I have a Reservation class that represents some concert tickets that are being held for a user until they complete their purchase. When you call the complete method on a Reservation, you pass it a PaymentGateway and a paymentToken, which the reservation uses to charge the customers card and finalize their order: class Reservation { public $tickets; public $email; public function Read more

Вернуть пустой результат запроса из Laravel Query Builder

Весьма специфичный случай. Вернуть пустой результат SQL запроса независимо от остальных условий запроса. Необходимо задать заведомо невыполнимое условие, например идентификатор записи < 0. Естественно лучшим вариантом будет выбирать поле с индексом. Совершенно точно не стоит опираться на LIMIT 0. Постраничная навигация обязательно изменит этот параметр. SELECT * FROM entities WHERE id < 0 Laravel Query Builder Получение пустого множества. /** * Вернуть пустое множество * * @param Builder $query * @return \October\Rain\Database\Builder */ public function Read more

Как быстро попробовать CQRS/ES в Laravel или пишем банк на PHP

Недавно в подкасте «Цинковый прод» мы с товарищами обсуждали паттерн CQRS/ES и некоторые особенности её реализации в Elixir. Т.к. я в работе использую Laravel, грех было не покопаться в интернетах и не найти как же можно потягать этот подход в экосистеме данного фреймворка. Всех приглашаю под кат, постарался максимально тезисно описать тему. Немножко определений CQRS (Command Query Responsibility Segregation) — выделение в отдельные сущности операции чтения и записи. Например пишем в мастер, читаем из реплики. Read more

Laravel Event Projector и концепция порождения событий

Фрек ван дер Хертен (Freek Van der Herten) и команда Spatie долго трудились над Laravel Event Projector, пакетом, позволяющим применять концепцию порождения событий (Event Sourcing) во фреймворке Laravel. И вот наконец доступна первая стабильная версия (v1.0.0)! Вы можете установить Event Projector в свой проект при помощи composer и благодаря автоматическому обнаружению пакетов в Laravel приступить к работе сразу же после публикации миграций пакета и конфигурирования! composer require spatie/laravel-event-projector:^1.0.0 Event Projector требует наличия PHP 7.2, поэтому Read more


Любишь мемасики?

Подпишись на мой телеграм-канал!

Открыть
Закрыть