BT

LevelDB do Google: open source e alto desempenho com estruturas chave-valor

por Abel Avram , traduzido por Leonardo Galvão em 03 Ago 2011 |

[Esta tradução adapta e enriquece o original do InfoQ.com]

O LevelDB foi liberado na semana passada pelo Google como open source, sob uma licença no estilo BSD. O projeto é uma datastore embarcada baseada em pares chaves-valor, cujos elementos são arrays de bytes arbitrários ordenados por chave (o mecanismo de ordenação pode ser redefinido). O datastore é usado como uma biblioteca em aplicações, e o funcionamento essencial é simples. Cada base de dados é um conjunto de arquivos em um diretório e as operações básicas são Put(chave,valor), Get(chave) e Delete(chave).

No LevelDB, os dados são comprimidos automaticamente, usando a biblioteca de compressão de alto desempenho Snappy, usada pelo Google no BigTable e no MapReduce, e que foi também liberada recentemente como open source. O LevelDB é otimizado para operações de escrita em lote. Ele acumula várias mudanças de forma ordenada em memória e as escreve para o disco quando um tamanho máximo configurável é atingido. O resultado é um excelente desempenho de escrita.

Veja um exemplo de uso, que ilustra a escrita em lotes (extraído da documentação):

#include "leveldb/include/write_batch.h"
... 
std::string valor;
leveldb::Status s = db->Get(leveldb::ReadOptions(), chave1, &valor);
if (s.ok()) {
  leveldb::WriteBatch lote;
  lote.Delete(chave1);
  lote.Put(chave2, valor); 
 s = db->Write(leveldb::WriteOptions(), &lote);
}

Em alguns testes, o LevelDB mostrou-se uma ordem de grandeza mais rápido que o SQLite3, de acordo com benchmarks do Google – a maior diferença foi na escrita aleatória. O SQLite, no entanto, é um pouco mais rápido em leituras aleatórias e cerca de duas vezes mais performático na escrita de grandes quantidades de dados. No mesmo conjunto de benchmarks, o LevelDB se mostrou mais rápido que o Kyoto Cabinet, uma base de dados de chave-valor similar; mas a diferença foi menor que em relação ao SQLLite.

O LevelDB foi escrito em C++ e tem poucas dependências externas. Foi portado com sucesso para Windows, Mac OS X, Android e para várias versões do Unix. É usado também em versões experimentais do Chrome para implementar a API IndexDB da W3C, para o armazenamento em nível de nó (node). Também é utilizado pela empresa especializada em mapas em 3D, UpNext.

A documentação detalhada, em uma única página html, mostra como usar o LevelDB na maioria das situações e alguns detalhes específicos de implementação podem ser vistos aqui.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2013 C4Media Inc.
Política de privacidade
BT