leveldb_ sstable e estrutura de armazenamento de logs - imasters
DESCRIPTION
Banco de dados levelDBTRANSCRIPT
-
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/