? 이 모듈은
abstract-level
로 대체되므로 곧 더 이상 사용되지 않습니다.
levelup(db[, options[, callback]])
db.supports
db.open([options][, callback])
db.close([callback])
db.put(key, value[, options][, callback])
db.get(key[, options][, callback])
db.getMany(keys[, options][, callback])
db.del(key[, options][, callback])
db.batch(array[, options][, callback])
(배열 형식)db.batch()
(체인 형식)db.status
db.isOperational()
db.createReadStream([options])
db.createKeyStream([options])
db.createValueStream([options])
db.iterator([options])
db.clear([options][, callback])
db.createWriteStream
은 어떻게 되었나요? 빠르고 간단한 저장. LevelDB의 특성을 따르는 abstract-leveldown
호환 저장소를 위한 Node.js 래퍼입니다.
LevelDB는 Google이 구축한 간단한 키-값 저장소입니다. Google Chrome 및 기타 여러 제품에서 사용됩니다. LevelDB는 키와 값 모두로 임의 바이트 배열, 단일 가져오기 , 넣기 및 삭제 작업, 일괄 넣기 및 삭제 , 양방향 반복기 및 매우 빠른 Snappy 알고리즘을 사용한 단순 압축을 지원합니다.
LevelDB는 키를 기준으로 사전순으로 정렬된 항목을 저장합니다. 이는 LevelDB 반복자를 읽기 가능한 스트림으로 노출하는 levelup
의 스트리밍 인터페이스를 매우 강력한 쿼리 메커니즘으로 만듭니다.
가장 일반적인 저장소는 LevelDB에 순수 C++ 바인딩을 제공하는 leveldown
입니다. 브라우저의 level.js
나 메모리 내 저장소의 memdown
과 같은 다양한 대체 저장소를 사용할 수 있습니다. 일반적으로 키와 값 모두에 대해 문자열과 버퍼를 지원합니다. 더 풍부한 데이터 유형 세트의 경우 encoding-down
으로 저장소를 래핑할 수 있습니다.
level
패키지는 시작하는 데 권장되는 방법입니다. levelup
, leveldown
및 encoding-down
을 편리하게 번들로 제공합니다. 주요 내보내기는 levelup
입니다. 즉, var db = require('level')
수행할 수 있습니다.
우리는 Active LTS 및 현재 Node.js 릴리스와 브라우저를 지원하는 것을 목표로 합니다. 기본 저장소에 대한 지원은 해당 설명서를 참조하세요.
업그레이드하는 경우: UPGRADING.md
참조하세요.
먼저 levelup
설치해야 합니다! 매장이 포함되어 있지 않으므로 leveldown
도 설치해야 합니다(예:).
$ npm install levelup leveldown
모든 작업은 비동기식입니다. 콜백을 제공하지 않으면 Promise가 반환됩니다.
var levelup = require ( 'levelup' )
var leveldown = require ( 'leveldown' )
// 1) Create our store
var db = levelup ( leveldown ( './mydb' ) )
// 2) Put a key & value
db . put ( 'name' , 'levelup' , function ( err ) {
if ( err ) return console . log ( 'Ooops!' , err ) // some kind of I/O error
// 3) Fetch by key
db . get ( 'name' , function ( err , value ) {
if ( err ) return console . log ( 'Ooops!' , err ) // likely the key was not found
// Ta da!
console . log ( 'name=' + value )
} )
} )
levelup(db[, options[, callback]])
새로운 levelup
인스턴스를 생성하기 위한 주요 진입점입니다.
db
abstract-leveldown
호환 저장소여야 합니다.options
열릴 때 기본 저장소로 전달되며 사용되는 저장소 유형에 따라 다릅니다. levelup(db)
호출하면 기본 저장소도 열립니다. 이는 콜백을 제공하는 경우 콜백을 트리거하는 비동기 작업입니다. 콜백은 function (err, db) {}
형식을 취해야 합니다. 여기서 db
는 levelup
인스턴스입니다. 콜백을 제공하지 않으면 모든 읽기 및 쓰기 작업은 저장소가 완전히 열릴 때까지 내부적으로 대기하게 됩니다. 열리지 않는 경우에는 error
이벤트가 발생합니다.
이는 levelup
인스턴스를 관리하는 두 가지 대체 방법으로 이어집니다.
levelup ( leveldown ( location ) , options , function ( err , db ) {
if ( err ) throw err
db . get ( 'foo' , function ( err , value ) {
if ( err ) return console . log ( 'foo does not exist' )
console . log ( 'got foo =' , value )
} )
} )
이에 상응하는 내용과 비교하면 다음과 같습니다.
// Will throw if an error occurs
var db = levelup ( leveldown ( location ) , options )
db . get ( 'foo' , function ( err , value ) {
if ( err ) return console . log ( 'foo does not exist' )
console . log ( 'got foo =' , value )
} )
db.supports
읽기 전용 매니페스트입니다. 다음과 같이 사용될 수 있습니다:
if ( ! db . supports . permanence ) {
throw new Error ( 'Persistent storage is required' )
}
if ( db . supports . bufferKeys && db . supports . promises ) {
await db . put ( Buffer . from ( 'key' ) , 'value' )
}
db.open([options][, callback])
기본 저장소를 엽니다. 일반적으로 이 메서드는 levelup()
에 의해 자동으로 호출되므로 직접 호출할 필요가 없습니다. 그러나 close()
사용하여 상점을 닫은 후에도 상점을 다시 열 수 있습니다.
콜백이 전달되지 않으면 약속이 반환됩니다.
db.close([callback])
close()
기본 저장소를 닫습니다. 콜백은 닫는 동안 발생한 모든 오류를 첫 번째 인수로 수신합니다.
리소스를 확보하기 위해 더 이상 필요하지 않은 경우 항상 close()
호출하여 levelup
인스턴스를 정리해야 합니다. 여러 levelup
인스턴스로 동시에 상점을 열 수 없습니다.
콜백이 전달되지 않으면 약속이 반환됩니다.
db.put(key, value[, options][, callback])
put()
은 저장소에 데이터를 삽입하는 기본 메서드입니다. levelup
에 관한 한 key
와 value
모두 모든 유형이 될 수 있습니다.
options
기본 저장소로 전달됩니다.
콜백이 전달되지 않으면 약속이 반환됩니다.
db.get(key[, options][, callback])
key
로 저장소에서 값을 가져옵니다. key
모든 유형이 될 수 있습니다. 저장소에 존재하지 않으면 콜백이나 약속에서 오류가 발생합니다. 찾을 수 없는 err 객체는 'NotFoundError'
유형이므로 err.type == 'NotFoundError'
수행하거나 err.notFound
속성에 대한 진실성 테스트를 수행할 수 있습니다.
db . get ( 'foo' , function ( err , value ) {
if ( err ) {
if ( err . notFound ) {
// handle a 'NotFoundError' here
return
}
// I/O or other error, pass it up the callback chain
return callback ( err )
}
// .. handle `value` here
} )
선택적 options
객체는 기본 저장소로 전달됩니다.
콜백이 전달되지 않으면 약속이 반환됩니다.
db.getMany(keys[, options][, callback])
keys
배열을 사용하여 저장소에서 여러 값을 가져옵니다. 선택적 options
객체는 기본 저장소로 전달됩니다.
어떤 이유로든 작업이 실패하면 callback
함수가 Error
와 함께 호출됩니다. 성공하면 첫 번째 인수는 null
이 되고 두 번째 인수는 keys
와 동일한 순서의 값 배열이 됩니다. 키를 찾을 수 없으면 해당 값은 undefined
입니다.
콜백이 제공되지 않으면 약속이 반환됩니다.
db.del(key[, options][, callback])
del()
은 저장소에서 데이터를 제거하는 기본 방법입니다.
db . del ( 'foo' , function ( err ) {
if ( err )
// handle I/O or other error
} ) ;
options
기본 저장소로 전달됩니다.
콜백이 전달되지 않으면 약속이 반환됩니다.
db.batch(array[, options][, callback])
(배열 형식) batch()
매우 빠른 대량 쓰기 작업( put 및 delete 모두)에 사용할 수 있습니다. array
인수에는 순차적으로 실행될 작업 목록이 포함되어야 하지만 전체적으로는 기본 저장소 내에서 원자적 작업으로 수행됩니다.
각 작업은 type
, key
, value
속성을 가진 객체에 포함되어 있습니다. 여기서 유형은 'put'
또는 'del'
입니다. 'del'
의 경우 value
속성이 무시됩니다. key
null
또는 undefined
항목은 callback
에서 오류가 반환되고 모든 유형: value
이 null
또는 undefined
type: 'put'
항목은 오류를 반환합니다.
const ops = [
{ type : 'del' , key : 'father' } ,
{ type : 'put' , key : 'name' , value : 'Yuri Irsenovich Kim' } ,
{ type : 'put' , key : 'dob' , value : '16 February 1941' } ,
{ type : 'put' , key : 'spouse' , value : 'Kim Young-sook' } ,
{ type : 'put' , key : 'occupation' , value : 'Clown' }
]
db . batch ( ops , function ( err ) {
if ( err ) return console . log ( 'Ooops!' , err )
console . log ( 'Great success dear leader!' )
} )
options
기본 저장소로 전달됩니다.
콜백이 전달되지 않으면 약속이 반환됩니다.
db.batch()
(체인 형식) batch()
인수 없이 호출하면 원자적 배치 작업을 구축하고 최종적으로 커밋하는 데 사용할 수 있는 Batch
객체를 반환합니다. 어떻게 사용하느냐에 따라 배열 형태보다는 연쇄 형태의 batch()
사용할 때 더 큰 성능을 얻을 수 있다.
db . batch ( )
. del ( 'father' )
. put ( 'name' , 'Yuri Irsenovich Kim' )
. put ( 'dob' , '16 February 1941' )
. put ( 'spouse' , 'Kim Young-sook' )
. put ( 'occupation' , 'Clown' )
. write ( function ( ) { console . log ( 'Done!' ) } )
batch.put(key, value[, options])
배치에서 write()
가 호출될 때까지 커밋되지 않고 현재 배치에 put 작업을 대기열에 넣습니다. 제공된 경우 options
인수는 객체여야 하며 기본 저장소에 전달됩니다.
이 메소드는 Put에 문제가 있는 경우(예: value
null
또는 undefined
인 경우) WriteError
throw
수 있습니다.
batch.del(key[, options])
현재 배치에서 del 작업을 대기열에 추가하고 배치에서 write()
가 호출될 때까지 커밋되지 않습니다. 제공된 경우 options
인수는 객체여야 하며 기본 저장소에 전달됩니다.
삭제에 문제가 있으면 이 메서드에서 WriteError
throw
수 있습니다.
batch.clear()
현재 배치에서 대기 중인 작업을 모두 지우면 이전 작업이 모두 삭제됩니다.
batch.length
현재 배치에서 대기 중인 작업 수입니다.
batch.write([options][, callback])
이 일괄 처리에 대해 대기 중인 작업을 커밋합니다. 지워지지 않은 모든 작업은 기본 저장소에 원자적으로 기록됩니다. 즉, 부분 커밋 없이 모두 성공하거나 실패합니다.
선택적 options
객체는 기본 배치 객체의 .write()
작업에 전달됩니다.
콜백이 전달되지 않으면 약속이 반환됩니다.
db.status
다음 중 하나에 해당하는 읽기 전용 문자열:
new
- 새로 생성되었으며 열리거나 닫히지 않았습니다.opening
- 기본 저장소가 열릴 때까지 기다리는 중open
- 매장을 성공적으로 오픈했으며, 사용 가능합니다.closing
- 매장이 문을 닫을 때까지 기다리기closed
- 상점이 성공적으로 닫혔습니다.db.isOperational()
저장소가 작업을 수락하면 true
반환합니다. 이는 levelup
의 경우 status
가 opening
또는 open
의미합니다. 저장소가 자체적으로 열리고 열릴 때까지 작업을 대기열에 추가하기 때문입니다.
db.createReadStream([options])
키-값 쌍의 읽기 가능한 스트림을 반환합니다. 쌍은 key
와 value
속성을 가진 객체입니다. 기본적으로 기본 저장소의 모든 항목을 처음부터 끝까지 스트리밍합니다. 범위, 방향 및 결과를 제어하려면 아래에 설명된 옵션을 사용하십시오.
db . createReadStream ( )
. on ( 'data' , function ( data ) {
console . log ( data . key , '=' , data . value )
} )
. on ( 'error' , function ( err ) {
console . log ( 'Oh my!' , err )
} )
. on ( 'close' , function ( ) {
console . log ( 'Stream closed' )
} )
. on ( 'end' , function ( ) {
console . log ( 'Stream ended' )
} )
다음 속성을 사용하여 createReadStream()
에 대한 첫 번째 매개 변수로 옵션 개체를 제공할 수 있습니다.
gt
(보다 큼), gte
(크거나 같음)는 스트리밍할 범위의 하한을 정의합니다. 키가 이 옵션보다 크거나 같은 항목만 범위에 포함됩니다. reverse=true
이면 순서가 바뀌지만 스트리밍되는 항목은 동일합니다.
lt
(보다 작음), lte
(작거나 같음)는 스트리밍할 범위의 상한을 정의합니다. 키가 이 옵션보다 작거나 같은 항목만 범위에 포함됩니다. reverse=true
이면 순서가 바뀌지만 스트리밍되는 항목은 동일합니다.
reverse
(boolean, 기본값: false
) : 항목을 역순으로 스트리밍합니다. LevelDB와 같은 저장 방식으로 인해 역방향 탐색은 정방향 탐색보다 느릴 수 있습니다.
limit
(number, default: -1
) : 이 스트림에서 수집하는 항목 수를 제한합니다. 이 숫자는 최대 항목 수를 나타내며 범위 끝에 먼저 도달하면 도달하지 못할 수도 있습니다. -1
값은 제한이 없음을 의미합니다. reverse=true
인 경우 가장 낮은 키 대신 가장 높은 키를 가진 항목이 반환됩니다.
keys
(boolean, default: true
) : 결과에 키가 포함되어야 하는지 여부입니다. true
로 설정하고 values
false
로 설정하면 결과는 key
속성이 있는 객체가 아니라 단순히 키가 됩니다. createKeyStream()
메서드에서 내부적으로 사용됩니다.
values
(부울, 기본값: true
) : 결과에 값이 포함되어야 하는지 여부입니다. true
로 설정하고 keys
false
로 설정하면 결과는 value
속성이 있는 객체가 아니라 단순히 값이 됩니다. createValueStream()
메서드에서 내부적으로 사용됩니다.
db.createKeyStream([options])
키-값 쌍이 아닌 읽기 가능한 키 스트림을 반환합니다. 범위와 방향을 제어하려면 createReadStream()
에 대해 설명한 것과 동일한 옵션을 사용하십시오.
keys
true
로 설정되고 values
false
로 설정된 옵션 개체를 createReadStream()
에 전달하여 이 스트림을 얻을 수도 있습니다. 결과는 동일합니다. 두 스트림 모두 개체 모드에서 작동합니다.
db . createKeyStream ( )
. on ( 'data' , function ( data ) {
console . log ( 'key=' , data )
} )
// same as:
db . createReadStream ( { keys : true , values : false } )
. on ( 'data' , function ( data ) {
console . log ( 'key=' , data )
} )
db.createValueStream([options])
키-값 쌍이 아닌 읽기 가능한 값 스트림을 반환합니다. 범위와 방향을 제어하려면 createReadStream()
에 대해 설명한 것과 동일한 옵션을 사용하십시오.
values
true
로 설정되고 keys
false
로 설정된 옵션 개체를 createReadStream()
에 전달하여 이 스트림을 얻을 수도 있습니다. 결과는 동일합니다. 두 스트림 모두 개체 모드에서 작동합니다.
db . createValueStream ( )
. on ( 'data' , function ( data ) {
console . log ( 'value=' , data )
} )
// same as:
db . createReadStream ( { keys : false , values : true } )
. on ( 'data' , function ( data ) {
console . log ( 'value=' , data )
} )
db.iterator([options])
위의 읽기 가능한 스트림을 지원하는 abstract-leveldown
반복자를 반환합니다. 옵션은 createReadStream()
의 범위 옵션과 동일하며 기본 저장소에 전달됩니다.
이 반복자는 for await...of
지원합니다.
for await ( const [ key , value ] of db . iterator ( ) ) {
console . log ( value )
}
db.clear([options][, callback])
모든 항목 또는 범위를 삭제합니다. 원자성이 보장되지 않습니다. 다음 범위 옵션을 허용합니다(반복자와 동일한 규칙 사용).
gt
(보다 큼), gte
(크거나 같음)는 삭제할 범위의 하한을 정의합니다. 키가 이 옵션보다 크거나 같은 항목만 범위에 포함됩니다. reverse=true
이면 순서가 바뀌지만 삭제된 항목은 동일합니다.lt
(보다 작음), lte
(작거나 같음)는 삭제할 범위의 상한을 정의합니다. 키가 이 옵션보다 작거나 같은 항목만 범위에 포함됩니다. reverse=true
이면 순서가 바뀌지만 삭제된 항목은 동일합니다.reverse
(boolean, 기본값: false
) : 항목을 역순으로 삭제합니다. 마지막 N개 레코드를 제거하려면 limit
과 함께 사용해야 효과적입니다.limit
(number, default: -1
) : 삭제할 항목 수를 제한합니다. 이 숫자는 최대 항목 수를 나타내며 범위 끝에 먼저 도달하면 도달하지 못할 수도 있습니다. -1
값은 제한이 없음을 의미합니다. reverse=true
인 경우 가장 낮은 키 대신 가장 높은 키를 가진 항목이 삭제됩니다. 옵션이 제공되지 않으면 모든 항목이 삭제됩니다. callback
함수는 작업이 성공하면 인수 없이 호출되고, 어떤 이유로든 실패하면 WriteError
와 함께 호출됩니다.
콜백이 전달되지 않으면 약속이 반환됩니다.
db.createWriteStream
은 어떻게 되었나요? 더 작고 유지 관리하기 쉬운 코어를 제공하기 위해 db.createWriteStream()
제거되었습니다. 이는 주로 db.createReadStream()
사용하여 대칭을 만들기 위해 존재했지만 많은 논의를 통해 이를 제거하는 것이 최선의 조치였습니다.
이를 가능하게 한 주요 동인은 성능이었습니다. db.createReadStream()
대부분의 사용 사례에서 잘 작동하지만 db.createWriteStream()
애플리케이션 키와 값에 크게 의존했습니다. 따라서 우리는 표준 구현을 제공할 수 없으며 광범위한 사용 사례를 해결하기 위해 더 많은 write-stream
구현을 생성하도록 권장할 수 없습니다.
여기에서 커뮤니티가 제작한 구현을 확인하세요.
콜백을 받아들이는 각 함수는 콜백이 생략되면 Promise를 반환합니다. 유일한 예외는 levelup
생성자 자체입니다. 콜백이 전달되지 않으면 백그라운드에서 기본 저장소가 느리게 열립니다.
예:
const db = levelup ( leveldown ( './my-db' ) )
await db . put ( 'foo' , 'bar' )
console . log ( await db . get ( 'foo' ) )
levelup
EventEmitter
이며 다음 이벤트를 내보냅니다.
이벤트 | 설명 | 인수 |
---|---|---|
put | 키가 업데이트되었습니다. | key, value (임의) |
del | 키가 삭제되었습니다 | key (아무거나) |
batch | 배치가 실행되었습니다. | operations (배열) |
clear | 항목이 삭제되었습니다. | options (객체) |
opening | 본점 오픈 예정 | - |
open | 매장이 오픈되었습니다 | - |
ready | open 의 별칭 | - |
closing | 매장이 문을 닫습니다 | - |
closed | 매장이 폐쇄되었습니다. | - |
error | 오류가 발생했습니다 | error (오류) |
예를 들어 다음과 같이 할 수 있습니다.
db . on ( 'put' , function ( key , value ) {
console . log ( 'inserted' , { key , value } )
} )
LevelDB와 같은 저장소는 스레드로부터 안전하지만 여러 프로세스로 액세스하는 데 적합 하지 않습니다 . 단일 Node.js 프로세스에서만 스토어를 열어야 합니다. Node.js 클러스터는 여러 프로세스로 구성되므로 levelup
인스턴스도 프로세스 간에 공유할 수 없습니다.
프로세스 간에 단일 저장소를 공유해야 하는 경우 도움이 될 수 있는 multileveldown
과 같은 모듈은 Level/awesome
참조하세요.
Level/levelup
OPEN 오픈 소스 프로젝트 입니다. 이는 다음을 의미합니다.
중요하고 가치 있는 기여를 한 개인에게는 적합하다고 판단되는 대로 기여할 수 있도록 프로젝트에 대한 커밋 액세스 권한이 부여됩니다. 이 프로젝트는 표준 보호 오픈 소스 프로젝트라기보다는 오픈 위키에 가깝습니다.
자세한 내용은 기여 가이드를 참조하세요.
크로스 브라우저 테스트 플랫폼 및 오픈 소스 ♥ Sauce Labs에서 제공.
Open Collective에서 월간 기부로 우리를 지원하고 우리의 활동을 계속할 수 있도록 도와주세요.
MIT