LSM Tree Flashcards

1
Q

Z jakich komponentów składa się LSM-Tree?

A
  • Memtable (generally sorted tree, e.g. Red-Black Tree)
  • SSTable (String Sorted Table)
  • WAL (Write Ahead Log)
  • Bloom Filters (probabilistic data structure with O(1) complexity - can have false positive but no false negative for existence)
  • Sparse Index for each segment (both in-memory and in disk)
  • Compactor
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

W jaki sposób przebiega zapis w LSM Tree?

A
  1. Save in WAL
  2. Save in Memtable
  3. Update Bloom Filter
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

W jaki sposób przebiega odczyt w LSM Tree?

A
  1. Check for existence in Bloom Filter.
  2. Search in Memtable
  3. Search in SSTable starting from the newest segment.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Dla jakich zastosowań sprawdzi się LSM Tree?

A

Write-intensive workloads (when we want to optimize for fast and massive writes).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Objaśnij różnice między leveled i size-tiered compaction w LSM Tree

A

Leveled compaction - SSTables podzielone na różne levele, każdy kolejny level posiada większy zbiór danych. Klucze w SSTables na danym poziomie się nie przeplatają (cały level jest posortowany). Compaction jest triggerowane przez przekroczenie zadanej maksymalnej pojemności danego levelu. Mergowanie następuje z wybranej tabeli w niższym poziomie do kilku tabeli na wyższym poziomie (takich, które rozpościerająsię na ten sam podzbiór kluczy). Taki sposób zapisu minimalizuje space amplification i read amplification przy lookupie kosztem zwiększenie space and write amplification przy kompakcji.

Size-tiered compaction - SSTables podzielone na poziomy, ale tym razem compaction następuje, kiedy dwie SSTable z danego poziomu przekroczą threshold. Są one wtedy mergowane i przeniesione do kolejnego poziomu. Taki sposób zapisu minimalizuje read and write amplification kosztem space amplification (ciężko o zmergowanie dwóch wielkich SSTable na wysokim levelu) i kosztem read amplification przy lookupie (więcej tabel do przeszukania, bo na danym levelu nie są posortowane).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Dla jakich workloadów leveled-compaction będzie lepszy niż size-tiered compaction?

A

Leveled compaction sprawdzi się, gdy chcemy optymalizować pod lookup, zwłaszcza taki, który równomiernie rozprzestrzenia się na cały zbiór kluczy. Będzie też dobry gdy często nadpisujemy wartość danego klucza, bo ogranicza space amplification w takim przypadku. Prawdopodobnie da się też przy takim zapisie w miarę sensownie zrobić range query.

Size tiered compaction sprawdzi się, jeśli dużo zapisujemy, ale rzadziej czytamy. Albo gdy rzadko nadpisujemy wartość danego klucza i nie boli nas przez to space amplification (ale dalej lookup może być kosztowny). Ewentualnie, jeśli najczęściej czytamy świeżo zapisane dane, wtedy lookup rzadko musi wchodzić w wyższe i tym samym większe levele SSTable. Raczej nie da się odpalić przy takim zapisie range query, bo dany klucz może wystąpićwe wszystkich SSTables.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Jakie bazy danych używają pod spodem LSM Tree do przechowywania danych?

A

LevelDB, RocksDB, Cassandra, HBase (LSM Tree comes from BigTable papers) i pewnie wiele innych.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly