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の一部でしたが、後に抽出され、現在はlevelDBのスタンドアロンバインディングとして機能します。
測定可能なパフォーマンスの理由がない限り、 leveldownを好むlevelupを使用することを強くお勧めします。 levelup 、使いやすさと安全のために最適化されています。 leveldownインターフェイスの安全性を向上させるために取り組んでいますが、正しい方法で物事を実行しない場合、ノードプロセスをクラッシュするのは簡単です。
leveldown付きの既知の安全でない操作の詳細については、以下の安全に関するセクションを参照してください。
N-APIのおかげで、少なくともアクティブなLTSおよび現在のNode.jsリリース、電子5.0.0、および将来のnode.jsおよび電子放出をサポートすることを目指しています。 leveldownの最小ノードバージョンは10.12.0です。逆に、ノード> = 12の場合、最小leveldownバージョンは5.0.0です。
leveldown NPMパッケージは、人気のある64ビットプラットフォームとARM、M1、Android、Alpine(MUSL)用の事前に構築されたバイナリを備えており、次のことが知られています。
leveldownをインストールすると、 node-gyp-build互換性のあるバイナリが存在するかどうかを確認し、コンパイルステップにフォールバックしていない場合は確認します。その場合、有効なnode-gypインストールが必要です。
インストールしているプラットフォームに事前に構築されたバイナリを使用したくない場合は、インストール時に--build-from-sourceフラグを指定してください。 1つ:
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フォークではなく、Node.jsコアに対して作成され、構築されています。 アップグレードする場合: UPGRADING.md参照してください。
db = leveldown(location)新しいleveldownインスタンスを返します。 location 、開くレベルDBの場所を指す文字列です。
db.open([options, ]callback)店を開きます。 callback関数は、データベースが正常に開かれたときに引数なし、または何らかの理由でオープン操作が失敗した場合に単一のerror引数で呼び出されます。
optionsオプションのoptions引数には以下が含まれる場合があります。
createIfMissing (boolean、default: true ): trueの場合、まだ存在しない場合は、指定された場所で空のデータベースを初期化します。 falseとデータベースが存在しない場合、 open()コールバックでエラーが表示され、データベースが開かれません。
errorIfExists (boolean、default: false ): trueの場合、指定された場所にデータベースが存在する場合、 open() callbackにエラーが表示されます。
compression (Boolean、デフォルト: true ): trueの場合、すべての圧縮可能なデータは、保存される前にSnappy Compressionアルゴリズムを介して実行されます。 Snappyは非常に速く、無効にすることでそれほどスピードを上げるべきではないので、それをオフにする正当な理由がない限り、これをオンにしておきます。
cacheSize (番号、デフォルト: 8 * 1024 * 1024 = 8MB):頻繁に使用される非圧縮ブロックコンテンツを備えたインメモリLRUキャッシュのサイズ(バイト単位)。
高度なオプション
次のオプションは、高度なパフォーマンスチューニング用です。特定のアプリケーションの実際の利点を証明できる場合にのみ、それらを変更します。
writeBufferSize (number、default: 4 * 1024 * 1024 = 4mb):ログの最大サイズ(バイト単位)(メモリ内でディスク上の.logファイルに保存)。このサイズを超えて、LevelDBはログデータをソートされたテーブルファイルの最初のレベルに変換します。 LevelDBのドキュメントから:値が大きいほど、特にバルク負荷中にパフォーマンスが向上します。最大2つの書き込みバッファーが同時にメモリに保持される場合があるため、メモリの使用量を制御するためにこのパラメーターを調整することをお勧めします。また、より大きな書き込みバッファーは、次にデータベースが開かれたときに回復時間が長くなります。
blockSize (番号、デフォルト4096 = 4K):テーブルファイルを構成するブロックのおおよそのサイズ。非圧縮データに関連するサイズ(したがって「近似」)。ブロックはテーブルファイルにインデックス化されており、エントリルックアップにはブロック全体を読み取り、解析するために必要なエントリを発見することが含まれます。
maxOpenFiles (number、default: 1000 ):LevelDBが一度に開くことが許可されているファイルの最大数。データストアに大規模な作業セットがある可能性が高い場合は、この値を増やしてファイル記述子の解約を防ぐことができます。作業セットに必要なファイルの数を計算するには、合計データを'maxFileSize'で分割します。
blockRestartInterval (番号、デフォルト: 16 ):ブロック内のキーの「デルタエンコード」を再起動する前のエントリの数。各「再起動」ポイントは、エントリの完全なキーを保存します。再起動の間、それらのエントリのキーの共通のプレフィックスは省略されています。再起動は、ビデオエンコーディングのキーフレームの概念に似ており、キーを保存するために必要なスペースの量を最小限に抑えるために使用されます。これは、キーで深い名前のペーシング /プレフィックスを使用する場合に特に役立ちます。
maxFileSize (number、default: 2* 1024 * 1024 = 2mb):新しいバイトに切り替える前に、ファイルに書き込む最大量のバイト。 LevelDBのドキュメントから:
...ファイルシステムがより大きなファイルでより効率的である場合、値を増やすことを検討できます。マイナス面は、より長い構成であるため、レイテンシ/パフォーマンスのしゃっくりが長くなります。このパラメーターを増やすもう1つの理由は、最初に大規模なデータベースを入力している場合です。
db.close(callback) close()は、既存のデータベースオブジェクトのインスタンスメソッドです。基礎となるlevelDBデータベースは閉じられ、操作が成功した場合、または何らかの理由で操作が失敗した場合、操作が成功した場合、または単一のerror引数でcallback関数が呼び出されます。
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) (およびこれらのいずれかの1つのtoString()を生じるすべてのオブジェクト)の値は、ゼロ長文字配列として保存されるため、要求されたタイプに応じて''またはBuffer.alloc(0)として取得されます。
より豊富なデータタイプのセットがlevelupに対応しています。
options optionsオブジェクトで現在利用可能な唯一のプロパティはsyncです(boolean、default: false ) 。 optionsオブジェクトでtrueのsync値を提供する場合、levelDBはデータの同期書き込みを実行します。ノードに関する限り、操作は非同期になりますが。通常、revelDBはデータをオペレーティングシステムに渡して書き込みとすぐに返しますが、同期書き込みはfsync()または等価物を使用して、データが実際にディスク上にあるまでコールバックをトリガーしません。同期ファイルシステムの書き込みは、非同期書き込みよりも大幅に遅くなりますが、データがフラッシュされていることを絶対に確認したい場合は、 { sync: true }を使用できます。
callback関数は、操作が成功した場合、または何らかの理由で操作が失敗した場合に単一のerror引数で引数なしで呼び出されます。
db.get(key[, options], callback) keyごとにLevelDBストアから値を取得します。
keyオブジェクトは、文字列またはバッファーである場合があり、 undefinedまたはnullではありません。他のオブジェクトタイプはtoString()メソッドを使用して文字列に変換され、結果の文字列はゼロの長さではない場合があります。より豊富なデータタイプのセットがlevelupに対応しています。
ゼロ長文字アレイとして保存されているget()を介して取得される値( null 、 undefined 、 '' 、 [] 、 Buffer.alloc(0) )は、 asBuffer: true (以下を参照)でフェッチしたときに、空のString ( '' )またはBuffer.alloc(0)として戻ります。
optionsオプションのoptionsオブジェクトには次のものが含まれている場合があります。
asBuffer (boolean、default: true ):エントリのvalue文字列またはバッファーとして返すかどうかを判断するために使用されます。バッファから文字列への変換にはコストがかかるため、文字列が必要な場合(およびvalue正当にUTF8文字列になる可能性がある場合)、 { asBuffer: false }でそれを取得すると、この変換コストを回避する必要があります。fillCache (boolean、default: true ):levelDBはデフォルトでインメモリLRUキャッシュに、call from callのデータを入力します。これを無効にすることは、 fillCache falseに設定することによって行われます。キーが見つからなかった場合を含め、何らかの理由で操作が失敗した場合、単一のerrorでcallback関数が呼び出されます。成功した場合、最初の引数はnullであり、2番目の引数は、 asBufferオプションに応じて、文字列またはバッファーとしてのvalueになります。
db.getMany(keys[, options][, callback])一連のkeysでストアから複数の値を取得します。 get()で説明されているように、オプションのoptionsオブジェクトには、 asBufferとfillCache含まれる場合があります。
何らかの理由で操作が失敗した場合、 callback関数はErrorで呼び出されます。成功した場合、最初の引数はnullになり、2番目の引数は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) (配列フォーム)複数のプットおよび/またはDel操作を大量に実行します。 operations引数は、順次実行される操作のリストを含むArrayでなければなりませんが、全体としては原子操作として実行されます。
各操作は、次のプロパティを持つオブジェクトに含まれています: type 、 key 、 value 、このtypeは'put'または'del'のいずれかです。 'del'の場合、 valueプロパティは無視されます。
keyまたはvalue ( 'put'の場合)がnullまたはundefinedエントリは、 callbackでエラーを返します。 [] 、 '' 、またはBuffer.alloc(0)のvalueを持つtypeが'put'れるエントリは、ゼロ長文字配列として保存されるため、読み取り中に''またはBuffer.alloc(0)としてフェッチされます。これが実際にどのように機能するかについての完全なドキュメントについては、 levelup参照してください。
オプションのoptions引数には以下が含まれる場合があります。
sync (boolean、デフォルト: false )。このオプションの詳細についてはdb.put()を参照してください。バッチが成功した場合、または何らかの理由でバッチが失敗した場合、バッチが成功した場合、 Errorなしでcallback関数が呼び出されます。
db.batch() (チェーンズフォーム)新しいchainedBatchインスタンスを返します。
db.approximateSize(start, end, callback) approximateSize()は、既存のデータベースオブジェクトのインスタンスメソッドです。範囲[start..end)で使用されるファイルシステムスペースのおおよそのバイト数を取得するために使用されます。結果には、最近書かれたデータが含まれていない場合があります。
startおよびendパラメーターは、LevelDBストアのキーを表す文字列またはバッファーです。
何らかの理由で操作が失敗した場合、単一のerrorでcallback関数が呼び出されます。成功した場合、最初の引数はnullになり、2番目の引数は数として近似サイズになります。
db.compactRange(start, end, callback) compactRange()は、既存のデータベースオブジェクトのインスタンスメソッドです。範囲のデータベース圧縮を手動でトリガーするために使用されます[start..end) 。
startおよびendパラメーターは、LevelDBストアのキーを表す文字列またはバッファーです。
callback関数は、操作が成功した場合、または何らかの理由で操作が失敗した場合に単一のerror引数で引数なしで呼び出されます。
db.getProperty(property) getProperty使用して、levelDBから内部の詳細を取得できます。有効なプロパティ文字列で発行されると、読み取り可能な文字列が返されます(この方法は同期します)。
現在、唯一の有効なプロパティは次のとおりです。
leveldb.num-files-at-levelN :nは有効なレベル(「0」など)を表す整数であるレベルnのファイルの数を返します。
leveldb.stats :levelDBの内部操作に関する統計を説明するマルチライン文字列を返します。
leveldb.sstables :現在のデータベースの内容を構成するすべてのsSTABLEを記述するマルチライン文字列を返します。
db.iterator([options])新しいiteratorインスタンスを返します。次の範囲のオプションを受け入れます。
gt (より大きい)、 gte (等しい)は、繰り返される範囲の下限を定義します。キーがこのオプションよりも大きい(または等しい)エントリのみが範囲に含まれます。 reverse=trueの場合、順序は逆転しますが、反復されたエントリは同じになります。lt (より少ない)、 lte (等しくない)は、反復する範囲のより高い境界を定義します。キーがこのオプションよりも小さい(または等しい)場合のエントリのみが範囲に含まれます。 reverse=trueの場合、順序は逆転しますが、反復されたエントリは同じになります。reverse (boolean、default: false ) :逆順序でエントリを反復します。逆のシークは、フォワードシークよりも遅くなる可能性があることに注意してください。limit (番号、デフォルト: -1 ) :このイテレーターによって収集されたエントリの数を制限します。この数値は、最大数のエントリを表しており、最初に範囲の最後に到達した場合に到達できない場合があります。 -1の値は、制限がないことを意味します。 reverse=trueの場合、最も低いキーの代わりに、最高のキーを持つエントリが返されます。範囲オプションに加えて、 iterator()次のオプションを取ります。
keys (Boolean、Default: true ) :各エントリのキーを返すかどうか。 falseに設定すると、 iterator.next(callback)への呼び出しは、 undefinedの値のキーを生成します1 。キーを変換してJavaScriptにコピーする必要がないため、最終的にキーが何であるかを気にしない場合、効率性の向上はわずかです。values (boolean、default: true ) :各エントリの値を返すかどうか。 falseに設定すると、 iterator.next(callback)への呼び出しは、 undefinedの値で値を生成します。keyAsBuffer (boolean、default: true ) :各エントリのキーをバッファまたは文字列として返すかどうか。バッファから文字列への変換にはコストがかかるため、文字列が必要な場合(およびkey正当にUTF8文字列になることができます)、それを1つとして取得する必要があります。valueAsBuffer (boolean、default: true ) :各エントリの値をバッファーまたは文字列として返すかどうか。fillCache (boolean、default: false ):leveldbのlru-cacheをデータ読み取りで満たすべきかどうか。 1 leveldown 、現時点ではundefinedではなく、空の文字列を返します。
db.clear([options, ]callback)すべてのエントリまたは範囲を削除します。アトミックであることは保証されていません。次の範囲のオプションを受け入れます(反復器と同じルールを使用):
gt (より大きい)、 gte (等しい)は、削除する範囲の下限を定義します。キーがこのオプションよりも大きい(または等しい)エントリのみが範囲に含まれます。 reverse=trueの場合、順序は逆になりますが、削除されたエントリは同じになります。lt (より少ない)、 lte (等しくない)は、削除する範囲のより高い境界を定義します。キーがこのオプションよりも小さい(または等しい)場合のエントリのみが範囲に含まれます。 reverse=trueの場合、順序は逆になりますが、削除されたエントリは同じになります。reverse (boolean、default: false ) :逆の順序でエントリを削除します。最後のnエントリを削除するために、 limitと組み合わせてのみ効果的です。limit (番号、デフォルト: -1 ) :削除するエントリの数を制限します。この数値は、最大数のエントリを表しており、最初に範囲の最後に到達した場合に到達できない場合があります。 -1の値は、制限がないことを意味します。 reverse=trueの場合、最高のキーを持つエントリは、最も低いキーの代わりに削除されます。オプションが提供されていない場合、すべてのエントリが削除されます。 callback関数は、操作が成功した場合、または何らかの理由で失敗した場合にErrorある場合、引数なしで呼び出されます。
chainedBatchchainedBatch.put(key, value)このバッチにput操作をキューにします。これはdb.batch()の配列形式と同じルールに従って、 keyまたはvalueが無効である場合にスローする場合があります。
chainedBatch.del(key)このバッチのdel操作をキューにします。これは、 keyが無効である場合にスローする可能性があります。
chainedBatch.clear()このバッチのすべてのキュー操作をクリアします。
chainedBatch.write([options, ]callback)このバッチのキュー操作をコミットします。すべての操作は原子的に書かれます。つまり、それらはすべて成功するか、部分的なコミットなしで失敗します。
オプションのoptions引数には以下が含まれる場合があります。
sync (boolean、デフォルト: false )。このオプションの詳細についてはdb.put()を参照してください。バッチが成功した場合、または何らかの理由でバッチが失敗した場合、バッチが成功した場合、 Errorなしでcallback関数が呼び出されます。 writeが呼び出された後、それ以上の操作は許可されません。
chainedBatch.dbこのチェーンバッチを作成したdbへの参照。
iteratorイテレーターを使用すると、ストア全体または範囲を反復することができます。それは、 db.iterator()が呼び出された時に作成されたストアのスナップショットで動作します。これは、Iteratorの読み取りが同時の書き込みによって影響を受けないことを意味します。
イテレーターはfor await...ofまたは手動でiterator.next()を連続して呼び出すことにより。後者のモードでは、 iterator.end()を常に呼び出す必要があります。対照的に、Loop of Loopが自動的にiterator.end()を呼び出すfor await...of終了、スロー、または壊れてください。
イテレーターは、次の状況で自然の端に到達します。
iterator.seek()は範囲外でした。 Iteratorはnext()が進行中の時期とend()が呼び出されたときを追跡します。 next()呼び出しを許可しない場合、 next() end()または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()への後続の呼び出しは、 db.iterator()に渡されたreverseオプションがtrueであれば、 target以上のキーまたはtarget以上のキーを備えたエントリを生成します。同じことが、暗黙のiterator.next()呼び出しにfor await...of loopの呼び出しにも当てはまります。
gtのような範囲のオプションがdb.iterator()に渡され、 targetその範囲内に該当しない場合、イテレーターは自然端に達します。
iterator.end([callback])反復を終了し、基礎となるリソースを解放します。 callback関数は、成功に関する引数なし、または何らかの理由で終了が失敗した場合、 Errorが発生します。
コールバックが提供されていない場合、約束が返されます。
iterator.dbこのイテレーターを作成したdbへの参照。
leveldown.destroy(location, callback)既存のLevelDBデータベースディレクトリを完全に削除します。 LevelDB関連のファイルのみを削除するようにする場合は、フルディレクトリrmの代わりにこの関数を使用できます。ディレクトリにLevelDBファイルのみが含まれている場合、ディレクトリ自体も削除されます。ディレクトリに追加の非LevelDBファイルがある場合、それらのファイルとディレクトリはそのままになります。
破壊操作が完了したときにコールバックが呼び出され、可能なerror引数があります。
leveldown.repair(location, callback)破損したLevelDBストアの復元を試みます。 LevelDBのドキュメントから:
DBを開くことができない場合は、このメソッドを呼び出して、データベースのコンテンツをできるだけ復活させようとすることができます。一部のデータが失われる可能性があるため、重要な情報を含むデータベースでこの関数を呼び出すときは注意してください。
ストアディレクトリ内のログファイルの修理操作に関する情報があります。
repair()使用して、LevelDBログのテーブルファイルに圧縮することもできます。
修理操作が完了したときにコールバックが呼び出され、 error引数が可能になります。
現在、 leveldown 、基礎となるレベルDBインスタンスの状態を追跡していません。これは、すでに開いているデータベースでopen()を呼び出すとエラーが発生する可能性があることを意味します。同様に、オープンしないデータベースで他の操作を呼び出すと、エラーが発生する場合があります。
levelup現在、状態を追跡および管理しており、州外のオペレーションがleveldownに送信されるのを防ぎます。 leveldownを直接使用する場合は、自分で状態を追跡および管理する必要があります。
leveldown 、スナップショットと呼ばれるレベルDBの機能を公開します。これは、 createReadStreamとcreateWriteStream同時に行う場合、書き込みストリームによって変更されたデータは、読み取りストリームから放出されるデータに影響しないことを意味します。言い換えれば、レベルDBスナップショットは、スナップショットが作成された時点で最新の状態をキャプチャし、スナップショットが後続の書き込みを見ずにデータを反復または読み取ることができます。スナップショットで実行されない読み取りは、最新の状態を暗黙的に使用します。
質問がある場合は、GitHubリポジトリに問題を開くことができます。
過去およびアクティブなサポートチャネルは、FreeNodeの##leveldb IRCチャネルとnode.js leveldb Googleグループが含まれます。
Level/leveldownは、オープンオープンソースプロジェクトです。これは、それを意味します:
重要かつ貴重な貢献をしている個人には、プロジェクトへのコミットメントが与えられ、適切と思われます。このプロジェクトは、標準的なガードされたオープンソースプロジェクトというよりは、オープンウィキのようなものです。
詳細については、貢献ガイドを参照してください。
このプロジェクトでは、Gitサブモジュールを使用しています。これは、作業を計画している場合は、再帰的にクローンする必要があることを意味します。
$ git clone --recurse-submodules https://github.com/Level/leveldown.gitまたは、クローン化されたフォルダー内のサブモジュールを初期化できます。
$ git submodule update --init --recursivenpm version ..git push --follow-tags./prebuilds npm run download-prebuildsにダウンロードしますnpm run test-prebuildロードを確認しますcanadian-pubnpm publish Open Collectiveでの毎月の寄付で私たちをサポートし、私たちが仕事を続けるのを助けてください。
mit
leveldown 、Googleおよび追加の貢献者からのLevelDBおよびSnappyチームの優れた仕事に基づいています。 RevelDBとSnappyはどちらも新しいBSDライセンスの下で発行されます。 leveldown Windowsサポートの大部分は、Krzysztof Kowalczyk( @kjk )によるWindows LevelDBポート(アーカイブ)から来ています。 Windowsでleveldownを使用している場合は、彼に感謝を捧げる必要があります!