7 tvrdih istina o NoSQL revoluciji

Modulna riječ NoSQL metastazira već nekoliko godina. Uzbuđenje zbog ovih brzih pohrana podataka bilo je opojno, a mi smo krivi kao i svi drugi što smo vidjeli revolucionarnu privlačnost NoSQL-a. Ipak, medeni mjesec se bliži kraju, i vrijeme je da počnemo uravnotežavati svoje oduševljenje nekim tvrdim istinama gimlet-eyed.

Nemojte nas krivo shvatiti. Još uvijek trčimo kako bismo isprobali najnoviji eksperiment u izgradnji jednostavnog mehanizma za pohranu podataka. Još uvijek pronalazimo duboku vrijednost u MongoDB-u, CouchDB-u, Cassandri, Riaku i drugim NoSQL-ovim istaknutim stavkama. Još uvijek planiramo baciti neke od naših najpouzdanijih podataka u ove hrpe koda, jer oni svakodnevno postaju sve bolji i sve testiraniji u bitkama.

[Također na: Izdvaja se NoSQL: Nove baze podataka za nove aplikacije | Prvi pogled: Oracle NoSQL baza podataka | Dobijte sažetak ključnih priča svaki dan u biltenu Daily. ]

Ali počinjemo osjećati trljanje, jer NoSQL sustavi daleko su od savršenog uklapanja i često trljaju na pogrešan način. Najpametniji programeri to su znali od početka. Nisu spaljivali SQL priručnike i slali nastygrame prodajnom timu svog nekada posvećenog dobavljača SQL-a. Ne, pametni NoSQL programeri jednostavno su primijetili da NoSQL znači "Ne samo SQL". Ako su mase pogrešno protumačile kraticu, to je bio njihov problem.

Popis velikih zamjerki, velikih i malih, predstavlja pokušaj dokumentiranja ove činjenice i čišćenja zraka. Namijenjeno je sada ispraviti stvari kako bismo mogli bolje raditi na razumijevanju kompromisa i kompromisa.

NoSQL tvrda istina br. 1: JOIN-ovi znače dosljednost

Jedna od prvih zamjerki koje ljudi imaju oko SQL sustava su računski troškovi izvršavanja JOIN-a između dvije tablice. Ideja je pohraniti podatke na jednom mjestu. Ako vodite popis kupaca, stavite njihove adrese ulica u jednu tablicu, a u svaku drugu tablicu upotrijebite njihove ID-ove kupaca. Kada izvučete podatke, JOIN povezuje ID-ove s adresama i sve ostaje u skladu.

Nevolja je u tome što JOIN-ovi mogu biti skupi, a neki DBA-ovi izmislili su složene JOIN-ove naredbe koje zabrljaju um, pretvarajući čak i najbrži hardver u mulj. Nije iznenadilo da su NoSQL programeri svoj nedostatak PRIDRUŽENJA pretvorili u značajku: Neka adresa kupca ostane u istoj tablici kao i sve ostalo! NoSQL način je pohranjivanje parova ključ / vrijednost za svaku osobu. Kad dođe vrijeme, sve ih dohvatite.

Jao, ljudi koji žele da njihovi stolovi budu dosljedni i dalje trebaju PRIDRUŽIVANJA. Jednom kad započnete pohranjivati ​​adrese kupaca sa svime ostalim o njima, često ćete dobiti više kopija tih adresa u svakoj tablici. A kad imate više kopija, morate ih sve istovremeno ažurirati. Ponekad to uspije, ali kad ne uspije, NoSQL nije spreman pomoći u transakcijama.

Čekajte, kažete, zašto ne biste imali zasebnu tablicu s podacima o kupcu? Tako će se promijeniti samo jedan zapis. To je sjajna ideja, ali sada sami morate napisati PRIDRUŽI se u svojoj logici.

NoSQL tvrda istina br. 2: Lukave transakcije

