オブジェクトストレージ上で Git を実行するには、パックファイルを書き直す必要があります。

2026/09/17 2:16

オブジェクトストレージ上で Git を実行するには、パックファイルを書き直す必要があります。

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

要約

Japanese Translation:

著者は、標準的なファイルシステム手法による深刻なスケーラビリティ問題に対処するため、オブジェクトストレージを基盤としたオープンソースの Git サーバーを開発した。標準的な Git は高速なローカル読み込みに依存しているが、ネットワークの往復時間は大幅に遅く、既存のソリューションにおけるパフォーマンスのボトルネックとなっている。このレイテンシギャップを克服するために、

.bin
および
.cue
ファイルを用いたカスタムの「Packfile v2」形式が作成された。この形式は、圧縮済み/未圧縮サイズのメタデータ、bin オフセット、長さを正確に含むオブジェクトを順次保存し、
zstd
圧縮を使用することで、特定のデータをダウンロードすることなく、HTTP Range リクエストを用いて効率的に取得できるようにしている。以前に試行されたファイルシステムシムを使用したアプローチは、Git パックファイルインデックスが必要とするランダムアクセス操作を効果的に処理できなかったため失敗した。現在のプロトタイプは背景プロセスによるギャップの埋め込みと、コンパクション(圧縮)機能に依存しておらず、パックファイルが永続的に蓄積してしまう点では制限がある。しかしながら、レポジトリへのプッシュで 5 倍の速度向上が見られ、クローン時のクラウドストレージリクエストも大幅に削減できるという顕著な利点を有している。ただし、システムには現在認証、レート制限、パブリック API、およびシーケンシャル保存以外のデルタオブジェクト管理メカニズムが欠如しており、これを直接公開すると重大なセキュリティリスクを引き起こす可能性がある。

本文

オブジェクトストレージネイティブな Git サーバー「objgit」の開発と実装

開発の背景とアプローチの変化

近年、複数の企業が Git サーバーの製品化に取り組んでいますが、当プロジェクトではオブジェクトストレージを基盤としたオープンソース Git サーバーの構築を行っています。

  • 当初のアプローチ:

    • Git をファイルシステム上のリポジトリとして扱うため、オブジェクトストレージ(Tigris)上にファイルシステムシミュレーション層を導入する手法を採用しました。
    • しかし、大規模なリポジトリではパフォーマンス低下が著しく現れ、この手法は現実的ではないことが判明しました。
  • 転換点:

    • Git はデータをすべて「オブジェクト」として管理しているため、オブジェクトストレージのネイティブなオブジェクトとして直接保存するアプローチへと変更しました。
    • 従来のパックファイル形式とファイルシステムシムの相互作用がボトルネックとなっていたため、独自の列指向ストア(Columnar Store)ネイティブなパックファイル形式を開発しました。

Git の仕組み:「裸のオブジェクト」とパックファイル

Git とは何か

Git は以下の二つの要素から構成されます。

  • オブジェクトの海: 変更内容を実体として保存する部分。
  • 参照システム: それらのオブジェクトへの命名参照(ハッシュ値)。

各オブジェクトは、SHA1 ハッシュ値をファイル名とし、内容が圧縮された単なる裸のファイルです。

$ mkdir ~/tmp/gitexample
$ git init && git branch -m main
$ echo "Hello, blog!" >> hello.txt
$ git add .
$ git commit -sm "chore: initial commit"

大規模リポジトリでの課題

小規模なリポジトリでは複数の「裸」オブジェクトが存在しますが、Linux カーネルのような巨大なリポジトリ(例:1,000 万個以上のオブジェクト)では以下のような問題が発生します。

  • インオード制限: ファイルを個別に作成するとディスク上の inode 数が限界に達します。
  • パックファイルへの圧縮: Git はこれを回避するために、複数のオブジェクトを圧縮した**パックファイル(Packfile)**形式へ自動的に変換します。
    • コマンド:
      git gc

パックファイルの非適合性

従来の Git の設計は、ローカルストレージと mmap(メモリアドレス空間マッピング) を前提としています。

  • ディスクへの書き込み後、即時の読み取りが可能ですが、ネットワークラウンドトリップは少なくとも 10 ミリ秒必要です。
  • これを解消するためには、オブジェクトストレージ上のデータに対して
    PutObject
    が完了する前に
    GetObject
    を実行する必要があり、これは標準的なオブジェクトストレージの挙動に反します。

