インフラ・DevOps
JSONカラムのシュレッディングによりLogfireのクエリが最大1000倍高速化
Shredding JSON columns gave Logfire up to 1000x faster queries (pydantic.dev)
要約
Logfireは、半構造化された属性データを高速にクエリするための「ダイナミックシュレッディング」という新技術を導入しました。これにより、一部のクエリが最大1000倍高速化され、タイムアウトしていたクエリも1秒未満で完了するようになります。この最適化は、JSON形式で保存されていた属性データを、クエリ時に動的に分解・最適化することで実現されます。
全文翻訳
前書き
Logfireでのデータクエリは、劇的に高速化されようとしています。場合によっては1,000倍以上の高速化です。以前は30秒でタイムアウトしていたクエリが、今では1秒未満で完了します。「顧客属性のクエリ時間が大幅に短縮されました!ほぼ瞬時に感じます」と、早期アクセス顧客は述べています。この技術ブログ記事では、半構造化された属性データのクエリのための最適化であるダイナミックシュレッディングを通じて、これをどのように達成したかを詳述します。この機能は2026年2月に全顧客へのロールアウトを開始します。
Logfireのデータモデル
Logfireが取り込むOpenTelemetryデータは、半構造化データです。これには以下のようなものが含まれます。
固定スキーマフィールド(タイムスタンプ、スパン名など)
半構造化属性(HTTPステータスコード、ユーザーID、リージョンなど)
半構造化データは、属性(スパンごとのキーと値のペア)またはリソース属性(Logfireではotel_resource_attributes; これらはリソースごとのキーと値のペアで、リソースとはサービス/k8sポッドなどの、アプリケーションまたはサービスのインスタンスを指します)を介して送信されます。
以下のようなコードを書くと:
app = FastAPI()
@app.get('/user/{user_id}')
async def handle_request(user_id: str) -> dict[str, str]:
with logfire.span(f'handle_request for user {user_id}', user_id=user_id):
return {
return {