Recimo da ste u redu da živite bez PRIDRUŽIVANJA stolova jer želite brzinu. Prihvatljiv je kompromis, a ponekad SQL DBA-i denormaliziraju tablice upravo iz ovog razloga.

Nevolja je u tome što NoSQL otežava održavanje različitih unosa dosljednim. Često nema transakcija koje bi osigurale da se promjene u više tablica vrše zajedno. Za to ste sami, a pad sustava može osigurati da se tablice pretvore u nesklad.

Najranije implementacije NoSQL-a bacile su nos na ove transakcije. Nudili bi popise podataka koji su dosljedni, osim kad nisu. Drugim riječima, tražili su podatke najniže vrijednosti gdje pogreške ne bi imale značajne razlike.

Sada neke NoSQL implementacije nude nešto što se približava transakciji. Na primjer, Oracleov NoSQL proizvod nudi transakcijsku kontrolu nad podacima zapisanim u jedan čvor i omogućuje vam odabir fleksibilne količine dosljednosti na više čvorova. Ako želite savršenu dosljednost, morate pričekati da svako upisivanje dosegne sve čvorove. Nekoliko drugih NoSQL spremišta podataka eksperimentira s dodavanjem dodatne strukture i zaštite poput ove.

NoSQL tvrda istina br. 3: Baze podataka mogu biti pametne

Mnogi NoSQL programeri vole se hvaliti kako njihov lagani kôd i jednostavni mehanizam rade izuzetno brzo. Obično su u pravu kad su zadaci jednostavni poput unutrašnjosti NoSQL-a, ali to se mijenja kad problemi postanu sve teži.

Razmotrite stari izazov PRIDRUŽIVANJA. Jednom kada NoSQL programeri počnu generirati vlastite naredbe JOIN u svojoj logici, počinju to pokušavati učiniti učinkovito. Programeri SQL-a desetljećima su razvijali sofisticirane motore za što efikasniju obradu naredbi JOIN. Jedan programer SQL-a rekao mi je da pokušava sinkronizirati svoj kôd s okretanjem tvrdog diska, tako da će tražiti podatke samo kad je glava bila točno iznad pravog mjesta. To se može činiti ekstremno, ali programeri SQL-a desetljećima rade na sličnim hakovima.

Nema sumnje da programeri danima čupaju kosu pokušavajući strukturirati svoje SQL upite kako bi iskoristili svu tu latentnu inteligenciju. Možda nije jednostavno dodirnuti, ali kad programer to shvati, baze podataka zaista mogu pjevati.

Sofisticirani jezik upita poput SQL-a uvijek može nadmašiti nesofisticirani jezik upita poput onih pronađenih u NoSQL-u. Možda to neće imati veze s jednostavnim rezultatima, ali kad radnja postane složena, SQL se izvršava na stroju tik do podataka. Ima malo dodatnih troškova za dohvaćanje podataka i obavljanje posla. NoSQL poslužitelj obično mora podatke slati tamo kamo idu.

NoSQL tvrda istina br. 4: Previše pristupnih modela

U teoriji bi SQL trebao biti standardni jezik. Ako koristite SQL za jednu bazu podataka, trebali biste moći pokrenuti isti upit u drugoj sukladnoj verziji. Ova tvrdnja može funkcionirati s nekoliko jednostavnih upita, ali svaki DBA zna da će trebati godine da se nauče osobine SQL-a za različite verzije iste baze podataka. Ključne riječi su redefinirane, a upiti koji su radili na jednoj verziji neće raditi s drugom.

NoSQL je još tajniji. To je poput Babilonske kule. Od početka su programeri NoSQL pokušali zamisliti najbolji mogući jezik, ali imaju vrlo različitu maštu. Ovo je žarište eksperimentiranja dobro - sve dok ne pokušate skakati između alata. Upit za CouchDB izražava se kao par JavaScript funkcija za mapiranje i smanjenje. Rane verzije Cassandre koristile su sirovi API niske razine nazvan Thrift; novije verzije nude CQL, jezik upita sličan SQL-u koji poslužitelj mora raščlaniti i razumjeti. Svaka je drugačija na svoj način.

