Firma Citus Data, będąca częścią Microsoft, opublikowała rozproszoną bazę danych Citus 13.0, wdrożoną jako rozszerzenie dla PostgreSQL 17. Citus zapewnia poziome skalowanie PostgreSQL w klastrze na standardowym sprzęcie i umożliwia rozmieszczanie danych na węzłach przy użyciu shardingu, z konfiguracją podziału na poziomie kolumn i schematów przechowywania. Dla aplikacji klaster Citus wygląda jak jeden duży serwer PostgreSQL, łączący zasoby jego węzłów. Kod napisany jest w języku C i udostępniany na licencji AGPLv3.
Sharding umożliwia organizację przechowywania bardzo dużej ilości danych, całkowity rozmiar których znacznie przekracza lokalne nośniki każdego z węzłów klastra. Poszczególne tabele mogą być wymuszone do replikacji na wszystkich węzłach w celu przyspieszenia operacji łączenia i pracy z kluczami obcymi. Aby zaoszczędzić miejsce na dysku, dane rozproszone na różnych węzłach mogą być przechowywane w formie skompresowanej.
Rozproszone zapytania mogą być wysyłane do dowolnego z węzłów klastra, ale zarządzanie i modyfikacja schematu danych muszą być przeprowadzane tylko przez węzeł koordynujący pracę klastra. Przychodzące zapytania od klientów są rozdzielane między odpowiednie węzły i, jeśli obejmują kilka węzłów, ich przetwarzanie jest równoległe. Klaster można rozbudowywać w miarę wzrostu rozmiaru przechowywanych danych, dodając dodatkowe węzły i inicjując rebalance.
Typowe przykłady zastosowania Citus obejmują wykonywanie zapytań analitycznych oraz przetwarzanie dużych zbiorów danych w formie szeregów czasowych (na przykład logi lub ankiety stanu czujników). Citus nadaje się również do modernizacji istniejącej infrastruktury opartej na jednostkowym serwera PostgreSQL, którego wydajności i nośników przestało wystarczać z powodu zwiększonego obciążenia lub ilości przychodzących danych. Za pomocą narzędzi Patroni można tworzyć konfiguracje odporne na awarie z replikowanymi zapasowymi węzłami, które w przypadku awarii mogą zająć miejsce głównych węzłów.
Zmiany w wersji Citus 13.0:
- Przejście na użycie gałęzi PostgreSQL 17.
- Możliwość korzystania z funkcji JSON_TABLE() w zapytaniach rozproszonych do przekształcania danych z formatu JSON do relacyjnej postaci, z którą można pracować jak z zwykłymi tabelami PostgreSQL.
- Wsparcie dla składni „MERGE … WHEN NOT MATCHED BY SOURCE”.
- Możliwość definiowania metody dostępu dla rozproszonych tabel sekcjonowanych za pomocą wyrażenia „CREATE TABLE … USING”, a także zmiany metody dostępu przez „ALTER TABLE … SET ACCESS METHOD”.
- Dodano wsparcie dla określania automatycznie generowanych kolumn identyfikacyjnych w rozproszonych tabelach sekcjonowanych.
- Zezwalają na stosowanie ograniczeń wykluczeń w rozproszonych tabelach sekcjonowanych.
- Rozwiązano problemy z synchronizacją ról między węzłami.
- Udoskonalono rozdzielanie danych dla shardingu przy dodawaniu nowych węzłów do klastra.
- Do polecenia „EXPLAIN” dodano opcje „MEMORY” oraz „SERIALIZE”, które pozwalają określić rozmiar użytej pamięci oraz czas poświęcony na przekształcanie danych do transmisji w sieci.
Źródło: opennet.ru
