Lightning メモリーマップデータベースマネージャー(LMDB) 1.0

2026/07/03 5:01

Lightning メモリーマップデータベースマネージャー(LMDB) 1.0

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

LMDB ライブラリは、BerkeleyDB API に大雑把にモデル化された高性能なメモリーマッピングデータベースシステムであり、完全なデータベースをメモリーマップとして露出することで効率性を高めています。このライブラリはコピーオンライト戦略を採用しており、データ改ざんの防止、特別なクラッシュ回復手順の不要化、そしてリードがワライタをブロックしないマルチバージョン化を実現します。書き込みは完全にシリアル化され、整合性が保証され、また周期性のあるチェックポイントやメンテナンス作業なしで非制限的なストレージ成長を防ぐため、自由ページを効率的に管理します。

BerkeleyDB にモデル化されていますが独自の特徴を持ち、LMDB はメモリーマップをデフォルトで読み取り専用として設定することで、改ざんの完全な免疫を提供しますが、アプリケーションコードがバグっている場合に腐敗のリスクがある代わりに、高いパフォーマンスをもたらす読み書きモードも用意されています。バージョン 0.9.10 より以後、ライブラリは使用されていないファイル領域を自動的に初期化し(

MDB_NOMEMINIT
が設定されない限り)、廃棄データを防ぎます。また、複数のスレッド/プロセスからの同時アクセスをサポートしており、各スレッドが単一のトランザクションと子トランザクションのみを管理する限りです。

LMDB はメンテナンスを簡素化しますが、ユーザーは特定の運用制約に遵从する必要があります:BSD や SysV システムでのマルチユーザーセマフォア構成は起動失敗を引き起こすことがあり、通常はアプリケーションをオーナーまたはルートとして実行することで解決されます。また、ロックファイルの必要性から純粋な読み取り専用モードは一般的に利用できません(読み取り専用FileSystem上の場合や

MDB_NOLOCK
を使用する場合を除く)。さらに、中止されたプログラムからの古くなったリーダートランザクションについては、
mdb_reader_check
または
mdb_stat
を通じた定期的なチェックが必要となり得ますが、古くなったワライタは通常自動的にクリアされます。全体として、LMDB はユーザーが所有権要件、バージョン固有の挙動、および同時実行性を遵守すれば、複雑なデータ管理の安定した基盤を提供します。

本文

LMDB データベース管理ライブラリ概要

基本概念と仕組み

  • 構造: BerkeleyDB の API に基づく簡素化された B 木(B-tree) を採用しています。
  • メモリ管理:
    • 全体データをメモリマップとして公開します。
    • データフェッチはマッピング済みメモリから直接行われるため、
      malloc
      memcpy
      が発生しません。
    • 独自のページキャッシュレイヤーが不要で、極めてシンプルかつ高パフォーマンスを実現します。
  • トランザクション性: 完全なACID 準拠のセマンティクスを提供します。
    • メモリマップが「読み取り専用モード」の場合、アプリケーションによる誤書き込み(stray pointer)で整合性が損なわれることはありません。

重要な特性とパフォーマンス

  • スレッド対応: 完全なマルチスレッド・マルチプロセスサポートがあり、同時並行的な読み取り・書き込みが可能です。
  • コピートンライト(Copy-on-Write)戦略:
    • データページの過上書きを防ぎ、整合性侵害への耐性を高めます。
    • システムクラッシュ後の特別な回復手順が不要です。
  • ロック機構:
    • データベース構造はマルチバージョン管理のため、リーダにはロックが必要ありません。
    • ライターとリーダの相互排他処理なく、一方が他方をブロックすることはありません(ライター間はシリアル化)。
  • メンテナンス不要:
    • Write-Ahead Log (WAL) や Append-Only データベースと異なり、動作中にログチェックポイントやコンパクションが不要です。
    • 使用済みページの再利用により、通常の運用環境ではデータベースファイルが無制限に成長することはありません。

モード設定:読み取り専用 vs 読み取り書き込み

モードデフォルトメリットデメリット・リスク
読み取り専用完全な整合性侵害への免疫が得られます。書き込み不可。
読み取り書き込み書き込みパフォーマンスが大幅に向上します。アプリケーションコードのバグによる誤書き込みでデータベースが静かに破損するリスクがあります。(コードがバグフリーなら問題なし)

注意喚起事項とトラブルシューティング

ロックファイルおよびセマフォ関連のトラブル

  • 古くなったリーダトランザクションの影響:
    • 中止されたプログラムによって残った古リーダーダーは、新規書き込みをブロックし、データベースファイルを急速に成長させる原因となります。
    • 対処法:
      mdb_reader_check
      関数または
      mdb_stat
      ツールで定期的にチェックしてください。
      • Windows / BSD / SysV セマフォ系システムでは、古いライターが自動クリアされます。
      • Linux(Robust オプション有効)でも自動クリアされます。
      • それ以外の場合は、環境を閉じることでロックファイルリセットが実行されます。
  • セマフォ所有権問題:
    • BSD や特定のシステムでは、異なるユーザ ID がセマフォを所有している場合、起動に失敗することがあります。
    • 対処法: セマフォを所有しているユーザ(または
      root
      )でデータベースを開きかつ閉じることで解決します。(※他のプロセスが使用していない必要があります)