Svaki alat nema samo svoje osobitosti, on ima potpuno drugačiju filozofiju i način izražavanja. Ne postoje jednostavni načini prebacivanja s jednog skladišta podataka na drugi, a često vam preostaje pisanje tona koda ljepila samo kako biste sebi dali mogućnost prebacivanja u budućnosti. To možda neće biti previše teško kad u sustav ubacujete parove ključeva i vrijednosti, ali može rasti sve više i više otežavajući složenost koju uvodite.

NoSQL tvrda istina br. 5: Fleksibilnost sheme problem je koji čeka da se dogodi

Jedna od sjajnih ideja iz NoSQL modela ne zahtijeva shemu. Drugim riječima, programeri ne trebaju unaprijed odlučivati ​​koji će stupci biti dostupni za svaki redak u tablici. Jedan unos može imati priključenih 20 nizova, drugi može imati 12 cijelih brojeva, a drugi može biti potpuno prazan. Programeri mogu donijeti odluku kad god nešto trebaju pohraniti. Ne trebaju tražiti dopuštenje DBA-e i ne trebaju ispuniti sve papire da bi dodali novi stupac.

Sva ta sloboda zvuči opojno i u pravim rukama može ubrzati razvoj. No, je li stvarno dobra ideja za bazu podataka koja bi mogla živjeti kroz tri tima programera? Je li uopće izvedivo za bazu podataka koja bi mogla trajati duže od šest mjeseci?

Drugim riječima, programeri bi možda željeli slobodu bacanja bilo kojeg starog para u bazu podataka, ali želite li biti peti programer koji se pojavio nakon što su četvorica odabrala vlastite ključeve? Lako je zamisliti razne prikaze "rođendana", pri čemu svaki programer odabire vlastiti prikaz kao ključ prilikom dodavanja rođendana korisnika u unos. Tim programera može zamisliti gotovo sve: "bday", "b-day", "birthday".

NoSQL struktura ne nudi podršku za ograničavanje ovog problema, jer bi to značilo reimagining sheme. Ne želi biti grub prema blagom totalno cool programerima. Shema bi se našla na putu.

Činjenica je da dodavanje stupca u tablicu nije velika stvar, a disciplina bi zapravo mogla biti dobra za programera. Kao što pomaže prisiliti programere da odrede varijabilne tipove, tako također pomaže prisiliti programere da odrede vrstu podataka koji su pridruženi stupcu. Da, DBA može prisiliti razvojnog programera da ispuni obrazac u tri primjerka prije pričvršćivanja tog stupca, ali nije toliko loš kao da se bavite s pola tuceta različitih tipki koje je programer stvorio u hodu.

NoSQL tvrda istina br. 6: Bez dodataka

Recimo da ne želite sve podatke u svim retcima i da želite zbroj jednog stupca. Korisnici SQL-a mogu izvršiti upit pomoću operacije SUM i poslati vam jedan - samo jedan - broj.

Korisnici NoSQL-a dobivaju sve podatke koji su im poslani natrag, a zatim mogu sami izvršiti dodavanje. Zbrajanje nije problem jer treba približno isto toliko vremena da se zbroje brojevi na bilo kojem stroju. Međutim, slanje podataka okolo je sporo, a propusnost potrebna za slanje svih tih podataka može biti skupa.

U NoSQL bazama podataka ima nekoliko dodataka. Ako želite učiniti bilo što osim pohraniti i dohvatiti podatke, vjerojatno ćete to učiniti sami. U mnogim ćete slučajevima to učiniti na drugom stroju s kompletnom kopijom podataka. Pravi je problem taj što često može biti korisno izvršiti sva izračunavanja na stroju koji drži podatke jer otpremanje podataka zahtijeva vrijeme. Ali teško za vas.

