Ohjelmointi

7 kovaa totuutta NoSQL-vallankumouksesta

NoSQL-muotisana on ollut metastasoitunut useita vuosia. Innostus näistä nopeista tietovarastoista on ollut päihdyttävää, ja olemme yhtä syyllisiä kuin kukaan nähdessään NoSQL: n uraauurtavan vetovoiman. Kuitenkin kuherruskuukausi on loppumassa, ja on aika alkaa tasapainottaa innostustamme joidenkin gimlet-silmäisten kovien totuuksien kanssa.

Älä ymmärrä meitä väärin. Yritämme edelleen kokeilla viimeisintä kokeilua yksinkertaisen tietojen tallennusmekanismin rakentamiseksi. Löydämme edelleen syvää arvoa MongoDB-, CouchDB-, Cassandra-, Riak- ja muissa NoSQL-standouteissa. Suunnittelemme edelleen heittää joitain luotettavimpia tietojasi näihin koodipinoihin, koska ne kasvavat paremmin ja taistelutestatusti päivittäin.

[Myös: NoSQL-erotukset: Uudet tietokannat uusille sovelluksille | Ensin: Oracle NoSQL -tietokanta | Saat tiivistelmän tärkeimmistä tarinoista joka päivä Daily-uutiskirjeessä. ]

Mutta olemme alkaneet tuntea hankaus, koska NoSQL-järjestelmät eivät ole kaukana täydellisestä sovituksesta ja hankaa usein väärällä tavalla. Älykkäimmät kehittäjät tiesivät tämän alusta alkaen. He eivät polttaneet SQL-käsikirjoja eivätkä lähettäneet ikäviä grammaa kerran omistautuneen SQL-toimittajansa myyntihenkilöstölle. Ei, älykkäät NoSQL-kehittäjät totesivat yksinkertaisesti, että NoSQL oli "ei vain SQL". Jos massat tulkitsivat väärin lyhenteen, se oli heidän ongelmansa.

Tämä luettelo kahvoista, suurista ja pienistä, on siis yritys dokumentoida tämä tosiasia ja puhdistaa ilma. Sen on tarkoitus asentaa asiat nyt, jotta voimme tehdä parempaa työtä ymmärtämällä kompromisseja ja kompromisseja.

NoSQL: n kova totuus nro 1: LIITTYMINEN tarkoittaa johdonmukaisuutta

Yksi ensimmäisistä haitoista, joita ihmisillä on SQL-järjestelmistä, on JOINin suorittamisen laskentakustannukset kahden taulukon välillä. Ajatuksena on tallentaa tiedot yhteen ja vain yhteen paikkaan. Jos pidät luetteloa asiakkaista, lisää heidän katuosoitteensa yhteen taulukkoon ja käytä heidän asiakastunnuksiaan kaikissa muissa taulukoissa. Kun vedät tietoja, JOIN yhdistää tunnukset osoitteisiin ja kaikki pysyy yhtenäisenä.

Ongelmana on, että JOINit voivat olla kalliita, ja jotkut DBA: t ovat koonneet monimutkaisia ​​JOIN-komentoja, jotka sekoittavat mielen ja kääntävät jopa nopeimmat laitteistot lieteeksi. Ei ollut yllätys, että NoSQL-kehittäjät muuttivat JOIN-tunnusten puuttumisen ominaisuudeksi: Säilytetään vain asiakkaan osoite samassa taulukossa kuin kaikki muutkin! NoSQL-tapa on tallentaa avainarvopareja jokaiselle henkilölle. Kun aika tulee, haet ne kaikki.

Valitettavasti ihmiset, jotka haluavat pöytiensä olevan yhdenmukaiset, tarvitsevat vielä LIITTYMISIÄ. Kun aloitat asiakkaiden osoitteiden tallentamisen kaiken muun kanssa, päädyt usein useisiin kopioihin näistä osoitteista kussakin taulukossa. Ja kun sinulla on useita kopioita, sinun on päivitettävä ne kaikki samanaikaisesti. Joskus se toimii, mutta kun se ei toimi, NoSQL ei ole valmis auttamaan tapahtumissa.

Odota, sanot, miksi ei ole erillistä taulukkoa asiakkaan tiedoilla? Tällöin vain yksi tietue on muutettavissa. Se on hieno idea, mutta nyt sinun on kirjoitettava LIITÄ itsesi omaan logiikkaasi.

NoSQL: n kova totuus nro 2: Hankalat tapahtumat

Oletetaan, että voit elää ilman JOINING-pöytiä, koska haluat nopeuden. Se on hyväksyttävä kompromissi, ja joskus SQL DBA: t denormaloivat taulukot juuri tästä syystä.

