Substituído por classic-level . Por favor, veja perguntas frequentes.
db = leveldown(location)db.open([options, ]callback)optionsdb.close(callback)db.put(key, value[, options], callback)optionsdb.get(key[, options], callback)optionsdb.getMany(keys[, options][, callback])db.del(key[, options], callback)optionsdb.batch(operations[, options], callback) (formulário de matriz)db.batch() (forma acorrentada)db.approximateSize(start, end, callback)db.compactRange(start, end, callback)db.getProperty(property)db.iterator([options])db.clear([options, ]callback)chainedBatchchainedBatch.put(key, value)chainedBatch.del(key)chainedBatch.clear()chainedBatch.write([options, ]callback)chainedBatch.dbiteratorfor await...of iteratoriterator.next([callback])iterator.seek(key)iterator.end([callback])iterator.dbleveldown.destroy(location, callback)leveldown.repair(location, callback) Este módulo era originalmente parte do levelup mas depois foi extraído e agora serve como uma ligação independente para o LevelDB.
É fortemente recomendado que você use levelup em preferência ao leveldown , a menos que tenha motivos de desempenho mensuráveis para isso. levelup é otimizado para usabilidade e segurança. Embora estejamos trabalhando para melhorar a segurança da interface leveldown ainda é fácil travar seu processo de nós se você não fizer as coisas da maneira certa.
Consulte a seção sobre segurança abaixo para obter detalhes de operações não seguras conhecidas com leveldown .
Nosso objetivo é suportar pelo menos LTS ativo e lançamentos de node.js atuais, Electron 5.0.0, bem como quaisquer lançamentos futuros do Node.js e Electron graças ao N-API. A versão mínima do nó para leveldown é 10.12.0 . Por outro lado, para o nó> = 12, a versão mínima leveldown é 5.0.0 .
O pacote leveldown NPM é transmitido com binários pré-construídos para plataformas populares de 64 bits, bem como ARM, M1, Android e Alpine (Musl) e é conhecido por trabalhar:
Ao instalar leveldown , node-gyp-build verificará se existe um binário compatível e o fallback para uma etapa de compilação, se não o fizer. Nesse caso, você precisará de uma instalação válida node-gyp .
Se você não deseja usar o binário pré-construído para a plataforma em que está instalando, especifique o sinalizador --build-from-source ao instalar. Um de:
npm install --build-from-source
npm install leveldown --build-from-source
Se você estiver trabalhando no leveldown e deseja recompilar o código C ++, execute npm run rebuild .
leveldown > = 5. Isso pode ser verificado executando npm ls leveldown .leveldown para> = 5.3.0 ou usar --build-from-source .--build-from-source . Este não é mais o caso.nodejs-mobile . Se você estiver atualizando: consulte UPGRADING.md .
db = leveldown(location) Retorna uma nova instância leveldown . location é uma corda apontando para o local do nível de nível a ser aberto.
db.open([options, ]callback) Abra a loja. A função callback será chamada sem argumentos quando o banco de dados tiver sido aberto com sucesso ou com um único argumento error se a operação aberta falhou por qualquer motivo.
options O argumento options opcionais pode conter:
createIfMissing (booleano, padrão: true ): se true , inicializará um banco de dados vazio no local especificado se ainda não existir. Se false e um banco de dados não existir, você receberá um erro no seu retorno de chamada open() e seu banco de dados não será aberto.
errorIfExists (boolean, padrão: false ): se true , você receberá um erro no seu retorno de chamada open() se o banco de dados existir no local especificado.
compression (booleana, padrão: true ): Se true , todos os dados compressíveis serão executados pelo algoritmo Snappy de compactação antes de serem armazenados. Snappy é muito rápido e não deve ganhar muita velocidade ao desativar, então deixe isso, a menos que você tenha um bom motivo para desligá -lo.
cacheSize (número, padrão: 8 * 1024 * 1024 = 8MB): o tamanho (em bytes) do cache LRU na memória com conteúdo de bloco não compactado frequentemente usado.
Opções avançadas
As seguintes opções são para ajuste avançado de desempenho. Modifique -os apenas se você puder provar o benefício real para seu aplicativo específico.
writeBufferSize (Número, Padrão: 4 * 1024 * 1024 = 4MB): O tamanho máximo (em bytes) do log (na memória e armazenado no arquivo .Log no disco). Além desse tamanho, o LevelDB converterá os dados de log no primeiro nível de arquivos de tabela classificados. A partir da documentação de nívelDB:Valores maiores aumentam o desempenho, especialmente durante cargas a granel. Até dois buffers de gravação podem ser mantidos na memória ao mesmo tempo; portanto, você pode ajustar esse parâmetro para controlar o uso da memória. Além disso, um buffer de gravação maior resultará em um tempo de recuperação mais longo na próxima vez que o banco de dados for aberto.
blockSize (número, padrão 4096 = 4K): o tamanho aproximado dos blocos que compõem os arquivos da tabela. O tamanho relacionado a dados não compactados (daí "aproximados"). Os blocos são indexados no arquivo de tabela e os visitantes de entrada envolvem a leitura de um bloco inteiro e a análise para descobrir a entrada necessária.
maxOpenFiles (número, padrão: 1000 ): o número máximo de arquivos que o nívelDB pode ter aberto por vez. Se é provável que o seu armazenamento de dados tenha um grande conjunto de trabalho, você poderá aumentar esse valor para impedir a rotatividade do descritor de arquivos. Para calcular o número de arquivos necessários para o seu conjunto de trabalho, divida seus dados totais por 'maxFileSize' .
blockRestartInterval (número, padrão: 16 ): o número de entradas antes de reiniciar a "codificação delta" das teclas dentro dos blocos. Cada ponto de "reinício" armazena a chave completa para a entrada, entre os reinicializações, o prefixo comum das teclas para essas entradas é omitido. As reinicializações são semelhantes ao conceito de quadros -chave na codificação de vídeo e são usados para minimizar a quantidade de espaço necessária para armazenar chaves. Isso é particularmente útil ao usar o nome de nome / prefixo profundo em suas teclas.
maxFileSize (número, padrão: 2* 1024 * 1024 = 2MB): a quantidade máxima de bytes para gravar em um arquivo antes de mudar para um novo. A partir da documentação de nívelDB:
... Se o seu sistema de arquivos for mais eficiente em arquivos maiores, você poderá aumentar o aumento do valor. A desvantagem será comções mais longas e, portanto, mais longas latência/desempenho de desempenho. Outro motivo para aumentar esse parâmetro pode ser quando você está inicialmente preenchendo um grande banco de dados.
db.close(callback) close() é um método de instância em um objeto de banco de dados existente. O banco de dados de nível subjacente será fechado e a função callback será chamada sem argumentos se a operação for bem -sucedida ou com um único argumento error se a operação falhar por qualquer motivo.
leveldown aguarda que qualquer operações pendentes terminem antes de fechar. Por exemplo:
db . put ( 'key' , 'value' , function ( err ) {
// This happens first
} )
db . close ( function ( err ) {
// This happens second
} )db.put(key, value[, options], callback)Armazene uma nova entrada ou substitua uma entrada existente.
Os objetos key e value podem ser strings ou buffers. Outros tipos de objetos são convertidos em strings com o método toString() . As chaves não podem ser null ou undefined e os objetos convertidos com toString() não devem resultar em uma corda vazia. Os valores podem não ser null ou undefined . Os valores de '' , [] e Buffer.alloc(0) (e qualquer objeto que resultando em uma toString() de um deles) serão armazenados como uma matriz de caracteres de comprimento zero e, portanto, serão recuperados como '' ou Buffer.alloc(0) dependendo do tipo solicitado.
Um conjunto mais rico de tipos de dados é atendido no levelup .
options A única propriedade atualmente disponível no objeto options é sync (Boolean, padrão: false ) . Se você fornecer um valor de sync do objeto true em seu objeto options , o LevelDB executará uma gravação síncrona dos dados; Embora a operação seja assíncrona no que diz respeito ao nó. Normalmente, o LevelDB passa os dados para o sistema operacional para escrever e retorna imediatamente, no entanto, uma gravação síncrona usará fsync() ou equivalente para que seu retorno de chamada não seja acionado até que os dados estejam realmente no disco. As gravações síncronas de arquivos são significativamente mais lentas do que as gravações assíncronas, mas se você quiser ter certeza absoluta de que os dados são lavados, poderá usar { sync: true } .
A função callback será chamada sem argumentos se a operação for bem -sucedida ou com um único argumento error se a operação falhar por qualquer motivo.
db.get(key[, options], callback) Obtenha um valor da loja LevelDB por key .
O objeto key pode ser uma string ou um buffer e não pode ser undefined ou null . Outros tipos de objetos são convertidos em strings com o método toString() e a sequência resultante pode não ser um comprimento zero. Um conjunto mais rico de tipos de dados é atendido no levelup .
Os valores buscados via get() que são armazenados como matrizes de caracteres de comprimento zero ( null , undefined , '' , [] , Buffer.alloc(0) ) retornarão como vazio- String ( '' ) ou Buffer.alloc(0) quando buscados com asBuffer: true (veja abaixo).
options O objeto options opcionais pode conter:
asBuffer (booleano, padrão: true ): usado para determinar se deve retornar o value da entrada como uma string ou um buffer. Observe que a conversão de um buffer em uma string incorre em um custo; portanto, se você precisar de uma string (e o value pode legitimamente se tornar uma string utf8), você deve buscá -la como uma com { asBuffer: false } e evitará esse custo de conversão.fillCache (booleano, padrão: true ): LevelDB, por padrão, preencherá o cache LRU na memória com dados de uma chamada para obter. Desativando isso é feito definindo fillCache como false . A função callback será chamada com um único error se a operação falhar por qualquer motivo, incluindo se a chave não foi encontrada. Se bem -sucedido, o primeiro argumento será null e o segundo argumento será o value como uma string ou buffer, dependendo da opção asBuffer .
db.getMany(keys[, options][, callback]) Obtenha vários valores da loja por uma matriz de keys . O objeto options opcionais pode conter asBuffer e fillCache , conforme descrito em get() .
A função callback será chamada com um Error se a operação falhar por qualquer motivo. Se bem -sucedido, o primeiro argumento será null e o segundo argumento será uma variedade de valores com a mesma ordem que keys . Se uma chave não foi encontrada, o valor relevante será undefined .
Se nenhum retorno de chamada for fornecido, uma promessa será devolvida.
db.del(key[, options], callback) Exclua uma entrada. O objeto key pode ser uma string ou um buffer e não pode ser undefined ou null . Outros tipos de objetos são convertidos em strings com o método toString() e a sequência resultante pode não ser um comprimento zero. Um conjunto mais rico de tipos de dados é atendido no levelup .
options A única propriedade atualmente disponível no objeto options é sync (Boolean, padrão: false ) . Consulte db.put() para obter detalhes sobre esta opção.
A função callback será chamada sem argumentos se a operação for bem -sucedida ou com um único argumento error se a operação falhar por qualquer motivo.
db.batch(operations[, options], callback) (formulário de matriz) Execute várias operações de put e/ou dell a granel. O argumento operations deve ser uma Array contendo uma lista de operações a serem executadas sequencialmente, embora como um todo sejam executadas como uma operação atômica.
Cada operação está contida em um objeto com as seguintes propriedades: type , key , value , onde o type é 'put' ou 'del' . No caso de 'del' a propriedade value é ignorada.
Quaisquer entradas em que a key ou value (no caso de 'put' ) seja null ou undefined fará com que um erro seja retornado no callback . Quaisquer entradas em que o type seja 'put' que tenha um value de [] '' ou Buffer.alloc(0) será armazenado como uma matriz de caracteres de comprimento zero e, portanto, será buscado durante as leituras como '' ou Buffer.alloc(0) dependendo de como são solicitadas. Consulte levelup para obter uma documentação completa sobre como isso funciona na prática.
O argumento options opcionais pode conter:
sync (booleano, padrão: false ). Consulte db.put() para obter detalhes sobre esta opção. A função callback será chamada sem argumentos se o lote for bem -sucedido ou com um Error se o lote falhar por qualquer motivo.
db.batch() (forma acorrentada) Retorna uma nova instância chainedBatch .
db.approximateSize(start, end, callback) approximateSize() é um método de instância em um objeto de banco de dados existente. Usado para obter o número aproximado de bytes do espaço do sistema de arquivos usado pelo intervalo [start..end) . O resultado pode não incluir dados escritos recentemente.
Os parâmetros start e end podem ser strings ou buffers que representam chaves na loja LevelDB.
A função callback será chamada com um único error se a operação falhar por qualquer motivo. Se bem -sucedido, o primeiro argumento será null e o segundo argumento será o tamanho aproximado como um número.
db.compactRange(start, end, callback) compactRange() é um método de instância em um objeto de banco de dados existente. Usado para acionar manualmente uma compactação de banco de dados no intervalo [start..end) .
Os parâmetros start e end podem ser strings ou buffers que representam chaves na loja LevelDB.
A função callback será chamada sem argumentos se a operação for bem -sucedida ou com um único argumento error se a operação falhar por qualquer motivo.
db.getProperty(property) getProperty pode ser usado para obter detalhes internos do LevelDB. Quando emitido com uma string de propriedade válida, uma sequência legível será retornada (este método é síncrono).
Atualmente, as únicas propriedades válidas são:
leveldb.num-files-at-levelN : Retorne o número de arquivos no nível n , onde n é um número inteiro que representa um nível válido (por exemplo, "0").
leveldb.stats : Retorna uma sequência de várias linhas que descreve estatísticas sobre a operação interna do LevelDB.
leveldb.sstables : Retorna uma sequência de várias linhas que descreve todos os SSTABLES que compõem o conteúdo do banco de dados atual.
db.iterator([options]) Retorna uma nova instância iterator . Aceita as seguintes opções de intervalo:
gt (maior que), gte (maior ou igual) define o limite inferior do intervalo a ser iterado. Somente entradas onde a chave é maior que (ou igual a) essa opção será incluída no intervalo. Quando reverse=true a ordem será revertida, mas as entradas iteradas serão as mesmas.lt (menor que), lte (menor ou igual) define o limite mais alto do intervalo a ser iterado. Somente entradas em que a chave é menor que (ou igual a) essa opção será incluída no intervalo. Quando reverse=true a ordem será revertida, mas as entradas iteradas serão as mesmas.reverse (booleano, padrão: false ) : entradas de item em ordem inversa. Cuidado que uma busca reversa pode ser mais lenta do que uma busca para a frente.limit (número, padrão: -1 ) : limite o número de entradas coletadas por este iterador. Esse número representa um número máximo de entradas e não pode ser alcançado se você chegar ao final do intervalo primeiro. Um valor de -1 significa que não há limite. Quando reverse=true as entradas com as teclas mais altas serão retornadas em vez das teclas mais baixas. Além das opções de alcance, iterator() leva as seguintes opções:
keys (boolean, padrão: true ) : se deve retornar a tecla de cada entrada. Se definido como false , as chamadas para iterator.next(callback) produzirão chaves com um valor de undefined 1 . Há um pequeno ganho de eficiência se você não se importa com o que são as chaves, pois elas não precisam ser convertidas e copiadas em JavaScript.values (booleanos, padrão: true ) : se deve retornar o valor de cada entrada. Se definido como false , as chamadas para iterator.next(callback) produzirão valores com um valor de undefined 1 .keyAsBuffer (booleano, padrão: true ) : se deve retornar a chave de cada entrada como um buffer ou string. A conversão de um buffer em uma string incorre em um custo; portanto, se você precisar de uma string (e a key pode legitimamente se tornar uma sequência UTF8), você deve buscá -la como uma.valueAsBuffer (booleano, padrão: true ) : se deve retornar o valor de cada entrada como um buffer ou string.fillCache (booleano, padrão: false ): se o LRU-cache do LevelDB deve ser preenchido com dados lidos. 1 leveldown retorna uma corda vazia em vez de undefined no momento.
db.clear([options, ]callback)Exclua todas as entradas ou um intervalo. Não garantido para ser atômico. Aceita as seguintes opções de intervalo (com as mesmas regras que nos iteradores):
gt (maior que), gte (maior ou igual) define o limite inferior do intervalo a ser excluído. Somente entradas onde a chave é maior que (ou igual a) essa opção será incluída no intervalo. Quando reverse=true a ordem será revertida, mas as entradas excluídas serão as mesmas.lt (menor que), lte (menor ou igual) define o limite mais alto do intervalo a ser excluído. Somente entradas em que a chave é menor que (ou igual a) essa opção será incluída no intervalo. Quando reverse=true a ordem será revertida, mas as entradas excluídas serão as mesmas.reverse (booleano, padrão: false ) : exclua entradas em ordem inversa. Somente eficaz em combinação com limit , para remover as últimas entradas N.limit (Número, Padrão: -1 ) : Limite o número de entradas a serem excluídas. Esse número representa um número máximo de entradas e não pode ser alcançado se você chegar ao final do intervalo primeiro. Um valor de -1 significa que não há limite. Quando reverse=true as entradas com as teclas mais altas serão excluídas em vez das teclas mais baixas. Se nenhuma opção for fornecida, todas as entradas serão excluídas. A função callback será chamada sem argumentos se a operação foi bem -sucedida ou com um Error se falhar por qualquer motivo.
chainedBatchchainedBatch.put(key, value) Fila uma operação put neste lote. Isso pode lançar se key ou value for inválida, seguindo as mesmas regras que a forma de matriz de db.batch() .
chainedBatch.del(key) Fila uma operação del neste lote. Isso pode lançar se key for inválida.
chainedBatch.clear()Limpe todas as operações na fila neste lote.
chainedBatch.write([options, ]callback)Compreenda as operações na fila para este lote. Todas as operações serão escritas atomicamente, ou seja, todas terão sucesso ou falharão sem compromissos parciais.
O argumento options opcionais pode conter:
sync (booleano, padrão: false ). Consulte db.put() para obter detalhes sobre esta opção. A função callback será chamada sem argumentos se o lote for bem -sucedido ou com um Error se o lote falhar por qualquer motivo. Depois que write foi chamada, nenhuma operação adicional é permitida.
chainedBatch.db Uma referência ao db que criou este lote acorrentado.
iterator Um iterador permite que você itera toda a loja ou um intervalo. Ele opera com um instantâneo da loja, criado na época em que db.iterator() foi chamado. Isso significa que as leituras sobre o iterador não são afetadas por gravações simultâneas.
Os iteradores podem ser consumidos for await...of ou chamando manualmente iterator.next() em sucessão. Neste último modo, iterator.end() deve sempre ser chamado. Por outro lado, terminar, jogar ou quebrar a partir de um for await...of loop chama automaticamente iterator.end() .
Um iterador atinge seu fim natural nas seguintes situações:
iterator.seek() estava fora de alcance. Um iterador acompanha quando um next() está em andamento e quando um end() é chamado para que não permita chamadas simultâneas next() , ele permite end() , enquanto um next() está em andamento e não permite o next() ou end() após end() foi chamado.
for await...of iterator Produz matrizes contendo uma key e value . O tipo de key e value depende das opções aprovadas para db.iterator() .
try {
for await ( const [ key , value ] of db . iterator ( ) ) {
console . log ( key )
}
} catch ( err ) {
console . error ( err )
} iterator.next([callback]) Avance o iterador e produza a entrada nessa chave. Se ocorrer um erro, a função callback será chamada com um Error . Caso contrário, o callback recebe null , uma key e um value . O tipo de key e value depende das opções aprovadas para db.iterator() . Se o iterador atingir seu fim natural, key e value serão undefined .
Se nenhum retorno de chamada for fornecido, uma promessa será devolvida para uma matriz (contendo uma key e value ) ou undefined se o iterador atingir sua extremidade natural.
Nota: sempre ligue para iterator.end() , mesmo que você tenha recebido um erro e mesmo se o iterador atingir seu fim natural.
iterator.seek(key) Procure o iterador para uma determinada chave ou a chave mais próxima. As chamadas subsequentes para iterator.next() produzirão entradas com chaves iguais ou maiores que target , ou igual ou menores que target se a opção reverse passada para db.iterator() fosse verdadeira. O mesmo se aplica ao iterator.next() chama um for await...of loop.
Se opções de alcance como gt foram passadas para db.iterator() e target não se enquadra nesse intervalo, o iterador atingirá seu fim natural.
iterator.end([callback]) Encerrar a iteração e liberar recursos subjacentes. A função callback será chamada sem argumentos sobre o sucesso ou com um Error se o fim falhar por qualquer motivo.
Se nenhum retorno de chamada for fornecido, uma promessa será devolvida.
iterator.db Uma referência ao db que criou este iterador.
leveldown.destroy(location, callback) Remova completamente um diretório de banco de dados de LevelDB existente. Você pode usar essa função no lugar de um diretório completo rm se desejar, certamente remover arquivos relacionados ao LevelDB. Se o diretório contiver apenas arquivos LevelDB, o próprio diretório também será removido. Se houver arquivos adicionais que não sejam de nível não-alvel no diretório, esses arquivos e o diretório serão deixados em paz.
O retorno de chamada será chamado quando a operação de destruição estiver concluída, com um possível argumento error .
leveldown.repair(location, callback)Tente restaurar uma loja de nível danificada. A partir da documentação de nívelDB:
Se um banco de dados não puder ser aberto, você poderá tentar chamar esse método para ressuscitar o máximo possível do conteúdo do banco de dados. Alguns dados podem ser perdidos; portanto, tenha cuidado ao chamar essa função em um banco de dados que contém informações importantes.
Você encontrará informações sobre a operação de reparo no arquivo de log dentro do diretório da loja.
Um repair() também pode ser usado para executar uma compactação dos logs de nívelDB nos arquivos da tabela.
O retorno de chamada será chamado quando a operação de reparo estiver concluída, com um possível argumento error .
Atualmente, leveldown não rastreia o estado da instância do nível de nível subjacente. Isso significa que a chamada de open() em um banco de dados já aberto pode resultar em um erro. Da mesma forma, chamar qualquer outra operação em um banco de dados não open pode resultar em um erro.
Atualmente, levelup rastreia e gerencia o estado e impedirá que as operações fora do estado sejam enviadas para leveldown . Se você usar leveldown diretamente, deve rastrear e gerenciar o estado por si mesmo.
leveldown expõe um recurso do LevelDB chamado instantâneos. Isso significa que, quando você faz o EG createReadStream e createWriteStream ao mesmo tempo, quaisquer dados modificados pelo fluxo de gravação não afetarão os dados emitidos pelo fluxo de leitura. Em outras palavras, um instantâneo da LevelDB captura o estado mais recente no momento em que o instantâneo foi criado, permitindo o instantâneo para iterar ou ler os dados sem ver gravação subsequente. Qualquer leitura não realizada em um instantâneo usará implicitamente o estado mais recente.
Você pode abrir um problema no repositório do GitHub se tiver uma pergunta.
Os canais de suporte anteriores e não ativos incluem o canal ##leveldb IRC no FreeNode e o Grupo do Google do Node.js LevelDB.
Level/leveldown é um projeto de código aberto . Isso significa que:
Indivíduos que fazem contribuições significativas e valiosas recebem acesso ao projeto para contribuir como acharem o ajuste. Este projeto é mais parecido com um wiki aberto do que um projeto de código aberto protegido padrão.
Veja o guia de contribuição para obter mais detalhes.
Este projeto usa submódulos Git. Isso significa que você deve cloná -lo recursivamente se estiver planejando trabalhar nele:
$ git clone --recurse-submodules https://github.com/Level/leveldown.gitComo alternativa, você pode inicializar os submódulos dentro da pasta clonada:
$ git submodule update --init --recursivenpm version ..git push --follow-tags./prebuilds : npm run download-prebuildsnpm run test-prebuildcanadian-pubnpm publish Apoie -nos com uma doação mensal em coletivo aberto e ajude -nos a continuar nosso trabalho.
Mit
leveldown se baseia no excelente trabalho das equipes de NívelDB e Snappy do Google e colaboradores adicionais. LevelDB e Snappy são emitidos sob a nova licença BSD. Uma grande parte do suporte do leveldown vem da porta Windows LevelDB (arquivada) por Krzysztof Kowalczyk ( @kjk ). Se você estiver usando leveldown no Windows, deve dar -lhe seus agradecimentos!