Czy istnieje sposób, w jaki mogę kontrolować maksymalną wielkość SSTable, na przykład 100 MB, tak, że gdy faktycznie jest więcej niż 100 MB danych dla CF, Cassandra tworzy następną SSTable?Sterowanie Cassandra Format SSTable
Odpowiedz
Niestety odpowiedź nie jest tak prosta, na rozmiary SSTables wpływają strategie zagęszczania i nie ma bezpośredniego sposobu kontrolowania maksymalnego rozmiaru pliku sstable.
SSTables są początkowo tworzone, gdy memtables są wypłukiwane na dysk jako SSTables. Rozmiar tych tabel początkowo zależy od twoich zapisywalnych ustawień i wielkości sterty (memtable_total_space_in_mb
, która jest dużym influencer). Zazwyczaj te SSTables są dość małe. SSTables są scalane w ramach procesu o nazwie compaction.
Jeśli używasz strategii zagęszczania rozmiaru, masz możliwość posiadania naprawdę dużych SSTables. STCS połączy SSTables w mniejszym zagęszczeniu, gdy istnieją co najmniej min_threshold
(domyślnie 4) pliki sstables o tym samym rozmiarze, łącząc je w jeden plik, wygasając dane i scalając klucze. Dzięki temu po chwili można tworzyć bardzo duże SSTables.
Przy pomocy poziomej strategii zagęszczania dostępna jest opcja sstable_size_in_mb
, która kontroluje docelowy rozmiar SSTables. Ogólnie SSTables będzie mniejszy lub równy temu rozmiarowi, chyba że masz klucz partycji z dużą ilością danych ("szerokie rzędy").
Nie eksperymentowałem jeszcze wiele ze strategią zagęszczania w formacie Date-Tiered, ale to działa podobnie do STCS, ponieważ łączy pliki o tym samym rozmiarze, ale zachowuje dane razem w kolejności czasowej i ma konfigurację, która zatrzymuje zagęszczanie stare dane (max_sstable_age_days
), które mogą być interesujące.
Kluczem jest znalezienie strategii zagęszczania, która najlepiej pasuje do danych, a następnie dostrojenie właściwości w oparciu o to, co najlepiej pasuje do danego modelu/środowiska danych.
Możesz przeczytać więcej o ustawieniach konfiguracji zagęszczania here i przeczytać this guide, aby dowiedzieć się, czy STCS lub LCS jest odpowiednie dla Ciebie.
Powinieneś również dodać: Jest szczęśliwy środek, jeśli chodzi o rozmiar SSTable, nie chcesz, aby twoje oprogramowanie SSTables było zbyt małe, ponieważ tworzy dużo odczytów, aby uzyskać dane, ponieważ zwiększa prawdopodobieństwo wiersze do rozsyłania między SSTables. To, jak duże są twoje pliki dźwiękowe, może zależeć od twojego środowiska i Twoich wymagań, więc prawdopodobnie dobrze jest dostroić i przetestować to, co działa najlepiej. –
Dzięki za informacje. Gdzie mam określić 'sstable_size_in_mb'? Próbowałem umieścić go w postaci 'sstable_size_in_mb: 40' w pliku conf/cassandra.yaml, ale uruchomienie kassandra zakończyło się niepowodzeniem z błędem: org.apache.cassandra.exceptions.ConfigurationException: Nieprawidłowy yaml. Proszę usunąć właściwości [sstable_size_in_mb] ze swojej cassandra.yaml – RRM
@RRMadhav, prawdopodobnie Twój stół nadal używa SizeTieredCompactionStrategy. Ta opcja jest obsługiwana tylko przez LeveledCompactionStrategy, możesz zmienić strategię zagęszczania za pomocą następującej komendy CQL: ALTER TABLE nazwa tabeli z compaction = {'class': 'LeveledCompactionStrategy', 'sstable_size_in_mb': 40}. Zalecam użycie domyślnego rozmiaru sstable 160MB, ponieważ to właśnie zespół Kasandra uznał za najbardziej idealny i mówiąc z doświadczenia, posiadanie wielu małych SSTables nie jest dobre dla wydajności odczytu. –