制限事項と注意点

  • ユーザ権限: データベースの所有者以外は通常使用不可。複数ユーザでの同時運用は起動失敗の原因になります。
  • 純粋な読み取り専用モード: 基本的にリーダロックファイルへの書き込みが必要ですが、以下例外可能です。
    • ファイルシステム自体が「読み取り専用」の場合。
    • mdb_env_open()
      MDB_NOLOCK
      フラグを指定した場合。
  • メモリアドレス空間の予約: 将来拡張用に未使用メモリやファイルサイズを多数予約することがあります(実際の使用量を超えるため、容量不足に怯えずください)。
  • ゼロ初期化のコスト:
    • デフォルトでは書き込み前に未使用メモリのゼロ初期化が行われます(0.9.10 以前は非実装だった場合がありましたが、現在はデフォルト)。
    • これによりわずかなパフォーマンスコストが発生するため、高速性を優先する場合は
      MDB_NOMEMINIT
      フラグを使用します。
    • ⚠️ 機密データを扱う場合: このフラグは使用しないでください(未初期化領域にデータが書き込まれるため)。
      MDB_WRITEMAP
      を使用中はこの挙動は無関係です。
  • トランザクションの制限:
    • 1 スレッドあたり 1 トランザクションまでです(子トランザクションも含まれます)。
    • 例外:読み取り専用トランザクションのみであれば
      MDB_NOTLS
      フラグで複数使用可能。
    • プロセス分割 (
      fork()
      )
      : オープンした
      MDB_env*
      fork()
      の後にそのまま使用しないでください。
    • 重複オープン: 同じプロセス内で同じ DB を二回オープンすることは禁止(
      fcntl()
      アドバイソリロックの破損)。但し、
      fork()/exec()
      後の再オープンは OK(ロックファイルに
      FD_CLOEXEC
      が設定されているため)。
  • 長命トランザクションの回避:
    • 読み取りトランザクションが長期間開放されると、ページ再利用を防ぎ DB 成長の原因になります。
    • 書き込みトランザクションも、シリアル化により他のライティングをブロックします。
  • プロセス中断への注意:
    • アクティブなトランザクションを持つプロセスを中止すると「長命トランザクション」状態と同様の不具合が起きます。
    • ライターコミット後に停止されたリーダは、誤ったデータを返す可能性があります。

マルチプロセス環境での運用指針

  • プロセス中止の禁止: アクティブトランザクションを持つプロセスを強制的に終了させないでください(ロック解放の遅延により破損するリスク)。
    • ※システムが自動クレンジャ(古いライター)として動作する場合、書き込みトランザクションには適用されません。
  • ロックファイルのリセット: 万が一中止した場合でも、定期チェックか環境の閉じ開放でロックファイルをリセットしてください。
  • リモートファイルシステムの禁止: 同じホスト内のプロセス間でも、リモート FS 上の LMDB は使用しないでください(
    flock()
    の破損や同期問題が起きるため)。
  • 同時オープン/クローズへの注意: 他のプロセスがまさに DB を開閉している最中は、オープン操作が失敗する可能性があります。

ライセンス情報

  • 著作権: Copyright 2011-2026 Howard Chu, Symas Corp.
  • ライセンス: OpenLDAP Public License に基づき、ソースコードおよびバイナリの再配布・使用が許可されます。
  • 派生元: Martin Hedenfalk 氏による
    btree.c
    を基盤としています(Copyright (c) 2009, 2010)。

免責事項

  • ソフトウェアは**「現状のまま」**提供され、いかなる保証も行いません。
  • 明示的な保証はありません。また、商売性および特定の用途への適合性に関する黙示的保証も排除されます。
  • 著者は、使用や実行に関連するすべての損害(損失、データ破損、利益喪失など)について一切の責任を負わないものとします。

同じ日のほかのニュース

一覧に戻る →

2026/07/03 6:03

バージニア州、地理的位置データ販売を禁止

## Japanese Translation: 提供されたテキストは、一貫した記事ではなく二進データ、符号化文字、および読み取れない内容のみから構成されているため、要約することができません。事実や日付、製品名を含む標準的な記事とは異なり、この源資料には有意義な分析に必要な理解可能性を欠いています。その解読不可能な性質から、特定の文脈、出来事、または背景情報は導き出すことができません。テキストを処理できないというこの状況のため、有益な洞察や関連する事実を引き出すことは不可能です。源入力を人間が読み取れる言語に変換されるまで、有効な要約を作成することは不可能です。その間もなお、中央テーマ、主要な論点、または具体的な物語を特定しようとするのは無駄であり、データには識別可能なストーリーが存在しないためです。最も重要な点は、この入力が混乱した非構造化形式のため、標準的な読解タスクに根本的に使用できないということです。

