Заменен classic-level . Пожалуйста, смотрите часто задаваемые вопросы.
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) (форма массива)db.batch() (цепная форма)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) Этот модуль изначально был частью levelup , но позже был извлечен и теперь служит отдельным связыванием для уровня.
Настоятельно рекомендуется использовать levelup в предпочтении leveldown , если у вас нет измеримых причин производительности для этого. levelup оптимизирован для удобства использования и безопасности. Хотя мы работаем над повышением безопасности интерфейса leveldown , все еще легко сбое, если вы не делаете что -то правильно.
См. Раздел о безопасности ниже для получения подробной информации о известных небезопасных операциях с leveldown .
Мы стремимся поддерживать хотя бы активные выпуски LTS и ток Node.js, Electron 5.0.0, а также любые будущие выпуск Node.js и электронов благодаря N-API. Минимальная версия узла для leveldown - 10.12.0 . И наоборот, для Node> = 12, версия минимального leveldown - 5.0.0 .
Пакет NPM leveldown поставляется с предварительно построенными двоичными файлами для популярных 64-разрядных платформ, а также ARM, M1, Android и Alpine (MUSL), и, как известно, работает над:
При установке leveldown , node-gyp-build будет проверять, существует ли совместимый двоичный файл, и отступление на шаг компиляции, если это не так. В этом случае вам понадобится допустимая установка node-gyp .
Если вы не хотите использовать предварительно построенный двоичный файл для платформы, на которой вы устанавливаете, укажите флаг --build-from-source при установке. Один из:
npm install --build-from-source
npm install leveldown --build-from-source
Если вы работаете над самим leveldown и хотите переопределить код C ++, запустите npm run rebuild .
leveldown > = 5. Это можно проверить с помощью npm ls leveldown .leveldown , до> = 5.3.0 или использовать --build-from-source .--build-from-source . Это больше не так.nodejs-mobile . Если вы обновляетесь: пожалуйста, смотрите UPGRADING.md .
db = leveldown(location) Возвращает новый экземпляр leveldown . location - это строка, указывающая на открытие местоположения LevelDB.
db.open([options, ]callback) Откройте магазин. Функция callback будет вызвана без аргументов, когда база данных была успешно открыта, или с одним аргументом error , если операция Open не удалась по любой причине.
options Необязательный аргумент options может содержать:
createIfMissing (Boolean, Default: true ): если true , инициализирует пустую базу данных в указанном месте, если его уже не существует. Если false и база данных не существует, вы получите ошибку в вашем обратном вызове open() , и ваша база данных не откроется.
errorIfExists (BOOLEAN, по умолчанию: false ): если true , вы получите ошибку в вашем обратном вызове open() если база данных существует в указанном месте.
compression (логическое, по умолчанию: true ): если true , все сжимаемые данные будут выполняться через алгоритм Snapphy Compression, прежде чем храниться. Snappy очень быстрый и не должен получить большую скорость, отключившись, поэтому оставьте это включенным, если у вас нет веских причин отключить его.
cacheSize (число, по умолчанию: 8 * 1024 * 1024 = 8 МБ): размер (в байтах) кэша LRU в памяти с часто используемым несжатым блоком содержимым.
Расширенные варианты
Следующие варианты предназначены для продвинутой настройки производительности. Измените их, только если вы можете доказать фактическую выгоду для вашего конкретного приложения.
writeBufferSize (номер, по умолчанию: 4 * 1024 * 1024 = 4 МБ): максимальный размер (в байтах) журнала (в памяти и хранятся в файле .log на диске). Помимо этого размера, LevelDB будет преобразовать данные журнала на первый уровень отсортированных файлов таблиц. Из документации LevelDB:Большие значения повышают производительность, особенно во время объемных нагрузок. До двух буферов записи может одновременно удерживать в памяти, поэтому вы можете настроить этот параметр для управления использованием памяти. Кроме того, более крупный буфер записи приведет к более длительному времени восстановления в следующий раз, когда будет открыта база данных.
blockSize (номер, по умолчанию 4096 = 4K): приблизительный размер блоков, которые составляют файлы таблицы. Размер, связанный с несжатыми данными (отсюда «приблизительно»). Блоки индексируются в файле таблицы, а входные взгляды включают в себя чтение всего блока и анализа, чтобы обнаружить необходимую запись.
maxOpenFiles (номер, по умолчанию: 1000 ): максимальное количество файлов, которые LevelDB разрешено открывать за раз. Если ваш хранилище данных, вероятно, будет иметь большой рабочий набор, вы можете увеличить это значение, чтобы предотвратить затопление дескриптора файла. Чтобы рассчитать количество файлов, необходимых для вашего рабочего набора, разделите свои общие данные на 'maxFileSize' .
blockRestartInterval (номер, по умолчанию: 16 ): количество записей перед перезапуском «дельта -кодирования» ключей в блоках. Каждая точка «перезапуска» хранит полный ключ для записи, между перезапуску, общий префикс ключей для этих записей опущен. Перезагрузки аналогичны концепции ключевых кадров в кодировании видео и используются для минимизации количества места, необходимого для хранения ключей. Это особенно полезно при использовании глубоких имен -интервалов / префикса в ключах.
maxFileSize (номер, по умолчанию: 2* 1024 * 1024 = 2 МБ): максимальное количество байтов для записи в файл перед переходом на новый. Из документации LevelDB:
... Если ваша файловая система более эффективна с более крупными файлами, вы можете подумать о увеличении значения. Недостатком будет более длинная уплотнения и, следовательно, более длительные сборы задержки/производительности. Другая причина увеличения этого параметра может быть, когда вы изначально заполняете большую базу данных.
db.close(callback) close() - это метод экземпляра на существующем объекте базы данных. База данных базовой данных LevelDB будет закрыта, и функция callback будет вызвана без аргументов, если операция будет успешной или с одним аргументом error , если операция не удалась по любой причине.
leveldown ожидает, что любые ожидающие операции завершатся перед закрытием. Например:
db . put ( 'key' , 'value' , function ( err ) {
// This happens first
} )
db . close ( function ( err ) {
// This happens second
} )db.put(key, value[, options], callback)Храните новую запись или перезаписывайте существующую запись.
Объекты key и value могут быть либо строками, либо буферами. Другие типы объектов преобразуются в строки с помощью метода toString() . Ключи не могут быть null или undefined , а объекты, преобразованные с помощью toString() не должны привести к пустой строке. Значения не могут быть null или undefined . Значения '' , [] и Buffer.alloc(0) (и любой объект, приводящий к toString() из одного из них), будут храниться в виде матрицы символов нулевой длины и, следовательно, будут извлечены как как '' или Buffer.alloc(0) в зависимости от запрошенного типа.
Более богатый набор типов данных обслуживается в levelup .
options Единственным свойством, доступным в настоящее время в объекте options является sync (Boolean, Default: false ) . Если вы предоставите sync значение true в вашем объекте options , LevelDB выполнит синхронную запись данных; Хотя операция будет асинхронной в отношении узла. Обычно, LevelDB передает данные в операционную систему для записи и немедленно возвращает, однако синхронная запись будет использовать fsync() или эквивалент, поэтому ваш обратный вызов не будет запускаться до тех пор, пока данные фактически не будут на диске. Синхронные записи файловой системы значительно медленнее, чем асинхронные записи, но если вы хотите быть абсолютно уверенным, что данные промываются, вы можете использовать { sync: true } .
Функция callback будет вызвана без аргументов, если операция будет успешной или с одним аргументом error , если операция не удалась по какой -либо причине.
db.get(key[, options], callback) Получите значение из магазина LevelDB от key .
key объект может быть либо строкой, либо буфером и не может быть undefined или null . Другие типы объектов преобразуются в строки с помощью метода toString() , и полученная строка не может быть нулевой длиной. Более богатый набор типов данных обслуживается в levelup .
Значения, извлеченные через get() , которые хранятся в виде массивов символов нулевой длины ( null , undefined , '' , [] , Buffer.alloc(0) ), будут возвращаться как пустую String ( '' ) или Buffer.alloc(0) при получении asBuffer: true (см. Ниже).
options Необязательный объект options может содержать:
asBuffer (логический, по умолчанию: true ): используется для определения того, следует ли вернуть value записи в виде строки или буфера. Обратите внимание, что преобразование из буфера в строку содержит стоимость, поэтому, если вам нужна строка (и value может законно стать строкой UTF8), то вам следует извлечь ее как единое целое с { asBuffer: false } , и вы избежите этой стоимости преобразования.fillCache (Boolean, Default: true ): LevelDB по умолчанию заполнит кэш LRU в памяти с данными из вызова, чтобы получить. Отключение этого делается путем установки fillCache на false . Функция callback будет вызвана с одной error если операция не удалась по любой причине, включая, если ключ не был найден. В случае успеха первый аргумент будет null , а второй аргумент будет value как строки или буфера в зависимости от опции asBuffer .
db.getMany(keys[, options][, callback]) Получите несколько значений из магазина на массиве keys . Необязательный объект options может содержать asBuffer и fillCache , как описано в get() .
Функция callback будет вызвана с Error , если операция не удалась по любой причине. В случае успеха первый аргумент будет null , а второй аргумент будет массивом значений с тем же порядком, что и keys . Если ключ не был найден, соответствующее значение будет undefined .
Если обратный вызов не предоставляется, обещание возвращается.
db.del(key[, options], callback) Удалить запись. key объект может быть либо строкой, либо буфером и не может быть undefined или null . Другие типы объектов преобразуются в строки с помощью метода toString() , и полученная строка не может быть нулевой длиной. Более богатый набор типов данных обслуживается в levelup .
options Единственным свойством, доступным в настоящее время в объекте options является sync (Boolean, Default: false ) . См. db.put() для получения подробной информации об этой опции.
Функция callback будет вызвана без аргументов, если операция будет успешной или с одним аргументом error , если операция не удалась по какой -либо причине.
db.batch(operations[, options], callback) (форма массива) Выполните несколько операций PUT и/или DEL оптом. Аргумент operations должен быть Array содержащим список операций, которые будут выполнены последовательно, хотя в целом они выполняются в качестве атомной операции.
Каждая операция содержится в объекте, имеющем следующие свойства: type , key , value , где type либо 'put' или 'del' . В случае 'del' свойство value игнорируется.
Любые записи, в которых key или value (в случае 'put' ), null или undefined приведут к возвращению ошибки при callback . Любые записи, в которых type 'put' , которые имеют value [] , '' или Buffer.alloc(0) будут храниться в виде массива символов нулевой длины и, следовательно, будут получены во время чтения как' '' или Buffer.alloc(0) в зависимости от того, как их запрашивают. Смотрите levelup для полной документации о том, как это работает на практике.
Необязательный аргумент options может содержать:
sync (логическое, по умолчанию: false ). См. db.put() для получения подробной информации об этой опции. Функция callback будет вызвана без аргументов, если партия будет успешной или с Error , если партия не удалась по любой причине.
db.batch() (цепная форма) Возвращает новый экземпляр chainedBatch .
db.approximateSize(start, end, callback) approximateSize() - это метод экземпляра на существующем объекте базы данных. Используется для получения приблизительного количества байтов пространства файловой системы, используемых диапазоном [start..end) . Результат может не включать недавно написанные данные.
Параметры start и end могут быть строками или буферами, представляющими ключи в магазине LevelDB.
Функция callback будет вызвана с одной error если операция не удалась по любой причине. В случае успеха первый аргумент будет null , а второй аргумент будет приблизительным размером в качестве числа.
db.compactRange(start, end, callback) compactRange() - это метод экземпляра на существующем объекте базы данных. Используется для ручного запуска уплотнения базы данных в диапазоне [start..end) .
Параметры start и end могут быть строками или буферами, представляющими ключи в магазине LevelDB.
Функция callback будет вызвана без аргументов, если операция будет успешной или с одним аргументом error , если операция не удалась по какой -либо причине.
db.getProperty(property) getProperty может использоваться для получения внутренних деталей от LevelDB. При выдаче с действительной строкой свойства будет возвращена строка для читаемой строки (этот метод синхронно).
В настоящее время единственными действительными свойствами являются:
leveldb.num-files-at-levelN : вернуть количество файлов на уровне n , где n-целое число, представляющее действительный уровень (например, «0»).
leveldb.stats : возвращает многострочную строку, описывающую статистику о внутренней операции LevelDB.
leveldb.sstables : возвращает многострочную строку, описывающую все Sstables , которые составляют содержимое текущей базы данных.
db.iterator([options]) Возвращает новый экземпляр iterator . Принимает следующие варианты диапазона:
gt (больше, чем), gte (больше или равных) определяет нижнюю границу диапазона, чтобы быть итерацией. Только записи, где ключ больше (или равен), эта опция будет включена в диапазон. Когда reverse=true порядок будет изменен, но итерационные записи будут такими же.lt (меньше), lte (меньше или равных) определяет более высокую границу диапазона, чтобы быть итерацией. Только записи, где ключ меньше (или равен), эта опция будет включена в диапазон. Когда reverse=true порядок будет изменен, но итерационные записи будут такими же.reverse (логический, по умолчанию: false ) : записи итерации в обратном порядке. Остерегайтесь того, что обратный поиск может быть медленнее, чем прямой поиск.limit (число, по умолчанию: -1 ) : ограничить количество записей, собранных этим итератором. Это число представляет собой максимальное количество записей и не может быть достигнуто, если вы сначала дойдете до конца диапазона. Значение -1 означает, что нет предела. Когда reverse=true записи с самыми высокими клавишами будут возвращены вместо самых низких клавиш. В дополнение к параметрам диапазона, iterator() принимает следующие параметры:
keys (логический, по умолчанию: true ) : вернуть ли ключ каждой записи. Если установить на false , вызовы в iterator.next(callback) даст ключи от значения undefined 1 . Существует небольшая эффективность, если в конечном итоге вам все равно, каковы ключи, поскольку их не нужно преобразовать и копировать в JavaScript.values (логическое, по умолчанию: true ) : вернуть ли значение каждой записи. Если установить на false , вызовы в iterator.next(callback) дадут значения значения undefined 1 .keyAsBuffer (boolean, default: true ) : вернуть ли ключ каждой записи в виде буфера или строки. Преобразование из буфера в строку содержит стоимость, поэтому, если вам нужна строка (и key может законно стать строкой UTF8), то вам следует извлечь ее как единое целое.valueAsBuffer (Boolean, Default: true ) : вернуть ли значение каждого записи в виде буфера или строки.fillCache (Boolean, Default: false ): должен ли LRU-Cache LRU LevelDB заполнен чтением данных. 1 leveldown возвращает пустую строку, а не undefined в данный момент.
db.clear([options, ]callback)Удалить все записи или диапазон. Не гарантированно будет атомным. Принимает следующие варианты диапазона (с теми же правилами, что и на итераторах):
gt (больше, чем), gte (больше или равных) определяет нижнюю границу диапазона, которая должна быть удалена. Только записи, где ключ больше (или равен), эта опция будет включена в диапазон. Когда reverse=true порядок будет отменен, но удаленные записи будут такими же.lt (меньше), lte (меньше или равных) определяет более высокую границу диапазона, которая должна быть удалена. Только записи, где ключ меньше (или равен), эта опция будет включена в диапазон. Когда reverse=true порядок будет отменен, но удаленные записи будут такими же.reverse (логический, по умолчанию: false ) : удалить записи в обратном порядке. Только эффективно в сочетании с limit , чтобы удалить последние N записи.limit (номер, по умолчанию: -1 ) : ограничить количество записей, которые будут удалены. Это число представляет собой максимальное количество записей и не может быть достигнуто, если вы сначала дойдете до конца диапазона. Значение -1 означает, что нет предела. Когда reverse=true записи с самыми высокими клавишами будут удалены вместо самых низких клавиш. Если варианты не предоставляются, все записи будут удалены. Функция callback будет вызвана без аргументов, если операция была успешной или с Error , если она не удалась по какой -либо причине.
chainedBatchchainedBatch.put(key, value) put операции на этой партии. Это может бросить, если key или value недействительны, следуя тем же правилам, что и форма массива db.batch() .
chainedBatch.del(key) Очередь операции del на этой партии. Это может бросить, если key недействителен.
chainedBatch.clear()Очистите все операции в очереди на этой партии.
chainedBatch.write([options, ]callback)Совершить операции в очереди для этой партии. Все операции будут написаны атомно, то есть они либо все преуспеют, либо не будут провалиться без частичных коммитов.
Необязательный аргумент options может содержать:
sync (логическое, по умолчанию: false ). См. db.put() для получения подробной информации об этой опции. Функция callback будет вызвана без аргументов, если партия будет успешной или с Error , если партия не удалась по любой причине. После того, как write была вызвана, дальнейшие операции не допускаются.
chainedBatch.db Ссылка на db , которая создала эту цепочку.
iterator Итератор позволяет вам итерации всего магазина или диапазона. Он работает на снимке магазина, созданный в то время, когда был вызван db.iterator() . Это означает, что чтение на итераторе не зависит от одновременных записей.
Итераторы могут быть потреблены for await...of или вручную называть iterator.next() подряд. В последнем режиме iterator.end() всегда должен быть вызван. В отличие от этого, отделка, бросание или выпадение из A for await...of цикла автоматически называет iterator.end() .
Итератор достигает своего естественного конца в следующих ситуациях:
iterator.seek() был вне диапазона. Итератор отслеживает, когда находится next() , и когда был вызван end() поэтому он не позволяет одновременно next() , он позволяет end() в то время как next() находится в процессе и не позволяет ни next() , ни end() после end() .
for await...of iterator Дает массивы, содержащие key и value . Тип key и value зависит от параметров, передаваемых db.iterator() .
try {
for await ( const [ key , value ] of db . iterator ( ) ) {
console . log ( key )
}
} catch ( err ) {
console . error ( err )
} iterator.next([callback]) Выдвинуть итератор и уступить запись в этом ключе. Если возникает ошибка, функция callback будет вызвана с Error . В противном случае callback получает null , key и value . Тип key и value зависит от параметров, передаваемых db.iterator() . Если итератор достиг своего естественного конца, как key , так и value будут undefined .
Если обратный вызов не предоставляется, обещание возвращается ни для массива (содержащего key и value ), либо undefined если итератор достиг своего естественного конца.
Примечание. Всегда вызовите iterator.end() , даже если вы получили ошибку и даже если итератор достиг своего естественного конца.
iterator.seek(key) Ищите итератор до заданного ключа или ближайшего ключа. Последующие вызовы в iterator.next() будут давать записи с ключами, равными или большим, чем target , или равны или меньше target если параметр reverse переданный в db.iterator() был правдой. То же самое относится и к неявным iterator.next() for await...of
Если варианты диапазона, такие как gt были переданы в db.iterator() , а target не попадает в этот диапазон, итератор достигнет своего естественного конца.
iterator.end([callback]) Конечная итерация и освободить основные ресурсы. Функция callback будет вызвана без аргументов об успехе или с Error , если по какой -либо причине не удалось.
Если обратный вызов не предоставляется, обещание возвращается.
iterator.db Ссылка на db , которая создала этот итератор.
leveldown.destroy(location, callback) Полностью удалите существующий каталог базы данных уровня. Вы можете использовать эту функцию вместо rm полного каталога, если вы хотите, чтобы у вас были только файлы, связанные с уровнем, связанные с уровнем. Если каталог содержит только файлы leveldb, сам каталог также будет удален. Если в каталоге есть дополнительные файлы без LEVELDB, эти файлы и каталог останутся в покое.
Обратный вызов будет вызван, когда операция уничтожения будет завершена, с возможным аргументом error .
leveldown.repair(location, callback)Попробуйте восстановить поврежденный магазин LevelDB. Из документации LevelDB:
Если БД не может быть открыт, вы можете попытаться вызвать этот метод, чтобы воскресить как можно больше содержимого базы данных. Некоторые данные могут быть потеряны, поэтому будьте осторожны при вызове этой функции в базе данных, которая содержит важную информацию.
Вы найдете информацию о операции ремонта в файле журнала внутри каталога магазина.
repair() также может использоваться для выполнения уплотнения журнала LevelDB в файлы таблицы.
Обратный вызов будет вызван, когда операция ремонта завершена, с возможным аргументом error .
В настоящее время leveldown не отслеживает состояние базового экземпляра уровня. Это означает, что вызов open() в уже открытой базе данных может привести к ошибке. Аналогичным образом, вызов любой другой операции в неоткрытой базе данных может привести к ошибке.
levelup в настоящее время отслеживает и управляет государством и предотвратит отправку операций за пределами штата на leveldown . Если вы leveldown напрямую, вы должны отслеживать и управлять состоянием для себя.
leveldown раскрывает функцию LevelDB, называемые снимками. Это означает, что когда вы делаете, например, createReadStream и createWriteStream одновременно, любые данные, модифицированные потоком записи, не будут влиять на данные, испускаемые из потока чтения. Другими словами, снимок leveldb отражает последнее состояние в то время, когда был создан снимок, позволяя моментальному снимку обращаться или читать данные, не видя никаких последующих записей. Любое чтение, не выполняемое на снимке, неявно будет использовать последнее состояние.
Вы можете открыть проблему в репозитории GitHub, если у вас есть вопрос.
Прошлые и больше активных каналов поддержки включают канал ##leveldb IRC на Freenode и node.js Leveldb Google Group.
Level/leveldown - это проект с открытым исходным кодом . Это означает, что:
Лица, делающие значительные и ценные вклады, получают обязательство для проекта, чтобы внести свой вклад по своему усмотрению. Этот проект больше похож на открытый вики, чем на стандартный охраняемый проект с открытым исходным кодом.
См. Руководство по взносу для получения более подробной информации.
Этот проект использует подмодулы GIT. Это означает, что вы должны клонировать его рекурсивно, если вы планируете работать над этим:
$ git clone --recurse-submodules https://github.com/Level/leveldown.gitВ качестве альтернативы, вы можете инициализировать подмодули внутри клонированной папки:
$ git submodule update --init --recursivenpm version ..git push --follow-tagsnpm run download-prebuilds prebuilds int ./prebuildsnpm run test-prebuildcanadian-pubnpm publish Поддержите нас ежемесячным пожертвованием на открытом коллективе и помогите нам продолжить нашу работу.
Грань
leveldown основан на превосходной работе LevelDB и Snappy Teams от Google и дополнительных участников. LevelDB и Snappy выпускаются по новой лицензии BSD. Большая часть поддержки Windows leveldown поступает из порта Windows LevelDB (архив) Krzysztof Kowalczyk ( @kjk ). Если вы используете leveldown в Windows, вы должны поблагодарить его!