You are on page 1of 7

08/07/2015

LevelDB:SSTableeestruturadearmazenamentodelogsiMasters

LevelDB:SSTablee
estruturade
armazenamentodelogs
IlyaGrigorik
emBancodeDados

SeProtocolBufferssoalnguafrancaderegistrosdedadosindividuais
noGoogle,entoaSortedStringTable(SSTable)umadassadasmais
comunsparaarmazenar,processaretrocarconjuntosdedados.Comoo
prprionomediz,umaSSTableumaabstraosimplesparaarmazenar
eficientementeumgrandenmerodeparesdechavevaloraomesmo
tempoemquesepriorizaumaaltavelocidadedesada(throughput)em
cargasdetrabalhosequenciaisdeleituraeescrita.

SSTable:SortedStringTable
Imaginequeprecisamosdeumaenormecargadetrabalhonaquala
entradafeitaemGigabytesouTerabytes.Almdisso,precisamos
realizarmuitospassosdeprocessamento,queprecisamserfeitospor
diferentesbinriosemoutraspalavras,imaginequeestamos
executandoumasequnciadetarefasdeMapReduce!Dadootamanho
doinput,lereescreverdadospodedominartodootempodeexecuo.
Portanto,leituraseescritasaleatriasnosoumaopoemvezdisso,
queremostransmitirosdadose,umavezqueterminarmos,gravamosde
voltanodiscocomoumaoperaodestreaming.Dessaforma,
podemosamortizaroscustosdeI/Odedisco.Nadarevolucionrio,ou
longedisso.

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

1/7

08/07/2015

LevelDB:SSTableeestruturadearmazenamentodelogsiMasters

UmaSortedStringTable(TabelaOrdenadadePalavras,emtraduo
livre)exatamenteoqueparece,umarquivoquecontmumasriede
paresdechavevalorordenadosdeformaarbitrria.Chavesduplicadas
nosoumproblema,poisnohanecessidadedepreenchimentode
chavesouvalores,echavesevaloressopartculasarbitrrias.Leia
todooarquivosequencialmente,evocterumaespciedendice.
Opcionalmente,seoarquivoformuitogrande,podemosincluirnoincio
oucriarumndicekey:offsetseparadoparaacessorpido.Issotudo
queumaSSTable:umaformamuitosimples,mastambmmuitotil,
detrocargrandesporesdedadosordenados.

SSTableeBigTable:altavelocidadede
acesso?
UmavezqueaSSTableestivernodisco,sernaverdadeimutvel,
porqueinseriroudeletardadosdemandariaumagrandequantidadede
reescritadeI/Onoarquivo.Tendoditoisso,elaumatimasoluo
parandicesestticos:leiaondice,evocestarsempreaumabusca
dedistncia,ousimplesmentememmap(mapeie)todooarquivoparaa
memria.Leiturasaleatriassofceiserpidas.

Escritas,poroutrolado,somuitomaiscustosasedifceis,anoserque
todaatabelaestejanamemria,oque,nessecaso,significaestarmos
devoltasimplesmanipulaodeponteiros.Acontecequeesteo
grandeproblemaqueoBigTabledoGoogletentaresolver:altastaxasde
data:text/htmlcharset=utf8,%3Ch1%20class%3D%22title%22%20style%3D%22padding%3A%200px%2020px%3B%20margin%3A%200px%3B%20bord

2/7

08/07/2015

LevelDB:SSTableeestruturadearmazenamentodelogsiMasters

leitura/escritaparapetabytesdedados,comSSTablesnaretaguarda.
Comoelesfazemisso?

SSTableseLogStructuredMerge
Trees
QueremospreservarasaltastaxasdeleituraqueasSSTablesnos
oferecem,mastambmqueremosaltastaxasdeescrita.Acontecequej
temostodosospedaosnecessrios:escritaaleatriamaisrpida
quandoaSSTableestnamemria(vamoschamladeMemTable)e,
seatabelaimutvel,entoumaSSTablenodiscotambmrpida
paraserlida.Agoravamosintroduzirasseguintesconvenes:

1. ndicesdeSSTablesnodiscososemprecarregadosparaamemria
2. Todasasoperaesdeescritavodiretamenteparaosndices
daMemTable
3. LeituraschecamaMemTableprimeiroeentoconsultamondiceda
SSTable
4. Periodicamente,aMemTablegravadanodiscocomoumaSSTable
5. Periodicamente,SSTablesnodiscosounidas.
Oquefizemosaqui?Escritassosemprefeitasnamemriaeporisso
sosempremaisrpidas.UmavezqueaMemTableatingeumcerto
data:text/htmlcharset=utf8,%3Ch1%20class%3D%22title%22%20style%3D%22padding%3A%200px%2020px%3B%20margin%3A%200px%3B%20bord

3/7

08/07/2015

LevelDB:SSTableeestruturadearmazenamentodelogsiMasters

