[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.