Programavimas

Sumažinkite SQL-NoSQL spragą su „Apache Phoenix“

„Apache Phoenix“ yra palyginti naujas atvirojo kodo „Java“ projektas, suteikiantis JDBC tvarkyklę ir SQL prieigą prie „Hadoop“ NoSQL duomenų bazės: HBase. Jis buvo sukurtas kaip „Salesforce“ vidinis projektas, atidarytas iš „GitHub“ ir 2014 m. Gegužės mėn. Tapo aukščiausio lygio „Apache“ projektu. Jei turite tvirtų SQL programavimo įgūdžių ir norėtumėte, kad juos galėtumėte naudoti su galinga „NoSQL“ duomenų baze, „Phoenix“ gali būti būtent tai, ko ieškote!

Ši pamoka supažindina „Java“ kūrėjus su „Apache Phoenix“. Kadangi „Phoenix“ veikia virš „HBase“, pradėsime nuo „HBase“ apžvalgos ir kuo ji skiriasi nuo reliacinių duomenų bazių. Sužinosite, kaip „Phoenix“ įveikia atotrūkį tarp SQL ir „NoSQL“ ir kaip jis optimizuotas efektyviai sąveikaujant su „HBase“. Neturėdami tų pagrindų, mes praleisime likusią straipsnio dalį mokydamiesi, kaip dirbti su „Phoenix“. Jūs sukursite ir integruosite „HBase“ ir „Phoenix“, sukursite „Java“ programą, kuri prisijungs prie „HBase“ per „Phoenix“, ir jūs parašysite savo pirmąją lentelę, įterpsite duomenis ir vykdysite keletą užklausų.

Keturių tipų NoSQL duomenų saugykla

Įdomu (ir šiek tiek ironiška), kad „NoSQL“ duomenų saugyklos skirstomos pagal ypatybę, kurios jiems trūksta, būtent SQL. „NoSQL“ duomenų saugyklos yra keturių pagrindinių skonių:

  1. Raktų / vertės saugyklos susieti konkretų raktą su verte, kuri gali būti dokumentas, masyvas ar paprastas tipas. Raktų / vertybių saugyklų pavyzdžiai yra „Memcached“, „Redis“ ir „Riak“.
  2. Dokumentų parduotuvės tvarkyti dokumentus, kurie paprastai yra be schemų struktūros, pavyzdžiui, JSON, kurie gali būti savavališkai sudėtingi. Daugumoje dokumentų saugyklų palaikomi pirminiai indeksai, antriniai indeksai ir sudėtingos užklausos. Dokumentų parduotuvių pavyzdžiai yra „MongoDB“ ir „CouchBase“.
  3. Grafikų duomenų bazės daugiausia dėmesio skirti santykiams tarp objektų, kuriuose mazgai saugomi, ir tarp mazgų. Grafikų duomenų bazės pavyzdys yra Neo4j.
  4. Į stulpelius orientuotos duomenų bazės saugoti duomenis kaip duomenų stulpelių sekcijas, o ne kaip duomenų eilutes. „HBase“ yra į stulpelius orientuota duomenų bazė, taip pat ir „Cassandra“.

HBase: gruntas

„Apache HBase“ yra „NoSQL“ duomenų bazė, veikianti „Hadoop“ viršuje kaip paskirstyta ir keičiama didelių duomenų saugykla. „HBase“ yra į stulpelius orientuota duomenų bazė, kuri naudoja „Hadoop Distributed File System“ (HDFS) paskirstytojo apdorojimo galimybes ir „Hadoop“ „MapReduce“ programavimo paradigmą. Jis buvo sukurtas talpinti dideles lenteles su milijardais eilučių ir potencialiai milijonais stulpelių, visi einantys per prekių aparatūros klasterį.

„Apache HBase“ sujungia „Hadoop“ galią ir mastelį su galimybe atlikti užklausas dėl atskirų įrašų ir vykdyti „MapReduce“ procesus.

Be „Hadoop“ paveldėtų galimybių, „HBase“ yra savaime galinga duomenų bazė: ji sujungia realaus laiko užklausas su raktų / reikšmių saugyklos sparta, patikima lentelių nuskaitymo strategija, leidžiančia greitai rasti įrašus, ir palaiko paketinį apdorojimą. naudojant „MapReduce“. Taigi „Apache HBase“ sujungia „Hadoop“ galią ir mastelį su galimybe pateikti užklausą dėl atskirų įrašų ir vykdyti „MapReduce“ procesus.

