エンジン

テラバイト規模の生物学データを照会するために

BioQは、57.4億件のメタゲノムタンパク質と1.49億件のUniProtレコードを、データベースに取り込まずにそのまま検索して回答します。それを支える技術を、実測した数値とともに紹介します。

5.74BIDで直接取得できるメタゲノムタンパク質
107 GB1.15 TBの元データの前段に置いたインデックス
1.5M×「Pfamドメインなし」の判定を高速化:35.6分→1.4 ms
230 q/s64ユーザー同時接続時、中央値165 ms

多くのツールは登録されたものを調べます。BioQは条件を満たすものを探します。

ポータルやBLAST型のツールが答えるのは「Xを見せて」と「Xに似たものは?」です。発見のための問いはデータセットをまたぐ条件なので、エンジンがレイヤー同士を結合して答えます。

照会

UniProt P04637を表示

自分の配列に似た配列

土壌から採取されたタンパク質

条件

タンパク質Aを含み、タンパク質Bを含まないアセンブリ

既知のドメインを持たない、土壌の大型タンパク質ファミリー

このIDを収録するデータベースと、そもそも調べていないデータベースをすべて

自分でやると、どれだけかかるか

実際の質問6つを、両方の方法で計測しました。ダウンロード時間は公開アーカイブから当社が実測した転送速度に基づくもので、お使いの回線によって異なる場合があります。

57.4億件のメタゲノムタンパク質から、1件をIDで取得
自力の場合≈3 h

1.11 TBをダウンロードし、未ソートの行グループ46,303個を走査します。

BioQ0.17 s

リクエスト1回。クラスター代表配列は0.17秒、その他のメンバーは初回最大14.5秒。

64K×
このタンパク質が持つPfamドメインは? それとも1つもない?
自力の場合≈7.5 h

117.6 GBをダウンロードし、66 GBの順方向インデックスを構築します(74分)。

BioQ40 ms

リクエスト1回、インターネット経由で約40 ms。

678K×
タンパク質Aがあり、タンパク質Bがないアセンブリ
自力の場合≈2.4 h

シークできないgzip 26.1 GBをダウンロードし、質問のたびに112 GBを展開します。

BioQ≤1.5 s

1回のリクエストで読むのは5 MBのブロック1つだけ。

6K×
UniProt TrEMBLレコード1件の配列
自力の場合≈2.3 h

40.6 GBをダウンロードし、そのレコードより前をすべて展開します。

BioQ76 s

その深さでは初回76秒。2回目以降はすべてキャッシュから返します。

110×
544,891件のRefSeq配列で、ある座標の塩基を取得
自力の場合≈1 h

11.9 GBをダウンロードし、BGZFとFASTAのインデックスを構築します(19分)。

BioQ0.07 s

リクエスト1回。エンジン内部では1.7 ms。

51K×
この識別子を持つデータベースは? そもそも調べていないのは?
自力の場合≈3.3 h

≈1.2 TBのアーカイブを取得し、1つずつ確認します。

BioQ0.12–0.48 s

1回のリクエストで9つのレイヤーに同時に問い合わせます。

25K×

棒グラフは1ミリ秒から10時間までの対数目盛です。

あなたと1.15 TBの間にある5つの層

あなたの作業環境

どこでも同じ答え
Web appREST APIResearch agentMCP · Claude · ChatGPT

ゲートウェイ

誰が、どれだけ質問できるか
Google · email sign-inAPI keysDaily quotasParameter validationResponse scrubbing

エンジン

22レイヤー中20が稼働中
/whereis/search/lookup/domains/cooccur/depmap/affinity/interaction/dna+12

独自に構築したインデックス

≈107 GB、元データと照合済み
parquet footer indexseekable C2 storeBGZF + .gzi/.fai32 MB co-occurrence blocksTrEMBL offset indexPfam forward + invertedMMseqs2 k-mer index

公開データソース

丸ごとコピーせず、その場で読む
UniProtMGnifyPfamPDBAlphaFold DBChEMBLDrugCentralGtoPdbClinVarSTRINGBioGRIDDepMapRefSeqGRCh38GRCm39

速さを生んだ6つのインデックス設計

ファイル自身のフッターがインデックス

1.11 TBのparquetは、46,303個すべての行グループについて最小IDと最大IDをすでに保持しています。827 MBのフッターが2 MBのインデックスになります。

改善前1.11 TB
改善後25.5 MB

多数の同時読み出しに向けたレイアウト

1.287億件の代表配列をシーク可能なストアに書き直し、1回の照会で転送する量を最大242 MBから46 KBにしました。

改善前42.9 s
改善後168 ms

gzipの中をランダムアクセス

通常のgzipは先頭から展開しなければなりません。ブロックインデックス付きのBGZFに書き直せば、どの座標も1回のシークで読めます。

改善前1.40 s
改善後1.7 ms

1つの質問に1ブロック

シークできなかった26 GBのgzipを、5,773個の独立したブロックに分けました。失われたレコードは0件、インデックスは404 KBです。

改善前715 ms
改善後13.2 ms

双方向を、ぎっしり詰めて