Ongelmana on, että NoSQL vaikeuttaa eri merkintöjen pitämistä yhtenäisinä. Usein ei ole tapahtumia, joiden avulla voidaan varmistaa, että useisiin taulukoihin tehtävät muutokset tehdään yhdessä. Tätä varten olet yksin, ja kaatuminen voi varmistaa, että pöydät muuttuvat epäjohdonmukaisiksi.

Aikaisimmat NoSQL-toteutukset peukaloivat nenäänsä näihin tapahtumiin. He tarjoavat tietolistauksia, jotka ovat johdonmukaisia, paitsi silloin kun ne eivät olleet. Toisin sanoen, he etsivät pienimmän arvon tietoja, joissa virheillä ei ollut mitään olennaista eroa.

Jotkut NoSQL-toteutukset tarjoavat nyt jotain lähestymässä tapahtumaa. Esimerkiksi Oraclen NoSQL-tuote tarjoaa transaktiovalvonnan yhteen solmuun kirjoitettuihin tietoihin ja antaa sinun valita joustavan määrän yhtenäisyyttä useille solmuille. Jos haluat täydellisen yhtenäisyyden, joudut odottamaan, että jokainen kirjoitus saavuttaa kaikki solmut. Useat muut NoSQL-tietovarastot kokeilevat lisäämällä tällaista rakennetta ja suojausta.

NoSQL: n kova totuus nro 3: Tietokannat voivat olla älykkäitä

Monet NoSQL-ohjelmoijat haluavat ylpeillä siitä, kuinka heidän kevyt koodi ja yksinkertainen mekanismi toimivat erittäin nopeasti. He ovat yleensä oikeassa, kun tehtävät ovat yhtä yksinkertaisia ​​kuin NoSQL: n sisäosat, mutta se muuttuu, kun ongelmat pahenevat.

Harkitse JOINin vanhaa haastetta. Kun NoSQL-ohjelmoijat alkavat luoda omia JOIN-komentoja omassa logiikassaan, he alkavat yrittää tehdä tämän tehokkaasti. SQL-kehittäjät ovat vuosikymmenien ajan kehittäneet kehittyneitä moottoreita käsittelemään JOIN-komentoja mahdollisimman tehokkaasti. Yksi SQL-kehittäjä kertoi minulle, että hän yritti synkronoida koodinsa pyörivän kiintolevyn kanssa, jotta hän pyytäisi tietoja vasta, kun pää oli juuri oikean pisteen yläpuolella. Tämä saattaa tuntua äärimmäiseltä, mutta SQL-kehittäjät ovat työskennelleet vastaavien hakkerointien parissa vuosikymmenien ajan.

Ei ole epäilystäkään siitä, että ohjelmoijat viettävät päiviä vetämällä hiuksensa yrittäessään rakentaa SQL-kyselyjään hyödyntääkseen tätä piilevää älyä. Napauttaminen ei ehkä ole helppoa, mutta kun ohjelmoija selvittää sen, tietokannat voivat todella laulaa.

Hienostuneella kyselykielellä, kuten SQL, on aina mahdollisuus peittää kehittyneempi kyselykieli, kuten NoSQL: ssä. Sillä ei ehkä ole väliä yksinkertaisilla tuloksilla, mutta kun toiminto muuttuu monimutkaiseksi, SQL suoritetaan koneella aivan tietojen vieressä. Sillä on vähän ylimääräisiä tietojen noutamista ja työn tekemistä. NoSQL-palvelimen on yleensä toimitettava tiedot mihin se menee.

NoSQL: n kova totuus nro 4: Liian monta pääsymallia

Teoriassa SQL: n oletetaan olevan vakiokieli. Jos käytät SQL: ää yhdessä tietokannassa, sinun pitäisi pystyä suorittamaan sama kysely toisessa yhteensopivassa versiossa. Tämä väite voi toimia muutamalla yksinkertaisella kyselyllä, mutta jokainen DBA tietää, että voi kestää vuosia oppia SQL: n omaleimaisuudet saman tietokannan eri versioille. Avainsanat määritellään uudelleen, ja yhdessä versiossa toimivat kyselyt eivät toimi toisen kanssa.

NoSQL on vielä arcane. Se on kuin Babelin torni. Alusta alkaen NoSQL-kehittäjät ovat kukin yrittäneet kuvitella parasta mahdollista kieltä, mutta mielikuvituksensa ovat hyvin erilaiset. Tämä kokeilualusta on hyvä - kunnes yrität siirtyä työkalujen välillä. CouchDB: n kysely ilmaistaan ​​JavaScript-toimintojen parina kartoitusta ja pienentämistä varten. Cassandran varhaisissa versioissa käytettiin raakaa, matalan tason sovellusliittymää nimeltä Thrift; uudemmat versiot tarjoavat CQL: n, SQL-tyyppisen kyselykielen, jonka palvelimen on jäsennettävä ja ymmärrettävä. Jokainen on erilainen omalla tavallaan.

