HN 日本語サマリー

← 一覧へ戻る
プログラミング

Prolly: prollyツリー上に構築されたコンテンツアドレス指定された順序付きマップ

Prolly: A content-addressed ordered map built on prolly trees (github.com)

48 pointsby forhappy4 コメント

要約

Prollyは、Rustで書かれたコンテンツアドレス指定された順序付きマップライブラリです。不変で、キーと値のペアをバイト列で管理し、構造的な共有、差分、マージ、バルクロードを効率的に行えます。各ノードは内容に基づいて一意のアドレス(CID)を持ち、変更は影響を受けたパスのみを更新するため、効率的なバージョン管理とデータ共有が可能です。ストレージはプラグイン可能で、メモリ、SQLite、RocksDBなどがサポートされています。

全文翻訳

Prolly Prollyは、prolly Rustライブラリクレートを公開しています。ユーザーはprolly-mapとしてパッケージに依存し、コードのインポートは簡潔です:use prolly::{Config, Prolly}; クレートは、バイトキーとバイト値に対する不変で順序付けられたキーバリューストアのプリミティブであるコンテンツアドレス指定されたprollyツリーストレージを提供します。効率的な構造共有、差分、マージ、バルクロードのための安定したコンテンツ由来の構造を備えています。API境界では、Treeは小さな永続的なハンドルです:root: Option<Cid>はコンテンツアドレス指定されたルートノードを指します。config: Configはツリーによって使用されるチャンキングおよびエンコーディングパラメータを記録します。実際のノードはプラグ可能なStoreに存在します。操作は、影響を受けたパスまたはサブツリーのみをクローンおよび書き換え、新しいコンテンツアドレス指定されたノードを書き込み、新しいTreeハンドルを返します。ストレージバックエンドのツリー操作はすべて、ランタイムニュートラルで非同期ファーストのエンジンによって一度実装されます。AsyncProlly<S: AsyncStore>はそれを直接使用します。Prolly<S: Store>は、インライン読み取り専用アダプターを介して同じ完全な操作を駆動します。同期パスはランタイムを作成せず、スレッドをパークせず、Tokioへのストア呼び出しをディスパッチしません。 アーキテクチャ同じ図が、ラスター画像を好むコンテキストのためにdiagram/prolly-tree-architecture@2x.pngとしてもレンダリングされます。完全なエンドユーザー向けドキュメントセットはdocs/にあり、開始ガイド、ガイド、クックブックレシピ、アーキテクチャ、設計仕様、実装ノート、ロードマップ、言語ポートガイドが含まれています。正規のクックブックはdocs/cookbook.mdです。ネイティブ近似最近傍インデックスはdocs/proximity-map.mdに文書化されています。破壊的な変更とリリース資格はCHANGELOG.mdに記録されています。 インタラクティブビジュアライザー3rd/prolly-tree-visualizerのブラウザアプリは、このリポジトリの実際の@crabbuild/prolly-wasmバインディングに対してミューテーションを実行し、結果のコンテンツアドレス指定されたツリー、ルックアップパス、構造的な差分、およびストレージ履歴をレンダリングします。prollyツリーの上にGitのようなリポジトリレイヤーを構築したいアプリケーションビルダー向けには、提案されているprolly-vcs設計を参照してください。これはprolly-mapを不変の順序付きマップに集中させながら、コミット、参照、リファログ、パッチ、マージオーケストレーション、同期計画、およびリポジトリレベルのGCのための汎用バックエンドニュートラルKvStoreサブストレートを持つ別のクレートを概説しています。 このクレートが提供するものレキシコグラフィックキー順序付けによる順序付けられたバイトキーのルックアップ。 不変の更新:put、delete、batchは新しいTreeを返します。 コンテンツアドレス指定されたノード:各ノードCIDは、決定論的なノードバイトのSHA-256ハッシュです。 xxHash64境界チェックを使用した決定論的なコンテンツ定義チャンキング。 変更されていないノードが同じCIDを保持するため、バージョン間の構造的共有。 同じCIDのプルーニングと無関係な子スパンによる効率的な差分および範囲差分。 3者マージと競合リゾルバサポート。 CRDTスタイルの競合フリーマージ戦略。 遅延範囲イテレーションとカーソルベースのトラバーサル。 ソート済み、グループ化、追加負荷、マルチリーフ書き込みのためのバッチミューテーションパス。 大規模な初期ツリーのための並列バルクビルダー。 Storeトレイトを介したプラグ可能なストレージ。メモリ、SQLite、およびオプションのRocksDB実装が含まれます。 Merkleスタイルの欠落ノード計画とストア同期用のコピーヘルパー。 ブランチ、タグ、チェックポイント、カスタムルートのスナップショット名前空間ヘルパー。 トランザクションセーフなVersionedMapファサード。自動ヘッド、不変のコンテンツ由来バージョン、ピン留めされた読み取り、証明、比較とマージ、バックアップ/同期、型付きコーデック、サブスクリプション、マルチマップトランザクション、バウンド履歴、スコープ付きGCを備えています。 ランタイム定義された非ユニークなセカンダリインデックス用の厳密なIndexedMapコーディネーター。ワンルートアトミック公開、有限操作予算、スパースおよびマルチバリュー用語、KeysOnly/Include/All投影、正確な履歴スナップショット、永続ピン、安全なGC、構造化診断、検証済みバウンド転送。 アプリケーションは同じエンジンを介してそれを開きます。ProllyまたはAsyncProllyのengine.indexed_map(...)形状。 どちらのパスも同じ正規の状態フォーマットと厳密なトランザクションルート公開を使用します。 PostgreSQL、MySQL、Redis、Turso、DynamoDB、Cosmos DB、Spannerのネイティブ非同期サポートはファーストクラスであり、ブロッキングアプリケーションが必要とする場合には同期ファサードが利用可能です。 ストア独立型の単一キー、共有マルチキー、完全範囲、カーソルページ、およびツリールートの差分ページ証明。 ツリー統計(形状、充填率、ファンアウト、シリアル化サイズを検査するため)。 正確なルックアップ、フィルタリングされたベストファースト検索、ローカライズされた正規のCOW、オーバーフロー/外部ベクトル、SQ8/PQ/HNSWアクセラレーション、非同期/SIMD実行、型付きレプリケーション/GC、およびディスクリプタバウンド証明を備えたハードカット決定論的近傍マップ。 クイックスタートuse prolly::{Config, MemStore, Prolly}; let store = MemStore::new(); let prolly = Prolly::new(store, Config::default()); let tree = prolly.create(); let tree = prolly .put(&tree, b"name".to_vec(), b"Alice".to_vec()) .unwrap(); let value = prolly.get(&tree, b"name").unwrap(); assert_eq!(value, Some(b"Alice".to_vec())); let tree = prolly.delete(&tree, b"name").unwrap(); assert!(prolly.get(&tree, b"name").unwrap().is_none()); すべての更新APIは永続的です。 古いTreeハンドルは、ストアが参照するノードをまだ含んでいる限り有効です。 スタンドアロンチェックアウトこのディレクトリは独自のレポジトリとして開くことができます。 このツリー下のRustマニフェストは、独自のパッケージメタデータ、依存関係バージョン、およびリンティング設定を宣言します。 リポジトリのルートからコアクレートを実行します:cargo check --all-targets cargo test cargo run --example basic_map プロバイダーのストアとRustバインディングはネストされたパッケージにあります。 --manifest-pathでそれらをチェックします:cargo check --manifest-path stores/prolly-store-redis/Cargo.toml --all-targets cargo check --manifest-path bindings/uniffi/Cargo.toml --all-targets cargo check --manifest-path bindings/wasm/Cargo.toml --target wasm32-unknown-unknown コピー可能な例はexamples/にあります: agent_event_log.rs:メッセージ、ツール、メモリ書き込み、チェックポイント、および要約のための追加負荷エージェントイベントログ。 background_compaction.rs:保持を意識したイベントログのコンパクション、要約インデックスの再構築、およびGC。 basic_map.rs:put、get、delete、および範囲スキャン。 batch_build.rs:バルクビルドとツリー統計。 diff_merge.rs:差分と競合フリーの3者マージ。 resolver.rs:削除を意識したマージリゾルバ。 secondary_index.rs:Strict IndexedMapインデックスの宣言、ビルド、クエリ、検証、置換、保持、エクスポート、およびインポート。 indexed_map_real_world.rs:ステータス、顧客、テナント、時間、スパース、マルチバリュー、カバリング、パス、ジオスペース、テキスト、および履歴インデックスの14のプロダクション形状パターンの実行。 materialized_view.rs:ソース差分からマテリアライズドビューを派生および更新します。ソース/ビューのルートはマニフェストにあります。 crdt_merge.rs:LWW、マルチバリュー、削除/更新、診断、およびベースを意識したカスタムマージの例。 conversation_memory.rs:正規のメモリルート、エージェント試行ブランチ、マージ、およびCAS公開。 deterministic_rag_snapshot.rs:再現可能なRAG回答とロールバックのための正確なインデックスルートの記録。 document_chunk_index.rs:ドキュメント/チャンクキーの規則、ブロブバックドテキスト、およびベクトルサイドカーID。 vector_sidecar.rs:サイドカーベクトルエンジンに埋め込みを保持し、prollyルートは検索メタデータを保持します。 versioned_map.rs:アトミック編集、履歴、差分、ロールバック、および保持のために組み込みの管理マップファサードを使用します。 provenance_values.rs:ソース、パーサー、埋め込み、モデル、親チャンク、およびCIDの出所を運ぶ値。 file_blob_store.rs:永続的なブロブオフロードとブロブGC。 filesystem_snapshot.rs:ファイルブロブと名前付きルートを持つGitのようなファイルシステムスナップショット。 アダプター固有の例には、完全オフラインの1,536次元ProximityMapであるsemantic_rag.rsが含まれます。これは、コーパスと名前付きディスクリプタをSQLiteに永続化し、プロセス実行間で再オープンし、ランク付けされたRAG引用とLLM対応のコンテキストブロックを出力します。スタンドアロンのprolly-gluesql統合は、完全なGlueSQLデータベースを1つのトランザクションProllyツリーに変換します。永続的なブランチ、不変のバージョン、セカンダリインデックス、論理差分、履歴読み取り、およびオプションのSQLiteバックエンドCLIを備えています。 ネイティブRustストアアダプターはstores/の下にあります。