CQS oraz CQRS

CQS (Command Query Separation) oraz CQRS (Command and Query Responsibility Segregation) to zbliżone do siebie terminy. Obydwa opisują potrzebę rozdzielenia komend (command) i zapytań (query). Ale opisują ją na innych poziomach.

Komenda – command

Jest to operacja która modyfikuje stan systemu, ale nie zwraca przy okazji jego wewnętrznego stanu (może zwrócić rezultat wykonania komendy, ale nie odczytuje dodatkowo innych danych).

Zapytanie – query

Jest to operacja polegająca wyłącznie na odczycie danych – nie może tutaj się odbywać, żadna modyfikacja systemu.

CQS – Command Query Separation

CQS będzie odpowiadało za ten poziom bliższy kodu – należy zapewnić, że nasze metody są albo komendami albo zapytaniami. A często idzie się w stronę oddzielnych repozytoriów:

class EntityWriteRepository {
    updateEntity(Entity entity){ ... }
    ...
}

class EntityReadRepository {
    readById(String id){ ... }
    ...
}

Jakie to daje korzyści?
Głównie chodzi tutaj o rozdzielenie odpowiedzialności pomiędzy klasami lub metodami. Większe korzyści daje z pewnością CQRS.

CQRS – Command and Query Responsibility Segregation

Jeśli chodzi o CQRS to jest to podejście na poziomie systemu. I często jest powiązane z założeniem, iż w systemach większością operacji są odczyty. Więc może warto podejść do tego w następujący sposób:
1. Tworzymy w naszej siedzibie firmy bazę tylko do zapisu (na diagramie PostgreSQL)
2. Tworzymy repliki, tylko do odczytu, tej bazy danych w odpowiednich geolokalizacjach (na diagramie MongoDB)

Jakie to daje korzyści?
1. Dzięki rozmieszczeniu replik w odpowiednich miejscach, skracamy trasę jaką muszą przebyć pakiety danych
2. Repliki mogą być zoptymalizowane pod kątem odczytu
3. Samo stworzenie replik daje na to, że jeśli jedna z nich padnie, to ruch przejmie inna
4. Baza danych do zapisu nie jest obciążana odczytem

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *