Badger je jednoduchá, rychlá, embeddable databáze, která je psaná čistě v jazyce Go. Vyvinula ji společnost DGraph Labs a je dostupná pod open source licencí. Je kompatibilní s operačními systémy BSD, Linux, OS X, Solaris i Windows. Je navržena tak, aby byla velmi výkonná v psaní i čtení zároveň. Badger používá Multi-Version Concurrency Control (MVCC) a podporuje transakce. Spouští transakčně konkurenčně se sériovatelnou garancí izolovaných snaphotů.

Badger používá LSM strom a log hodnot, tak aby odlišil klíče od hodnot. Tím dosahuje nižší amplifikaci zápisu i velikosti LSM stromu. To umožňuje, aby byl LSM strom obsluhován výhradně z RAM, zatímco hodnoty jdou z SSD.

Použití

Badger používá tyto hlavní typy:

  • DB
  • Txn
  • Položka
  • Iterátor

DB obsahuje klíče, které jsou namapovány na hodnoty. Musí být otevřeny za pomoci vhodných přístupů. Všechny operace se dějí v Txn. Txn reprezentuje transakci, která může být jen pro čtení nebo pro čtení i psaní. Transakce výhradně pro čtení mohou číst hodnoty pro daný klíč, které jsou ve formě výstupu v položce nebo iterují sadu dvojic klíč-hodnota za pomoci iterátoru, který je ve formě výstupu položky. Transakce pro čtení i psaní mohou aktualizovat nebo mazat klíče z databáze.

Výhody použití Badgeru

  • Výkon stahování dat. Badger používá design oddělených klíčů a hodnot, čímž dosahuje obrovského zlepšení výkonu u velkých množství hodnot. Například pro hodnoty o velikosti 1KB a 16KB dokáže Badger dosáhnout 4,5x a 11,7x vyššího průtoku dat nežli RocksDB. Pro menší hodnoty může být naopak 2-3x pomalejší.
  • Velikost LSM stromu. Badger generuje mnohem menší LSM strom a větší log hodnot. Jeho velikost je úměrná pouze počtu klíčů a ne počtu hodnot. Proto velikost LSM Stromu klesá, pokud stoupneme ze 128K na 16KB. Díky tomu se LSM strom standardně vejde na RAM cílového serveru.
  • Latence čtení. Latence Badgeru je pouhých 18% oproti latenci RocksDB 27%. To je způsobeno tím, že celý LSM strom Badgeru se vejde na RAM, což výrazně snižuje čas, který je třeba k vyhledání správných tabulek, kontrole filtrů a výběru správných bloků. Naproti tomu RocksDB nedokáže uložit celý LSM strom do paměti, což znamená, že musí získávat celé bloky z disku, dekompresovat je a následně přiřadit hodnoty ke klíčům.

Nevýhody použití Badgeru

  • Latence iterace. Badger má mnohem pomalejší rozsah iterace nežli například RockDB, pokud jsou hodnoty získávány z SSD.
  • Vyhledávání hodnot. Iterace klíč-hodnota jsou pomalejší, nežli by odpovídalo optimalizované instanci disku pro náhodné čtení za sekundu.
  • Rychlost. Badger je pomalejší, pokud datová sada obsahuje jen menší hodnoty.