NoSQL rješenja se pojavljuju. Struktura upita Map and Reduce iz MongoDB-a daje vam proizvoljnu JavaScript strukturu za ključanje podataka. Hadoop je moćan mehanizam za distribuciju računanja po hrpi strojeva koji također sadrži podatke. To je struktura koja se brzo razvija i nudi alate koji se brzo poboljšavaju za izgradnju sofisticirane analize. Jako je cool, ali još uvijek novo. A tehnički je Hadoop potpuno drugačija modna riječ od NoSQL-a, iako razlika između njih blijedi.

NoSQL tvrda istina br. 7: Manje alata

Naravno, možete instalirati i pokrenuti svoj NoSQL na vašem poslužitelju. Svakako, možete napisati vlastiti prilagođeni kôd za guranje i izvlačenje podataka iz stoga. Ali što ako želite učiniti više? Što ako želite kupiti jedan od onih otmjenih paketa za izvještavanje? Ili paket za grafički prikaz? Ili da preuzmete neke alate otvorenog koda za stvaranje grafikona?

Nažalost, većina alata napisana je za SQL baze podataka. Ako želite generirati izvješća, stvoriti grafikone ili učiniti nešto sa svim podacima u vašem NoSQL stogu, morat ćete započeti s kodiranjem. Standardni alati su spremni za uklanjanje podataka iz Oracle, Microsoft SQL, MySQL i Postgres. Vaši su podaci u NoSQL-u? Rade na tome.

I oni će se malo potruditi. Čak i ako preskoče sve obruče kako bi se pokrenuli s jednom od NoSQL baza podataka, morat će ispočetka ispočetka da bi obrađivali sljedeći sustav. Postoji više od 20 različitih NoSQL izbora, koji svi imaju svoju vlastitu filozofiju i svoj način rada s podacima. Proizvođačima alata bilo je dovoljno teško podržati posebnosti i nedosljednosti u SQL-u, ali još je složenije učiniti alate radnim uz svaki NoSQL pristup.

To je problem koji će polako nestajati. Programeri mogu osjetiti uzbuđenje u NoSQL-u i oni će modificirati svoje alate za rad s tim sustavima, ali trebat će vremena. Možda će tada početi na MongoDB-u, što vam neće pomoći jer vodite Cassandru. Standardi pomažu u ovakvim situacijama, a NoSQL nije velik u standardima.

NoSQL nedostaci ukratko

Svi ovi NoSQL-ovi nedostaci mogu se svesti na jednu jednostavnu izjavu: NoSQL odbacuje funkcionalnost zbog brzine. Ako vam funkcija ne treba, bit ćete dobro, ali ako vam zatreba u budućnosti, bit će vam žao.

Revolucije su endemi tehnološke kulture. Nailazi nova skupina koja se pita zašto je posljednja generacija izgradila nešto tako složeno, a oni su krenuli rušiti stare institucije. Nakon nekog vremena počinju shvaćati zašto su sve stare institucije bile tako složene i ponovno počinju implementirati značajke.

To vidimo u svijetu NoSQL-a, jer neki projekti počinju dodavati stvari koje izgledaju kao transakcije, sheme i standardi. To je priroda napretka. Rušimo stvari samo da bismo ih ponovo izgradili. NoSQL je završio s prvom fazom revolucije, a sada je vrijeme za drugu. Kralj je mrtav. Živio kralj.

Povezani članci

  • NoSQL izdvajanja: Nove baze podataka za nove aplikacije
  • Prvi pogled: Oracle NoSQL baza podataka
  • Naprećući se NoSQL: pregled MongoDB-a
  • 10 bitnih savjeta za izvedbu MySQL-a
  • 10 osnovnih MySQL alata za administratore
  • Ovladajte MySQL-om u Amazonovom oblaku
  • Vrijeme je za NoSQL standarde

Ova priča, "7 tvrdih istina o NoSQL revoluciji", izvorno je objavljena na .com. Pratite najnovija dostignuća u upravljanju podacima na .com. Za najnovija dostignuća u vijestima o poslovnoj tehnologiji, slijedite .com na Twitteru.