
ScyllaDB jedna je od najnovijih NoSQL baza podataka koja nudi stvarno veliku propusnost pri latencijama ispod milisekundi. Važno je da to postiže za djelić cijene moderne NoSQL baze podataka.
ScyllaDB implementira gotovo sve značajke Cassandre u C ++. Ali reći da je to puki C ++ priključak bilo bi potcjenjivanje. Programeri tvrtke Scylla napravili su puno promjena ispod poklopca motora koje nisu vidljive korisniku, ali su dovele do velikog poboljšanja performansi.
Šalite se, zar ne?
Ne, nisam.
Kao što vidite (ako ste otišli na tu vezu), u većini slučajeva Scylina latencija od 99,9 percentila 5–10 puta je bolja od Cassandrine.
Također u ovdje spomenutim mjerilima, standardni klaster Scylla s 3 čvora nudi gotovo iste performanse kao i klaster Cassandra s 30 čvorova (što dovodi do 10 puta smanjenja troškova).
Kako je ovo moguće?
Najvažnije je da je Scylla napisana na C ++ 14. Dakle, očekuje se da će biti brži od Cassandre koja isključivo radi na JVM-u.
Međutim, bilo je puno značajnih optimizacija na niskoj razini u Scylli, što ga čini boljim od konkurencije.
Pristup zajedničko-ništa
Cassandra se oslanja na niti za paralelizam. Problem je u tome što niti zahtijevaju prebacivanje konteksta, što je sporo.
Također, za komunikaciju između niti, trebate zaključati zajedničku memoriju što opet rezultira izgubljenim vremenom obrade.
ScyllaDB koristi okvir seastar za dijeljenje zahtjeva na svakoj jezgri. Aplikacija ima samo jednu nit po jezgri. Na taj način, ako sesijom upravlja jezgra 1, a zahtjev za upit za tu sesiju dođe do jezgre 2, usmjerava se na jezgru 1 na obradu. Bilo koja jezgra može se nositi s odgovorom nakon toga.
Prednost zajedničkog pristupa ničemu je što svaka nit ima svoju memoriju, CPU i redove NIC međuspremnika.
U slučajevima kada se komunikacija između jezgri ne može izbjeći, Seastar nudi asinkronu inter-core komunikaciju bez zaključavanja koja je vrlo skalabilna. Ovi primitivi bez zaključavanja uključuju Futures i Promises, koji se prilično često koriste u programiranju, a tako su i razvojni programeri.
Izbjegavajte jezgru
Kada se red pronađe u SSTableu, treba ga poslati klijentu preko mreže. To uključuje kopiranje podataka iz korisničkog prostora u prostor jezgre.
Međutim, Linux kernel obično izvodi operacije zaključavanja s više niti koje nisu skalabilne.
ScyllaDB se brine za to koristeći Seastarov mrežni stog.
Seastarov mrežni stog radi u korisničkom prostoru i koristi DPDK za bržu obradu paketa. DPDK zaobilazi kernel kako bi kopirao podatke izravno u NIC međuspremnik i obrađuje paket unutar 80 CPU ciklusa. (izvor: web stranica DPDK)
Ne oslanjajte se na predmemoriju stranica
Predmemorija stranica je sjajna kada imate sekvencijalni I / O i podaci se pohranjuju na disk u žičanom formatu.
Međutim, u Scili / Kasandri imamo podatke u obliku SSTables. Predmemorija stranice pohranjuje podatke u istom formatu, koji zauzima velik dio memorije za male podatke i potrebna je serializacija / deserializacija kada ih želite prenijeti.
ScyllaDB, umjesto da se oslanja na predmemoriju stranica, većinu svoje memorije dodjeljuje u predmemoriju redaka.
Row-Cache ima podatke u optimiziranom memorijskom formatu koji zauzima manje prostora i nije mu potrebna serializacija / deserializacija
Još jedna prednost korištenja predmemorije redaka je u tome što se ne uklanja kada se zbijanje zbiva dok se predmemorija stranica razbija.
To su glavne optimizacije u ScyllaDB-u koje ga čine mnogo bržim, pouzdanijim i jeftinijim od Cassandre. Scylla ima mnoštvo drugih optimizacija ispod haube koje možete pronaći ovdje.
Ako ste znatiželjni za više dizajna poput onih gore ili ako želite stupiti u kontakt, povežite se sa mnom na LinkedInu ili Facebooku ili pošaljite e-poštu na [email protected]