> For the complete documentation index, see [llms.txt](https://goldenore.gitbook.io/goldenore-cdc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://goldenore.gitbook.io/goldenore-cdc/moduly-goldenore-cdc/cdc-compare-2.0.md).

# CDC COMPARE 2.0

Nowa wersją modułu odpowiedzialnego za sprawdzanie spójności replikacji.

## Zmiany względem wersji 1.0

W porównaniu do pierwszej wersji ta oferuje porównania tabel z kluczami złożonymi o różnych typach oraz w założeniu szybsze porównywanie tabel.

## Wspierane bazy danych

Aktualnie wspierane są bazy:

* PostgreSQL
* Oracle
* Microsoft SQL Server

## Wspierane typy danych

Compare próbuje mapować obiekty z bazy danych na obiekty z Java, co może prowadzić do nieścisłości. Nie wszystkie typy z baz danych są wspierane. List wspieranych typów:

* Typy liczbowe całkowite
* Typy liczbowe zmiennoprzecinkowe
* Typy boolean(boolean, bit)
* Typy tekstowe (char, varchar, text, clob itd.)
* Typy binarne
* Typy datowe (date, timestamp, time)  - działanie z różnymi timezone do przetestowania
* UUID

Jeśli któraś kolumna z klucza głównego nie może zostać zmapowana to porównanie zakończy się błędem. W przypadku kolumn poza kluczem głównym w przypadku problemu z mapowaniem moduł próbuje wyciągnąć dane z kolumny jako tekst, co może prowadzić do błędów w porównywaniu lub tworzonych finalnie zapytaniach.

## Rodzaje analizy

Aktualnie można przeprowadzić dwa rodzaje analizy:

* COUNT -> sprawdza tylko liczbę wierszy w obu tabelach
* DETAILED -> Sprawdza dokładnie czy wiersze są równe, na tej podstawie lista rzędów, które trzeba usunąć, zmodyfikować albo dodać do tabeli docelowej. Moduł generuje listę zapytań dostosowanych do bazy docelowej, które aktualizują stan tabeli

Analiza DETAILED jest najbardziej optymalna dla tabel, które mają klucz główny składający się z jednej kolumny. W tym wypadku analiza jest dużo wydajniejsza i poprawnie obsługiwane jest dodawanie i usuwanie rzędów w trakcie porównania. Algorytm przechodzi przez rzędy w kolejności, więc jeśli dodany rząd mają mniejszy klucz, niż ten aktualnie porównywany to zostaną one pominięte.\
Jeśli klucz jest złożony analiza będzie trwała dłużej i do tabel nie mogą być wstawiane i usuwane rzędy. W tym wypadku nie jest zalecane uruchamianie analizy na obszernych tabelach.

W przypadku analizy DETAILED jest też możliwość ponownego sprawdzenia kluczy dla których różnicę (opcja `recheckKeys)`. Jeśli została wybrana, to sprawdzane jest czy:

* klucze zapisane jako do usunięcia w bazie docelowej nadal w niej są
* klucze zapisane jako do dodania nie pojawiły się w bazie docelowej
* klucze zapisane jako do modyfikacji nadal mają różniące się wartości poza kluczem

&#x20;W trakcie sprawdzania usuwane są klucze, które nie wymagają już aktualizacji.

## Wyniki badania spójności

Jeśli różnic jest zbyt dużo porównywanie danej tabeli jest przerywane i informacje o rzędach nie są zapisywane, a status ustawiony jest na **`ERROR_MAX_LIMIT`.**

Wynik całego jest ustawiony na **`FINISH`**, gdy wszystkie tabele zostały porównane, niezależnie od tego, czy w trakcie porównania zaistniały jakieś błędy - informację o nich należy sprawdzić dla każdej z porównywanych tabel.

## Properties

W kodzie zdefiniowanych jest kilka properties, które wpływają na działanie serwisu

* **goldenore.compare.batch\_size** -> ile rzędów jest pobieranych przy jeden iteracji
* **goldenore.compare.max\_errors\_count** -> maksymalna liczba różnic między tabelami, po której porównanie się zatrzyma - zabezpieczenie przed zbyt dużą wartością podaną w opcjach
* **goldenore.compare.max\_parallel\_compares** -> ile porównań może działać jednocześnie
* **goldenore.compare.max\_threads\_per\_compare** -> ile tabel może być porównywanych jednocześnie w ramach jednego porównania (zależy to również od max liczby połączeń do bazy danych)

## Szczegółowy opis

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>Column Binding</td><td></td><td></td><td><a href="/goldenore-cdc/moduly-goldenore-cdc/cdc-compare-2.0/column-binding.md">Column binding</a></td></tr><tr><td>Compare</td><td></td><td></td><td><a href="/goldenore-cdc/moduly-goldenore-cdc/cdc-compare-2.0/compare.md">Compare</a></td></tr><tr><td>Architektura</td><td></td><td></td><td><a href="/goldenore-cdc/moduly-goldenore-cdc/cdc-compare-2.0/architektura.md">Architektura</a></td></tr><tr><td>Rozwój i problemy</td><td></td><td></td><td><a href="/goldenore-cdc/moduly-goldenore-cdc/cdc-compare-2.0/rozwoj-i-problemy.md">Rozwój i problemy</a></td></tr></tbody></table>

## Szczegóły kontenera

<table><thead><tr><th width="226">Właściwości</th><th>docker</th></tr></thead><tbody><tr><td>Nazwa obrazu</td><td>cdc-compare2</td></tr><tr><td>Nazwa w repozytorium </td><td>goldenore/cdc/compare2</td></tr><tr><td>Port </td><td>8084</td></tr><tr><td>Zależność</td><td>PostgreSQL Database</td></tr></tbody></table>

###


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://goldenore.gitbook.io/goldenore-cdc/moduly-goldenore-cdc/cdc-compare-2.0.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