Jokaisella työkalulla ei ole vain omia erikoispiirteitään, vaan sillä on aivan erilainen filosofia ja tapa ilmaista se. Ei ole helppoja tapoja vaihtaa tietovarastojen välillä, ja usein jätät kirjoittamaan tonnia liimakoodia vain antaa itsellesi mahdollisuus vaihtaa tulevaisuudessa. Tämä ei ehkä ole liian vaikeaa, kun täytät avain- ja arvopareja järjestelmään, mutta se voi kasvaa entisestään entistä monimutkaisemmaksi.

NoSQL: n kova totuus nro 5: Kaavion joustavuus on vaikeuksia odottaa tapahtumista

Yksi NoSQL-mallin upeista ideoista ei vaadi mallia. Toisin sanoen, ohjelmoijien ei tarvitse päättää etukäteen, mitkä sarakkeet ovat käytettävissä kullekin taulukon riville. Yhdessä merkinnässä voi olla 20 merkkijonoa, toisessa voi olla 12 kokonaislukua ja toinen voi olla täysin tyhjä. Ohjelmoijat voivat tehdä päätöksen aina, kun heidän on tallennettava jotain. Heidän ei tarvitse pyytää lupaa DBA: lta, eikä heidän tarvitse täyttää kaikkia paperityötä uuden sarakkeen lisäämiseksi.

Kaikki tämä vapaus kuulostaa päihdyttävältä, ja oikeissa käsissä se voi nopeuttaa kehitystä. Mutta onko se todella hyvä idea tietokannalle, joka saattaa elää kolmen kehittäjäryhmän kautta? Onko se edes toimiva tietokannalle, joka voi kestää yli kuusi kuukautta?

Toisin sanoen kehittäjät saattavat haluta vapauden heittää minkä tahansa vanhan parin tietokantaan, mutta haluatko olla viides kehittäjä, joka tulee mukaan, kun neljä on valinnut oman avaimensa? On helppo kuvitella erilaisia ​​"syntymäpäivän" esityksiä, jolloin kukin kehittäjä valitsee oman esityksensä avaimeksi, kun lisää käyttäjän syntymäpäivä merkintään. Joukkue kehittäjiä saattaa kuvitella melkein mitä tahansa: "bday", "b-day", "syntymäpäivä".

NoSQL-rakenne ei tarjoa mitään tukea tämän ongelman rajoittamiseksi, koska se tarkoittaisi kaavion uudistamista. Se ei halua ankaraa täysin viileiden kehittäjien täyteläinen. Malli saattaisi olla tiellä.

Tosiasia on, että sarakkeen lisääminen taulukkoon ei ole iso juttu, ja kuria voi todella olla hyvä kehittäjälle. Aivan kuten se auttaa pakottamaan kehittäjät nimeämään muuttujatyyppejä, se myös pakottaa kehittäjät nimeämään sarakkeeseen liitetyn datan tyypin. Kyllä, DBA voi pakottaa kehittäjän täyttämään lomakkeen kolmena kappaleena ennen kyseisen sarakkeen liittämistä, mutta se ei ole niin huono kuin käsitellä puoli tusinaa erilaista avainta, jotka ohjelmoija on luonut lennossa.

NoSQL: n kova totuus nro 6: Ei lisäominaisuuksia

Oletetaan, että et halua kaikkia tietoja kaikilla riveillä, ja haluat yhden sarakkeen summan. SQL-käyttäjät voivat suorittaa kyselyn SUM-toiminnolla ja lähettää sinulle yhden - vain yhden - numeron.

NoSQL-käyttäjät saavat kaikki lähetetyt tiedot takaisin heille ja voivat sitten tehdä lisäyksen itse. Lisäys ei ole ongelma, koska kaikkien koneiden numeroiden yhteenlaskeminen vie suunnilleen saman ajan. Datan lähettäminen ympäri on kuitenkin hidasta, ja kaikkien näiden tietojen lähettämiseen tarvittava kaistanleveys voi olla kallista.

NoSQL-tietokannoissa on vain vähän lisäominaisuuksia. Jos haluat tehdä muuta kuin tallentaa ja hakea tietoja, aiot tehdä sen itse. Monissa tapauksissa aiot tehdä sen toisella koneella täydellä kopiolla tiedoista. Todellinen ongelma on, että usein voi olla hyödyllistä suorittaa kaikki laskelmat koneella, jolla tietoja on, koska tietojen lähettäminen vie aikaa. Mutta kovaa sinulle.