ソリューション:CUE シートと Bin ファイルの導入

CD-ROM の「CUE シート」と.bin ファイルの構造から着想を得た独自の形式を開発しました。これにより、ネットワーク越しでの高効率なデータ取得が可能になります。

構造的特徴

  • 二部構成: データ本体(.bin)とメタデータ(.cue)を分離します。
  • ランダムアクセスの最適化: HTTP Range リクエストを活用し、必要なオブジェクトだけを抽出できます。
    • インデックスエントリに圧縮前・後両方のサイズファイル内オフセットを格納することで、正確な範囲指定が可能になりました。

Packfiles v2: オブジェクトストレージ・ボガロオ(Boogaloo)

この形式は以下の技術的要素を取り入れています。

  1. Range リクエストネイティブ対応: バケットから特定のオフセットだけを抽出できる設計です。
  2. 高速圧縮ライブラリ:
    zlib
    よりも効率的な
    zstd
    を採用しています。
  3. 完全なデルタオブジェクト: デルタ先を参照せず、必要なデータを完全に含む形式です。

形式仕様 (.cue)

バイナリ形式で固定幅レコードを持ち、ヘッダーと記録されたメタデータから構成されます。

フィールド名サイズ内容説明
Magic (魔術子)4 Bytes
"OGCU"
Version2 Bytesバージョン番号
Record Size2 Bytesレコードサイズ(固定)
Record Count8 Bytes記録数

1 レコードあたりの情報:

  • Hash (SHA-1): オブジェクトの一意な識別子 (20 bytes)
  • Type: 種類 (blob, tree, commit など)
  • Comp: 圧縮アルゴリズム (zstd など)
  • Bin Offset: .bin ファイル内でのオフセット位置
  • Bin Length: オブジェクトの長さ
  • Size: 元のサイズ(非圧縮)
  • Delta Base: デルタ先オブジェクトのハッシュ

パフォーマンスベンチマーク結果

独自の形式(New Form)と従来の形式(Old Form)を比較した結果、ネットワークコスト削減が劇的なパフォーマンス向上につながりました。 ※テスト環境: Mac 16 コア / Git v2.55.0 / objgit v1.26.5

プッシュテストの結果

  • S3 リクエスト数(プッシュ):
    • 既存形式:数千回必要だったものが、数十回に大幅削減
    • Xe/x リポジトリ: 約 300 倍の削減
  • 壁時間(実時間):
    • objgit_old (8.7 秒) -> objgit_new (2.2 秒): 4 倍以上高速化
    • Tigris Blog: 5 倍以上高速化

クローンテストの結果

  • S3 リクエスト数(クローン):
    • Xe/x リポジトリ: 約 380 倍の削減(旧:6,428 回 -> 新:17 回)。
  • 壁時間(実時間):
    • objgit_old (11.8 秒) -> objgit_new (2.6 秒): 約 4.5 倍高速化
    • Xe/x: 3m23s -> 54.4s (約 3.7 倍高速化)。

【要約表】クローンテスト詳細

リポジトリ形式壁時間S3 要求数GET (ファイル別取得)
objgit旧形式11.8s323 回510
objgit新形式2.6s17 回13
x_old旧形式3m23.5s6,428 回5,337
x_new新形式54.4s17 回4
blog旧形式2m23.6s3,675 回3,155
blog新形式1m22s158 回1

: 「GET」項目は、パックファイルから個別のオブジェクトを Range リクエストで取得した数を示しています。新形式ではバックグラウンドダウンロードとの競合制御が効率的になっています。

結論と今後の展望

成果と意義

  • ネットワークコストの劇的削減: オブジェクトストレージへの API コール数を減らし、レイテンシを大幅に低減しました。
  • 運用性の向上: プッシュ/クローン操作が非常にレスポンシブになり、大規模リポジトリでも実用的な速度になりました。

今後の課題と制限事項

  • セキュリティ機能の未実装: 現在、認証や認可、レート制限などの機能は実装されていません。インターネット上での公開は推奨されません
  • アーキテクチャ制約: 128 MiB のパックファイルサイズ制限(ダウンロード速度制御のため)がありますが、将来的に Git Large File Storage (LFS) の実装を予定しています。

まとめ

Git のパックファイル形式は、ローカルなファイルシステム上では優れた設計ですが、オブジェクトストレージのようなネットワーク環境では限界があります。 今回考案した「.bin/.cue」形式と列指向ストレージへのネイティブ対応により、この課題を解決し、大規模な Git リポジトリでも高パフォーマンスを実現しました。