46.2億ペアにわたるPfamのタンパク質→ドメイン、ドメイン→タンパク質の両インデックスを、66 GBから18 GBに詰め直しました。

改善前35.6 min
改善後1.4 ms

データと同時に書くインデックス

後付けの疎インデックスは1時間以上かかりましたが、ビルド中に書けば追加コストはかかりません。102,074個の小さなファイルを4つにまとめました。

改善前6,829 ms
改善後374 ms

記憶する相同性検索

事前に構築したk-merインデックスでMMseqs2を実行します。結果はすべて、配列・パラメータ・データベースバージョンのフィンガープリントをキーにキャッシュされるため、同じ検索は即座に返り、いつ計算された結果かも示します。

8.8–10 s

インターネット経由の初回検索

0.04 s

同じ検索の2回目以降

陽性対照

QueryE-valueIdentity
HIV reverse transcriptase1.3×10⁻¹³36.7%
Human hemoglobin α1.1×10⁻¹¹99.0%
E. coli β-lactamase2.6×10⁻³³50.0%

インデックスを慎重に作る理由

k-merインデックスのサイズは、元のデータベースの20–46倍になります。Swiss-Prot(575,748配列)は稼働中で、より大規模な配列データベースはインデックス作成中です。

DB1.59 GB
Index73 GB

1つの質問、すべてのレイヤー、ありのままの答え

/whereisは9つのレイヤーにそれぞれ期限を設けて並列に問い合わせ、各レイヤーが実際に何をしたかをそのまま報告します。インターネット経由で0.12–0.48秒で応答します。

GET /api/v1/whereis?id=MGYP000000149140found
MGnify C2検出1.05 ms
MGnify proteins検出2,017 ms
MGnify assemblies検出103 ms
Pfam domains検索済み・なし0.13 ms
UniProt TrEMBL対象外
Pfam domain index対象外
Structures対象外
Binding対象外
ClinVar対象外

主張には独立したエビデンスが必要

関連を主張するには、別々のサンプリングに由来するアセンブリが少なくとも3つ必要です。すべての回答に判定が付きます。

testable · ≥3weak · <3no claim · 1 run

母集団なしに比率は出さない

同じ重なりでも、母集団次第で1.000にも212.5にもなります。エンジンは母集団を推測しません。

推測1.000
明示212.5

負荷がかかるほど速く

シーク可能なストアでは、同時実行数が増えるほど中央値レイテンシが改善し、失敗は0件でした。

1秒あたりのクエリ数

1×5.4 q/s
32×138.9 q/s
64×230.2 q/s

中央値レイテンシ

1×179 ms
32×168 ms
64×165 ms

提供開始前に、エンジンは実際の質問5つに正しく答えなければなりません

  1. KRAS:最も依存性の高い系統は膵臓
  2. TP53–MDM2の相互作用スコアが700以上
  3. RefSeqからSARS-CoV-2のスパイク遺伝子の塩基を取得できる
  4. ヘモグロビンの検索でそのホモログが見つかる
  5. 陰性対照で不在を証明できる

見つけ、測定し、設計で排除した「静かな誤答」

395,688

ウィンドウを区切った検索が395,688件の配列を見落とし、「見つかりません」と答えていました。

現在はすべての行グループを確認します。回帰テストは4/4で合格。

89.2%

TrEMBLの19シャードのうち2つしか読み込まれていない状態では、レコードの89.2%が存在しないように見えるところでした。

カバレッジを報告し、不在を前提にしません。

+1

オフバイワンエラーにより、すべてのタンパク質のドメインが1行ずつずれていたのに、合計値はすべて一致していました。

ビルド側が自己チェックし、読み込み側がロード時に長さを検証します。

∅ = ∅

検証器が、両側とも空のときに「一致」と記録していました。

検証器は、何かを見つけてからでなければ比較しません。

212.5×

実際には212.5倍の濃縮が、1.000と報告されていました。

母集団が明示されない限り、比率は出しません。

7.8×

AlphaFoldの「残基数」は実は原子数で、7.8倍大きすぎました。

Cαレコードから再構築し、対照4/4に合格。

すべてのレイヤーが守る5つのルール

  1. すべての回答に出所を付ける。
  2. インデックスは元データと照合する。自分自身とは照合しない。
  3. 一部しか読み込めていなければ、理由を添えて503を返す。黙って「なし」とは答えない。
  4. ビルドは合計値をアサートする。
  5. 陽性対照なしに完了とはしない。

テストスイートは、意図的に壊した契約13件をすべて検出します。

試験運用中

次の段階:タンパク質言語モデルによる意味検索

Swiss-Protの全575,748タンパク質をESM-2 (650M)で埋め込み表現に変換し(GPU 1枚で47.6分)、遠縁ホモログでMMseqs2と比較しました。

MMseqs2でアラインメントできないペア

MMseqs240.7%
ESM-246.9%

MMseqs2でアラインメントできるペア

MMseqs286.8%
ESM-278.2%

両者は互いを補うため、まずMMseqs2で検索し、ESM-2で再ランキングする構成にします。まだ提供していません。

あなたの質問にどう答えるか、確かめてください

無料アカウントでもエンジンのすべてを使えます。全レイヤー、エージェント、APIまで。

無料で始めるAPI