NoSQL-ratkaisuja on tulossa. MongoDB: n Kartta ja vähennä -kyselyrakenne antaa mielivaltaisen JavaScript-rakenteen tietojen kiehumiseksi. Hadoop on tehokas mekanismi laskennan jakamiseksi koko konepinolle, joka myös pitää tietoja. Se on nopeasti kehittyvä rakenne, joka tarjoaa nopeasti parantavia työkaluja hienostuneen analyysin rakentamiseen. Se on erittäin siistiä, mutta silti uusi. Ja teknisesti Hadoop on täysin erilainen muotisana kuin NoSQL, vaikka niiden välinen ero hiipuu.

NoSQL: n kova totuus nro 7: Vähemmän työkaluja

Toki, voit saada NoSQL-pinoasi toimimaan palvelimellasi. Toki, voit kirjoittaa oman mukautetun koodisi työntääksesi ja vetääksesi tietoja pinosta. Mutta entä jos haluat tehdä enemmän? Entä jos haluat ostaa jonkin näistä hienoista raportointipaketeista? Tai piirtopaketti? Tai ladata joitain avoimen lähdekoodin työkaluja kaavioiden luomiseen?

Valitettavasti suurin osa työkaluista on kirjoitettu SQL-tietokantoihin. Jos haluat luoda raportteja, luoda kaavioita tai tehdä jotain kaikkien NoSQL-pinoasi sisältävien tietojen kanssa, sinun on aloitettava koodaus. Vakiotyökalut ovat valmiita piilottamaan tietoja Oraclesta, Microsoft SQL: stä, MySQL: stä ja Postgresistä. Tietosi ovat NoSQL: ssä? He työskentelevät sen parissa.

Ja he työskentelevät sen kanssa vähän. Vaikka he hyppäävät kaikkien vanteiden läpi päästäkseen käyntiin jonkin NoSQL-tietokannan kanssa, heidän on aloitettava alusta alusta käsittelemään seuraavaa järjestelmää. NoSQL-valintoja on yli 20 erilaista, jotka kaikki käyttävät omaa filosofiaansa ja omaa tapaansa työskennellä tietojen kanssa. Työkalujen valmistajien oli tarpeeksi vaikeaa tukea SQL: n ominaistilaisuuksia ja epäjohdonmukaisuuksia, mutta on vielä monimutkaisempaa saada työkalut toimimaan jokaisen NoSQL-lähestymistavan kanssa.

Tämä on ongelma, joka häviää hitaasti. Kehittäjät voivat tuntea NoSQL: n jännityksen ja muokkaavat työkalujaan toimiakseen näiden järjestelmien kanssa, mutta se vie aikaa. Ehkä sitten he aloittavat MongoDB: n, mikä ei auta sinua, koska käytät Cassandraa. Standardit auttavat tällaisissa tilanteissa, eikä NoSQL ole iso standardien suhteen.

NoSQL-puutteet pähkinänkuoressa

Kaikki nämä NoSQL-puutteet voidaan vähentää yhdeksi yksinkertaiseksi lausunnoksi: NoSQL heittää toiminnallisuuden pois nopeuden vuoksi. Jos et tarvitse toimintoja, olet kunnossa, mutta jos tarvitset sitä tulevaisuudessa, olet pahoillani.

Vallankumoukset ovat endeemisiä teknologiakulttuurille. Uusi ryhmä tulee mukaan ja ihmettelee, miksi viimeinen sukupolvi rakensi jotain niin monimutkaista, ja he ryhtyivät hajottamaan vanhoja instituutioita. Jonkin ajan kuluttua he alkavat ymmärtää, miksi kaikki vanhat instituutiot olivat niin monimutkaisia, ja he alkavat toteuttaa ominaisuuksia jälleen.

Näemme tämän NoSQL-maailmassa, kun jotkut projektit alkavat lisätä asioita, jotka näyttävät tapahtumista, kaavioilta ja standardeilta. Tämä on edistymisen luonne. Me repämme asioita vain rakentaaksemme ne takaisin. NoSQL on saanut aikaan vallankumouksen ensimmäisen vaiheen, ja nyt on aika tehdä toinen. Kuningas on kuollut. Eläköön kuningas.

Aiheeseen liittyvät artikkelit

  • NoSQL-erotukset: Uudet tietokannat uusille sovelluksille
  • Ensin: Oracle NoSQL -tietokanta
  • NoSQL: n joustaminen: MongoDB tarkistuksessa
  • 10 välttämätöntä suorituskykyvinkkiä MySQL: lle
  • 10 välttämätöntä MySQL-työkalua järjestelmänvalvojille
  • Hallitse MySQL Amazon-pilvessä
  • NoSQL-standardien aika on nyt

Tämä tarina "7 kovaa totuutta NoSQL-vallankumouksesta" julkaistiin alun perin osoitteessa .com. Seuraa viimeisintä kehitystä tiedonhallinnassa osoitteessa .com. Seuraa viimeisimpiä yritysteknologiauutisia seuraamalla .com Twitterissä.