„HBase“ duomenų modelis

„HBase“ tvarko duomenis kitaip nei tradicinės reliacinės duomenų bazės, palaikydamos keturių dimensijų duomenų modelį, kuriame kiekvieną „langelį“ vaizduoja keturios koordinatės:

  1. Eilutės raktas: Kiekvienoje eilutėje yra unikalus eilutės klavišas kurį viduje parodo baitų masyvas, tačiau jis neturi jokio oficialaus duomenų tipo.
  2. Kolonų šeima: Eilutėje esantys duomenys yra suskirstyti į kolonų šeimos; kiekvienoje eilutėje yra tas pats stulpelių šeimų rinkinys, tačiau kiekvienai stulpelių šeimai nereikia išlaikyti to paties stulpelių kvalifikatorių rinkinio. Galite manyti, kad stulpelių šeimos yra panašios į reliacinės duomenų bazės lenteles.
  3. Stulpelio kvalifikacija: Jie yra panašūs į reliacinės duomenų bazės stulpelius.
  4. Versija: Kiekviename stulpelyje gali būti konfigūruojamas skaičius versijos. Jei prašote stulpelyje esančių duomenų nenurodydami versijos, gausite naujausią versiją, tačiau galite paprašyti senesnių versijų nurodydami versijos numerį.

1 paveiksle parodyta, kaip šios keturių matmenų koordinatės yra susijusios.

Stevenas Hainesas

1 paveiksle pateiktas modelis rodo, kad eilutę sudaro eilutės raktas ir savavališkas skaičius stulpelių šeimų. Kiekvienas eilutės raktas yra susietas su „eilučių lentelėse“, kurių kiekviena turi savo stulpelius, rinkiniu. Nors kiekviena lentelė turi egzistuoti, stulpeliai lentelėse gali būti skirtingi. Kiekvienoje stulpelių šeimoje yra stulpelių rinkinys ir kiekviename stulpelyje yra versijų rinkinys, susiejantis su tikraisiais eilutės duomenimis.

Jei modeliuotume asmenį, eilutės raktas gali būti asmens socialinio draudimo numeris (norint jį unikaliai identifikuoti), ir mes galime turėti stulpelių šeimas, tokias kaip adresas, darbas, išsilavinimas ir pan. Viduje adresas stulpelių šeima galime turėti gatvės, miesto, valstijos ir pašto kodo stulpelius, o kiekviena versija gali atitikti vietą, kurioje asmuo gyveno bet kuriuo metu. Naujausioje versijoje gali būti nurodytas miestas „Los Andželas“, o ankstesnėje - „Niujorkas“. Šį modelio pavyzdį galite pamatyti 2 paveiksle.

Stevenas Hainesas

Apibendrinant, HBase yra į stulpelius orientuota duomenų bazė, vaizduojanti duomenis keturių matmenų modelyje. Jis sukurtas ant „Hadoop Distributed File System“ (HDFS), kuris skaido duomenis galimai tūkstančiuose prekių aparatuose. Kūrėjai, naudojantys „HBase“, gali tiesiogiai prieiti prie duomenų naudodamiesi eilutės raktu, nuskaitydami eilių raktų diapazoną arba naudodami paketinį apdorojimą per „MapReduce“.

Pagrindiniai tyrimai

Gali būti, kad nesate susipažinę su garsiosiomis (geeks) „Big Data White Paper“ knygomis. 2003–2006 m. „Google Research“ išleistose šiose baltosiose knygose buvo pristatyti trijų mūsų žinomų Hadoop ekosistemos ramsčių tyrimai:

  • „Google“ failų sistema (GFS): „Hadoop“ paskirstytų failų sistema (HDFS) yra atvirojo šaltinio GFS diegimas ir apibrėžia, kaip duomenys paskirstomi prekių mašinų grupėje.
  • „MapReduce“: funkcinė programavimo paradigma duomenims, paskirstytiems per HDFS klasterį, analizuoti.
  • „Bigtable“: paskirstyta saugojimo sistema, skirta struktūrizuotiems duomenims valdyti, skirta išplėsti iki labai didelių dydžių - petabaitų duomenų tūkstančiuose prekių automatų. „HBase“ yra atvirojo šaltinio „Bigtable“ diegimas.