引き続きプロジェクトを強化し、認証機能や API の実装などを行っていく予定です。

同じ日のほかのニュース

一覧に戻る →

2026/09/19 19:46

1 年前に RL を用いた非自己回帰型決定モデルを構築した

## Japanese Translation: 本テキストは、エンタープライズワークフローを悩ませてきた高遅延と幻覚(ハルシネーション)のリスクを排除することを目的として設計された画期的な完全にオープンソースの AI モデル「Laya」を紹介する。標準的な生成型大規模言語モデルがしばしば 500〜2,000 ミリ秒の遅延を経験するのに対し、Laya は単一の GPU で顕著な 32.8 ms の遅延を実現し(バッチ処理された質問の場合には 7.2 ms)、これを達成するためには形式自由なテキスト生成を完全に回避し、代わりに辞書からオプションを選択する「choice」命令、順序付けされた評価基準レベルを割り当てる「score」命令、および真理値論理によって有用でない出力を示す「noul」という 3 つの特定の決定プリミティブのみを通じて構造化データのみを出力することを行っている。この建築学的なシフトは、ルーティングやスパム検出などの重要なタスクに対して瞬時に数学的に校正された確率を確保し、100 言語以上をカバーしている。TypeSafe の「Jev」といったプロプライエタリ競合製品に優越するように開発された Laya は、企業がローカルで展開することを可能にし、API 手数料と運用コストを大幅に削減する。将来的な改良により、現在のトークン予算の制限を超えたより大きなオプションセットを処理することが予想され、英語専用モデルに見られる一般的な失敗がないグローバルかつマルチスキーマの意思決定のための堅牢なソリューションとなるだろう。

2026/09/19 18:20

生成 AI で作られたポスターがひどいものに終わる必要はありません。

## Japanese Translation: チャットGPT は、AI アートにしばしば関連づけられる反復的・一般的な外見を避け、独自で高品質なポスターデザインを容易に生成できます。初期の要求では標準的なテンプレートが生成される場合もありますが、具体的な指示を与えることで、文脈に応じたテキストオーバーレイ付きのバウハウス幾何学や日本のミニマリズムなど、多様な芸術スタイルを解き放つことができます。以前の批評において「すべての AI 画像は同一である」と主張されていた点とは対照的に、洗練されたプロンプティングは、鑑賞者が直ちに機械生成であると特定しにくい独自性のある視覚コンテンツの作成が可能であることを証明しています。さらに、Claude や Gemini などの他の高度なモデルも、編集可能なテキスト層を含む PDF や HTML ファイルといった実用的に使用可能な形式を出力し、デザイナーが必要なグラフィックアセットを素早く取得する際に実践的な利便性を提供します。これらの成功した結果を他者が再現できるようにするために、著者は様々なポスタースタイルを網羅した 100 の即座に使用できるプロンプトのカタログを編纂しました。このリソースにより、各新しいプロジェクトに対して複雑な手動指示を必要とせずに、多様な視覚コンテンツを迅速に生成できるようになります。結局のところ、効果的なプロンプティングは、AI を退屈なデフォルトの源から、実世界のデザイン基準を満たすプロフェッショナルでユニークなグラフィックを作成する強力なツールへと変革します。

2026/09/20 5:00

インターネット検閲を測定し、最大級のオープンデータセットに貢献しましょう。

## 日本語訳: オニー・プローブは、インターネット検閲に関する世界の最大のオープンデータセットの中核を成すものであり、主に異なる国でどの特定のウェブサイトやアプリがブロックされているかを検証することを目的として設計されています。该软件の核心には、WhatsApp、Facebook Messenger、Telegram などの主要プラットフォームが利用者のネットワーク上でアクセス可能であることを確認するテストが含まれています。さらに重要なのは、M-Lab と共同で作成された標準化された測定方法である NDT テストを活用して、一般インターネットの速度と安定性を評価することです。このツールは Linux および macOS で動作し、個人の利用者がデジタル自由の解決策(例えば回避アプリ)が実際にはローカルの制限に対して機能しているかどうかを検証する能力を付与します。個人の検証を超えて、オニー・プローブ は研究者や組織に、世界の検閲トレンドを追跡するための不可欠なデータを提供します。M-Lab と協力することで、オープンソースコミュニティ全体で一貫性のある信頼できるパフォーマンス指標が確保されています。