LevelDB_ SSTable e Estrutura de Armazenamento de Logs - IMasters

download LevelDB_ SSTable e Estrutura de Armazenamento de Logs - IMasters

of 7

description

Banco de dados levelDB

Transcript of LevelDB_ SSTable e Estrutura de Armazenamento de Logs - IMasters

  • 08/07/2015 LevelDB:SSTableeestruturadearmazenamentodelogsiMasters

    data:text/htmlcharset=utf8,%3Ch1%20class%3D%22title%22%20style%3D%22padding%3A%200px%2020px%3B%20margin%3A%200px%3B%20bord 1/7

    LevelDB:SSTableeestruturade

    armazenamentodelogs

    SeProtocolBufferssoalnguafrancaderegistrosdedadosindividuaisnoGoogle,entoaSortedStringTable(SSTable)umadassadasmaiscomunsparaarmazenar,processaretrocarconjuntosdedados.Comooprprionomediz,umaSSTableumaabstraosimplesparaarmazenareficientementeumgrandenmerodeparesdechavevaloraomesmotempoemquesepriorizaumaaltavelocidadedesada(throughput)emcargasdetrabalhosequenciaisdeleituraeescrita.

    SSTable:SortedStringTableImaginequeprecisamosdeumaenormecargadetrabalhonaqualaentradafeitaemGigabytesouTerabytes.Almdisso,precisamosrealizarmuitospassosdeprocessamento,queprecisamserfeitospordiferentesbinriosemoutraspalavras,imaginequeestamosexecutandoumasequnciadetarefasdeMapReduce!Dadootamanhodoinput,lereescreverdadospodedominartodootempodeexecuo.Portanto,leituraseescritasaleatriasnosoumaopoemvezdisso,queremostransmitirosdadose,umavezqueterminarmos,gravamosdevoltanodiscocomoumaoperaodestreaming.Dessaforma,podemosamortizaroscustosdeI/Odedisco.Nadarevolucionrio,oulongedisso.

    IlyaGrigorikemBancodeDados

  • 08/07/2015 LevelDB:SSTableeestruturadearmazenamentodelogsiMasters

    data:text/htmlcharset=utf8,%3Ch1%20class%3D%22title%22%20style%3D%22padding%3A%200px%2020px%3B%20margin%3A%200px%3B%20bord 2/7

    UmaSortedStringTable(TabelaOrdenadadePalavras,emtraduolivre)exatamenteoqueparece,umarquivoquecontmumasriedeparesdechavevalorordenadosdeformaarbitrria.Chavesduplicadasnosoumproblema,poisnohanecessidadedepreenchimentodechavesouvalores,echavesevaloressopartculasarbitrrias.Leiatodooarquivosequencialmente,evocterumaespciedendice.Opcionalmente,seoarquivoformuitogrande,podemosincluirnoinciooucriarumndicekey:offsetseparadoparaacessorpido.IssotudoqueumaSSTable:umaformamuitosimples,mastambmmuitotil,detrocargrandesporesdedadosordenados.

    SSTableeBigTable:altavelocidadedeacesso?UmavezqueaSSTableestivernodisco,sernaverdadeimutvel,porqueinseriroudeletardadosdemandariaumagrandequantidadedereescritadeI/Onoarquivo.Tendoditoisso,elaumatimasoluoparandicesestticos:leiaondice,evocestarsempreaumabuscadedistncia,ousimplesmentememmap(mapeie)todooarquivoparaamemria.Leiturasaleatriassofceiserpidas.

    Escritas,poroutrolado,somuitomaiscustosasedifceis,anoserquetodaatabelaestejanamemria,oque,nessecaso,significaestarmosdevoltasimplesmanipulaodeponteiros.AcontecequeesteograndeproblemaqueoBigTabledoGoogletentaresolver:altastaxasde

  • 08/07/2015 LevelDB:SSTableeestruturadearmazenamentodelogsiMasters

    data:text/htmlcharset=utf8,%3Ch1%20class%3D%22title%22%20style%3D%22padding%3A%200px%2020px%3B%20margin%3A%200px%3B%20bord 3/7

    leitura/escritaparapetabytesdedados,comSSTablesnaretaguarda.Comoelesfazemisso?

    SSTableseLogStructuredMergeTreesQueremospreservarasaltastaxasdeleituraqueasSSTablesnosoferecem,mastambmqueremosaltastaxasdeescrita.Acontecequejtemostodosospedaosnecessrios:escritaaleatriamaisrpidaquandoaSSTableestnamemria(vamoschamladeMemTable)e,seatabelaimutvel,entoumaSSTablenodiscotambmrpidaparaserlida.Agoravamosintroduzirasseguintesconvenes:

    Oquefizemosaqui?Escritassosemprefeitasnamemriaeporissososempremaisrpidas.UmavezqueaMemTableatingeumcerto

    1. ndicesdeSSTablesnodiscososemprecarregadosparaamemria

    2. TodasasoperaesdeescritavodiretamenteparaosndicesdaMemTable

    3. LeituraschecamaMemTableprimeiroeentoconsultamondicedaSSTable

    4. Periodicamente,aMemTablegravadanodiscocomoumaSSTable

    5. Periodicamente,SSTablesnodiscosounidas.

  • 08/07/2015 LevelDB:SSTableeestruturadearmazenamentodelogsiMasters

    data:text/htmlcharset=utf8,%3Ch1%20class%3D%22title%22%20style%3D%22padding%3A%200px%2020px%3B%20margin%3A%200px%3B%20bord 4/7

    tamanho,elagravadanodiscocomoumaSSTableimutvel.Dequalquermaneira,manteremostodososndicesdaSSTablenamemria,oquesignificaqueparaqualquerleiturapoderemoschecarprimeironaMemTable,eentoseguirasequnciadaSSTableparaencontrarosnossosdados.OresultadoqueacabamosdereinventaroLogStructuredMergeTree(LSMTree),descritoporPatrickONeil,eesseexatamenteomesmomecanismoportrsdasTabelasBigTable.

    LSMeSSTables:apagar,atualizaremanutenoEssaarquiteturaLSMoferecealgumascaractersticasinteressantes:operaesdeescritasosemprerpidas,independentementedotamanhodosdados(appendonly),eoperaesdeleituraaleatriasousofeitasapartirdamemriaounecessitamdeumarpidabuscaemdisco.Dequalquerforma,equantoaatualizaeseexcluses?

    UmavezqueaSSTableestnodisco,elaimutvel,portantoatualizaeseexclusesnopodemtocarosdados.Emvezdisso,nocasodeumaatualizaoocorrer,umvalormaisrecentesimplesmentearmazenadonaMemTable,eumregistrodemortosacrescentadoparaasexcluses.Porqueosndicessochecadosnasequncia,leiturasfuturasiroencontraroregistrodemortosatualizadoantesmesmodeatingiremosvaloresantigos!Finalmente,tercentenasdeSSTablesemdiscotambmnoumaboaideia,eporissovamosexecutarperiodicamenteumprocessoparafundirasmudanasnasSSTables,momentoemqueosregistrosatualizadosouremovidosatualizaroosdadosantigos.

  • 08/07/2015 LevelDB:SSTableeestruturadearmazenamentodelogsiMasters

    data:text/htmlcharset=utf8,%3Ch1%20class%3D%22title%22%20style%3D%22padding%3A%200px%2020px%3B%20margin%3A%200px%3B%20bord 5/7

    SSTableseLevelDBPegueumaSSTable,acrescenteumaMemTableeapliqueumasriedeconvenesdeprocessamentoeoquevocterserumabelabasededadosparacertostiposdetrabalhos.Naverdade,tantooBigTabledoGoogle,quantooHbasedoHaddopeoCassandra,entreoutros,estoutilizandoumavariaooucpiaidnticadessamesmaarquitetura.

    Issosuperficialmente,pois,comodecostume,detalhesdeimplementaofazemtodaadiferena.GraasaJeffDeaneaSanjayGhemawat,oscontribuintesoriginaisdaSSTableedainfraestruturadoBigTablenoGoogle,ocdigofontedoLevelDBfoiliberadonoinciodoanopassado,quemaisoumenosumarplicaexatadaarquiteturaquedescrevemosacima:

    ProjetadoparaseromelhormecanismodeIndexDBnoWebKit(tambmconhecidocomononavegador),elefcildeintegrar,rpidoe,omelhordetudo,cuidadetodaagravaodeSSTableeMemTable,mergingeoutrosdetalhesinconvenientes.

    TrabalhandocomLevelDB:Ruby

    SSTablesembaixodocap,MemTablesparaescritas

    Chavesevaloressoarraysdebytesarbitrrios

    SuporteparaoperaesdePut,GeteDelete

    Iteraoforwardebackwarddedados

    CompressoSnappyembutida

  • 08/07/2015 LevelDB:SSTableeestruturadearmazenamentodelogsiMasters

    data:text/htmlcharset=utf8,%3Ch1%20class%3D%22title%22%20style%3D%22padding%3A%200px%2020px%3B%20margin%3A%200px%3B%20bord 6/7

    LevelDBumabiblioteca,noumservidorouservioindependenteapesardevocpoderimplementarumfacilmentesobreele.Paracomear,pegueobindingdasualinguagemfavorita(ruby)evamosveroquepodemosfazer:

    Podemosarmazenarchaves,recuperlas,erealizarpesquisascom

    1 require'leveldb'#geminstallleveldbruby

    2

    3 db=LevelDB::DB.new"/tmp/db"

    4 db.put"b","bar"

    5 db.put"a","foo"

    6 db.put"c","baz"

    7

    8 putsdb.get"a"#=>foo

    9

    10 db.eachdo|k,v|

    11 p[k,v]#=>["a","foo"],["b","bar"],["c","baz"]

    12 end

    13

    14 db.to_a#=>[["a","foo"],["b","bar"],["c","baz"]]

  • 08/07/2015 LevelDB:SSTableeestruturadearmazenamentodelogsiMasters

    data:text/htmlcharset=utf8,%3Ch1%20class%3D%22title%22%20style%3D%22padding%3A%200px%2020px%3B%20margin%3A%200px%3B%20bord 7/7

    apenasalgumaslinhasdecdigo.AmecnicademanterumaMemTable,atualizarSSTables,etodoorestoficaporcontadoLevelDBfcilesimples.

    LevelDBnoWebKitealmSSTablessoestruturasdedadosbastantesimpleseteisumbeloformatodeentrada/sadadelargaescala.Entretanto,oquetornaasSSTablesrpidas(ordenadaseimutveis)tambmoqueexpesuasmuitaslimitaes.Pararesolverisso,introduzimosoconceitodeMemTableeumconjuntodeestruturasdeprocessamentodelogparaadministrarasSSTables.

    Soregrassimples,mas,comosempre,detalhesdeimplementaofazemtodaadiferena,oquetornaoLevelDBumgrandeganhoparaoconjuntodemecanismosdebasesdedadosdecdigoaberto.HboaschancesdequevocvsedepararcomoLevelDBembutidonoseunavegador,noseuaparelhodetelefoneeemoutroslugares.DumaolhadanocdigofontedoLevelDB,leiaadocumentaoeexperimente.

    ***

    ArtigotraduzidopelaRedaoiMasters,comautorizaodoautor.Publicadooriginalmenteemhttp://www.igvita.com/2012/02/06/sstableandlogstructuredstorageleveldb/