„NoSQL“ spragos mažinimas: „Apache Phoenix“

„Apache Phoenix“ yra aukščiausio lygio „Apache“ projektas, teikiantis SQL sąsają „HBase“, HBase modelių priskyrimas reliacinių duomenų bazių pasauliui. Žinoma, „HBase“ pateikia savo API ir apvalkalą tokioms funkcijoms atlikti kaip nuskaitymas, gavimas, įdėjimas, sąrašas ir kt., Tačiau daugiau kūrėjų žino SQL nei NoSQL. „Phoenix“ tikslas yra pateikti paprastai suprantamą „HBase“ sąsają.

Kalbant apie savybes, „Phoenix“ atlieka šiuos veiksmus:

  • Pateikia JDBC tvarkyklę sąveikai su HBase.
  • Palaiko didžiąją dalį ANSI SQL standarto.
  • Palaiko DDL operacijas, tokias kaip CREATE TABLE, DROP TABLE ir ALTER TABLE.
  • Palaiko DML operacijas, tokias kaip UPSERT ir DELETE.
  • Sudaro SQL užklausas į vietinius HBase nuskaitymus ir tada susieja atsakymą į JDBC ResultSets.
  • Palaiko versijas schemas.

Be to, kad palaiko didžiulį SQL operacijų rinkinį, „Phoenix“ taip pat veikia labai gerai. Jis analizuoja SQL užklausas, suskirsto jas į kelis „HBase“ nuskaitymus ir vykdo jas lygiagrečiai, naudodamas vietinį „API“, o ne „MapReduce“ procesus.

„Phoenix“ naudoja dvi strategijas - bendrus procesorius ir pasirinktinius filtrus, kad skaičiavimai būtų priartinti prie duomenų:

  • Bendri procesoriai atlikti operacijas serveryje, o tai sumažina kliento / serverio duomenų perdavimą.
  • Pasirinktiniai filtrai sumažinti iš serverio į užklausos atsakymą grąžintų duomenų kiekį, o tai dar labiau sumažina perduotų duomenų kiekį. Tinkinti filtrai naudojami keliais būdais:
    1. Vykdant užklausą, pasirinktinis filtras gali būti naudojamas nustatyti tik pagrindines stulpelių šeimas, reikalingas paieškai patenkinti.
    2. A praleisti nuskaitymo filtrą naudoja „HBase“ SEEK_NEXT_USING_HINT, kad greitai pereitų nuo vieno įrašo prie kito, o tai pagreitina taškų užklausas.
    3. Pasirinktinis filtras gali „sūdyti duomenis“, o tai reiškia, kad jis prideda maišos baitą eilutės rakto pradžioje, kad galėtų greitai rasti įrašus.

Apibendrinant, „Phoenix“ naudoja tiesioginę prieigą prie „HBase“ API, bendrų procesorių ir pasirinktinių filtrų, kad suteiktų jums milisekundės lygio našumą mažiems duomenų rinkiniams ir antrojo lygio našumą mažiems rinkiniams. Visų pirma, „Phoenix“ pateikia šias galimybes kūrėjams per pažįstamą JDBC ir SQL sąsają.

Pradėkite nuo „Phoenix“

Norėdami naudoti „Phoenix“, turite atsisiųsti ir įdiegti „HBase“ ir „Phoenix“. „Phoenix“ atsisiuntimo puslapį (ir „HBase“ suderinamumo pastabas) rasite čia.

Atsisiųskite ir nustatykite

Šio rašymo metu naujausia „Phoenix“ versija yra 4.6.0, o atsisiuntimo puslapyje rašoma, kad 4.x suderinama su „HBase“ 0.98.1+ versija. Savo pavyzdžiu atsisiunčiau naujausią „Phoenix“ versiją, sukonfigūruotą dirbti su „HBase 1.1“. Jį rasite aplanke: feniksas-4.6.0-HBase-1.1 /.

Štai sąranka:

  1. Atsisiųskite ir išspauskite šį archyvą, tada atsisiųskite HBase naudodami vieną iš čia rekomenduojamų veidrodžių puslapių. Pavyzdžiui, aš pasirinkau veidrodį, perėjau į 1.1.2 aplanką ir atsisiunčiau „hbase-1.1.2-bin.tar.gz“.
  2. Išspauskite šį failą ir sukurkite HBASE_HOME į tai nurodantis aplinkos kintamasis; pavyzdžiui, prie savo pridėjau šiuos dalykus ~ / .bash_profile failas („Mac“): eksportuoti HBASE_HOME = / Users / shaines / Downloads / hbase-1.1.2.