2026/07/03 3:41

エキスパンクス(2018)

## Japanese Translation: EXAPUNKS プロジェクトは、プレイヤーが現実的なハッキング活動に取り組み、「EXas」と呼ばれる自律エージェントを管理し、複雑なデジタルタスクを実行できるサンドボックス環境を提供します。従来のシミュレーションとは異なり、このエコシステムではユーザーが現実世界の物体を操作したり、実際のネットワークを侵害したりし、その侵害された状態の中でゲーム世界内で安全に行動することができます。体験の中核には、秘密のヒント、コメント、チュートリアル、EXas をプログラミングしてファイルを破棄させたり、自己複製したり、他のエージェントを停止させたり、痕跡を残さずに姿を消させたりするための詳細を提供する公式 *TRASH WORLD NEWS* ズィンがあります。プレイヤーは銀行、大学、工場、テレビ局、高速道路の標識、ゲームコンソール、政府システム、さらには自身の肉体など幅広い対象を対象とし、その後「ПАСЬЯНС」(パシアンズ)、地域ロックをハッキングした後の「HACK*MATCH」、あるいは TEC Redshift 用のホームブロー開発などの代替ミニゲームにアクセスできます。物理的なデラックス版のズィンセットは、2020 年 4 月に Lulu でのオンデマンド印刷を通じて復活し、7 ドルプラス送料で提供されましたが、両方の号への注文が必要でした。開発者向けには、2018 年 7 月 16 日に詳細とともにリリースされた「Axiom VirtualNetwork+」があり、ホスト、ファイル、レジスタ、ゴール、そしてその API を通じた完全なパズル仕様機能を利用して、ホストスクリプトを記述した JavaScript ベースの「バーチャルネットワーク」を作成することでカスタムパズルの作成が可能になります。2018 年と 2020 年のこれらのリリース以降、専用のコミュニティが栄え、標準的な商業制約を超えたサイバーセキュリティの探求やイノベーションを促進し続けます。

2026/06/28 8:36

現実には驚くほど多くの詳細が存在する (2017)

## Japanese Translation: 私たちが単純なものとして扱っている多くのタスク—地下室の階段を築くことや水を沸かすことなど—is、実行前に深い調査が必要となる重要な細部を隠しています。著者の父は 18 歳でコロンビアから北米へ移住し、実地作業を通じて建築を教えてくれました(フェンスの取り替え、塹壕の掘削、床および小屋の築造など)。著者はフェンスの手すりを取り替える際、床を敷設し、地下室の階段を築く際にこの教訓を実際の経験として学びました。 二つの 2×12 に角度ブラケットを用いて作られた階段は一見単純に見えますが、複数の副次的タスクを含んでいます:切り取り角度を計算またはトラACING し、U ブラケットを取り付けること、および板材を固定することです。木材は乾燥するにつれて歪むため、2x12 を正しい角度に切り取ることは容易ではありません。視覚的な対齐も失敗するため、三角関数を使用するか、円鋸用ガイドを雇用するか、または計算だけよりも木目追跡の方法を好む必要があります。ブラケットを引かれた線上に合わせてからネジを取り付けた場合でも、最初にもうけホールを掘らないとネジが斜めに取り付けられてしまいます;ブラケットを数インチ移動して再 drilling することでより良い結果が得られます。2 インチより長いネジを使用すると、階段の踏み面から突き抜け足に刺さるリスクがあるため、短いネジが不可欠です。 同様に、沸騰は単に「100°C の水」ではありません。真の沸騰の前に小さな気泡が発生します。ガラス鍋はより高い温度を耐え、硫酸で清掃されたガラス容器では水を過加熱することができ、攪拌によって爆発的に飛び散ります。二つの液体の間にわずか一滴の水を挟むだけでも、沸騰せずに約 300°C に加熱でき、一般的な主張と矛盾します。これらのリスクは、充填ベッドとロケット軌道計画を必要とする工業プロセスにも広がっており、見えない力は正確なスロットル制御と使い回し可能なロケットのための慎重な重量管理を要求します。 歴史もこれらの教訓に反響しています:アルコール熱計は 18 世紀にジャン=アンドレ・デュリュがその非線形性を明らかにするまで標準的なものでした。重要な細部が見えないままにされる時、知的な行き詰まりが生じます—例えば、「すべてのデータは「偽造されている」と主張し気候変動を否定する代わりに、見落とした過ちを注意すること—。一度見えなかった細部が出会うと透明化し、進捗はそれを見無視する場合のみ停滞します(例:三角関数 versus トラACING を巡る家族の議論)。究極的に言えば、住宅修理、大規模なエンジニアリング、科学的探究における成功は、予期しない変数を積極的に探し求め、詳細な観察を受け入れ、表面的な仮説への依存を拒むことにかかっています。

Lightning メモリーマップデータベースマネージャー(LMDB) 1.0 | そっか~ニュース