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 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.