Integruokite „Phoenix“ su „HBase“

„Phoenix“ integravimo į „HBase“ procesas yra paprastas:

  1. Nukopijuokite šį failą iš „Phoenix“ šakninio katalogo į „HBase“ lib katalogas: phoenix-4.6.0-HBase-1.1-server.jar.
  2. Paleiskite „HBase“ vykdydami šį scenarijų iš „HBase“ šiukšliadėžė katalogas:./start-hbase.sh.
  3. Vykdydami „HBase“ patikrinkite, ar „Phoenix“ veikia vykdydamas SQLLine konsolę, vykdydamas šią „Phoenix“ komandą šiukšliadėžė katalogas: ./sqlline.py localhost.

„SQLLine“ konsolė

sqlline.py yra „Python“ scenarijus, paleidžiantis konsolę, jungiančią prie „HBase“ „Zookeeper“ adreso; vietinis šeimininkas tokiu atveju. Čia galite apžvelgti pavyzdį, kurį apibendrinsiu šiame skyriuje.

Pirmiausia peržiūrėkime visas HBase lenteles vykdydami ! stalas:

 0: jdbc: phoenix: localhost>! Lentelės + --------------------------------------- --- + ------------------------------------------ + --- --------------------------------------- + ---------- -------------------------------- + ----------------- --------- + | TABLE_CAT | TABLE_SCHEM | LENTELĖ | TABLE_TYPE | PASTABOS | + ------------------------------------------ + ------ ------------------------------------ + ------------- ----------------------------- + -------------------- ---------------------- + -------------------------- + | | SISTEMA | KATALOGAS | SISTEMOS LENTELĖ | | | SISTEMA | FUNKCIJA | SISTEMOS LENTELĖ | | | SISTEMA | SEKSAS | SISTEMOS LENTELĖ | | | SISTEMA | STATISTIKA | SISTEMOS LENTELĖ | + ------------------------------------------ + ------ ------------------------------------ + ------------- ----------------------------- + -------------------- ---------------------- + -------------------------- + 

Kadangi tai yra naujas „HBase“ egzempliorius, vienintelės egzistuojančios lentelės yra sistemos lentelės. Galite sukurti lentelę vykdydami a sukurti lentelę komanda:

 0: jdbc: phoenix: localhost>sukurti lentelės testą („mykey“ sveikasis skaičius nėra nulinis pagrindinis raktas, „mycolumn“ varchar); Nėra paveiktų eilučių (2,448 sekundės) 

Ši komanda sukuria lentelę pavadinimu testas, su sveikojo skaičiaus pirminiu raktu, pavadintu mykey ir a varcharas stulpelis pavadintas mycolumn. Dabar įterpkite porą eilučių naudodami pakelti komanda:

 0: jdbc: phoenix: localhost>padidinkite bandymo vertes (1, „Sveiki“); Pažeista 1 eilutė (0,142 sekundės) 0: jdbc: phoenix: localhost>padidinkite bandymo vertes (2, „Pasaulis!“); Pažeista 1 eilutė (0,008 sekundės) 

UPSERT yra SQL komanda, skirta įterpti įrašą, jei jo nėra, arba atnaujinti įrašą, jei jis yra. Šiuo atveju įterpėme (1, „Labas“) ir (2, „Pasaulis!“). Išsamią „Phoenix“ komandos nuorodą rasite čia. Galiausiai pateikite užklausą lentelėje, kad pamatytumėte vertes, kurias padidinote vykdydami pasirinkite * iš testo:

 0: jdbc: phoenix: localhost>pasirinkti * iš testo; + ------------------------------------------ + ------ ------------------------------------ + | MYKEY | MYCOLUMN | + ------------------------------------------ + ------ ------------------------------------ + | 1 | Sveiki | | 2 | Pasaulis! | + ------------------------------------------ + ------ ------------------------------------ + 2 pasirinktos eilutės (0,111 sekundės) 

Kaip ir tikėtasi, pamatysite ką tik įterptas vertes. Jei norite išvalyti stalą, atlikite a lašas stalo testas komandą.

$config[zx-auto] not found$config[zx-overlay] not found