tamanho,elagravadanodiscocomoumaSSTableimutvel.De
qualquermaneira,manteremostodososndicesdaSSTablenamemria,
oquesignificaqueparaqualquerleiturapoderemoschecarprimeirona
MemTable,eentoseguirasequnciadaSSTableparaencontraros
nossosdados.OresultadoqueacabamosdereinventaroLog
StructuredMergeTree(LSMTree),descritoporPatrickONeil,eesse
exatamenteomesmomecanismoportrsdasTabelasBigTable.

LSMeSSTables:apagar,atualizare
manuteno
EssaarquiteturaLSMoferecealgumascaractersticasinteressantes:
operaesdeescritasosemprerpidas,independentementedo
tamanhodosdados(appendonly),eoperaesdeleituraaleatriasou
sofeitasapartirdamemriaounecessitamdeumarpidabuscaem
disco.Dequalquerforma,equantoaatualizaeseexcluses?

UmavezqueaSSTableestnodisco,elaimutvel,portanto
atualizaeseexclusesnopodemtocarosdados.Emvezdisso,no
casodeumaatualizaoocorrer,umvalormaisrecentesimplesmente
armazenadonaMemTable,eumregistrodemortosacrescentado
paraasexcluses.Porqueosndicessochecadosnasequncia,
leiturasfuturasiroencontraroregistrodemortosatualizadoantes
mesmodeatingiremosvaloresantigos!Finalmente,tercentenasde
SSTablesemdiscotambmnoumaboaideia,eporissovamos
executarperiodicamenteumprocessoparafundirasmudanasnas
SSTables,momentoemqueosregistrosatualizadosouremovidos
atualizaroosdadosantigos.

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

4/7

08/07/2015

LevelDB:SSTableeestruturadearmazenamentodelogsiMasters

SSTableseLevelDB
PegueumaSSTable,acrescenteumaMemTableeapliqueumasriede
convenesdeprocessamentoeoquevocterserumabelabasede
dadosparacertostiposdetrabalhos.Naverdade,tantooBigTabledo
Google,quantooHbasedoHaddopeoCassandra,entreoutros,esto
utilizandoumavariaooucpiaidnticadessamesmaarquitetura.

Issosuperficialmente,pois,comodecostume,detalhesde
implementaofazemtodaadiferena.GraasaJeffDeaneaSanjay
Ghemawat,oscontribuintesoriginaisdaSSTableedainfraestruturado
BigTablenoGoogle,ocdigofontedoLevelDBfoiliberadonoinciodo
anopassado,quemaisoumenosumarplicaexatadaarquiteturaque
descrevemosacima:

SSTablesembaixodocap,MemTablesparaescritas
Chavesevaloressoarraysdebytesarbitrrios
SuporteparaoperaesdePut,GeteDelete
Iteraoforwardebackwarddedados
CompressoSnappyembutida
ProjetadoparaseromelhormecanismodeIndexDBnoWebKit(tambm
conhecidocomononavegador),elefcildeintegrar,rpidoe,o
melhordetudo,cuidadetodaagravaodeSSTableeMemTable,
mergingeoutrosdetalhesinconvenientes.

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

5/7

08/07/2015

LevelDB:SSTableeestruturadearmazenamentodelogsiMasters

LevelDBumabiblioteca,noumservidorouservioindependente
apesardevocpoderimplementarumfacilmentesobreele.Para
comear,pegueobindingdasualinguagemfavorita(ruby)evamosvero
quepodemosfazer:

require'leveldb'#geminstallleveldbruby

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

db.put"b","bar"

db.put"a","foo"

db.put"c","baz"

putsdb.get"a"#=>foo

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"]]

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

6/7

08/07/2015

LevelDB:SSTableeestruturadearmazenamentodelogsiMasters

apenasalgumaslinhasdecdigo.Amecnicademanteruma
MemTable,atualizarSSTables,etodoorestoficaporcontadoLevelDB
fcilesimples.

LevelDBnoWebKitealm
SSTablessoestruturasdedadosbastantesimpleseteisumbelo
formatodeentrada/sadadelargaescala.Entretanto,oquetornaas
SSTablesrpidas(ordenadaseimutveis)tambmoqueexpesuas
muitaslimitaes.Pararesolverisso,introduzimosoconceitode
MemTableeumconjuntodeestruturasdeprocessamentodelogpara
administrarasSSTables.

Soregrassimples,mas,comosempre,detalhesdeimplementao
fazemtodaadiferena,oquetornaoLevelDBumgrandeganhoparao
conjuntodemecanismosdebasesdedadosdecdigoaberto.Hboas
chancesdequevocvsedepararcomoLevelDBembutidonoseu
navegador,noseuaparelhodetelefoneeemoutroslugares.Duma
olhadanocdigofontedoLevelDB,leiaadocumentaoeexperimente.

***

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

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

7/7

You might also like