Engine

Gebaut, um Biologie im Terabyte-Maßstab abzufragen

BioQ beantwortet Fragen über 5,74 Milliarden metagenomische Proteine und 149 Millionen UniProt-Datensätze, ohne sie in eine Datenbank zu laden. Hier sind die Techniken dahinter, mit den Zahlen, die wir gemessen haben.

5.74Bmetagenomische Proteine, abrufbar per ID
107 GBIndizes für 1,15 TB Quelldaten
1.5M×schnellere „keine Pfam-Domäne“-Antworten: von 35,6 min auf 1,4 ms
230 q/sbei 64 gleichzeitigen Nutzern, Median 165 ms

Die meisten Tools schlagen nach, was registriert ist. BioQ fragt nach dem, was eine Bedingung erfüllt.

Portale und BLAST-artige Tools beantworten „zeig mir X“ und „was ähnelt X“. Forschungsfragen sind Bedingungen über mehrere Datenbestände hinweg, deshalb verknüpft die Engine ihre Ebenen für Sie.

Nachschlagen

Zeig mir UniProt P04637

Sequenzen, die meiner ähneln

Proteine aus Bodenproben

Bedingung

Assemblies mit Protein A, aber ohne Protein B

Große Proteinfamilien aus dem Boden ohne bekannte Domäne

Jede Datenbank, die diese ID kennt, und jede, die nie nachgesehen hat

Der Aufwand, es selbst zu machen

Sechs echte Fragen, auf beiden Wegen gemessen. Die Downloadzeiten beruhen auf Übertragungsraten, die wir bei den öffentlichen Archiven gemessen haben; Ihre Verbindung kann abweichen.

Ein metagenomisches Protein per ID abrufen, aus 5,74 Milliarden
Selbst gemacht≈3 h

1.11 TB herunterladen, dann 46.303 unsortierte Row Groups durchsuchen.

BioQ0.17 s

Eine Anfrage. 0,17 s für einen Cluster-Repräsentanten; bis zu 14,5 s bei kaltem Cache für andere Mitglieder.

64K×
Welche Pfam-Domänen trägt dieses Protein, oder gar keine?
Selbst gemacht≈7.5 h

117.6 GB herunterladen, dann einen 66-GB-Vorwärtsindex bauen (74 min).

BioQ40 ms

Eine Anfrage, etwa 40 ms über das Internet.

678K×
Assemblies mit Protein A, in denen Protein B fehlt
Selbst gemacht≈2.4 h

26.1 GB gzip ohne Direktzugriff herunterladen, dann für jede Frage 112 GB entpacken.

BioQ≤1.5 s

Eine Anfrage liest einen einzigen 5-MB-Block.

6K×
Die Sequenz eines UniProt-TrEMBL-Datensatzes
Selbst gemacht≈2.3 h

40.6 GB herunterladen, dann alles vor dem Datensatz entpacken.

BioQ76 s

76 s beim ersten Mal in dieser Tiefe; jede Wiederholung kommt aus dem Cache.

110×
Basen an einer Koordinate, in 544.891 RefSeq-Sequenzen
Selbst gemacht≈1 h

11.9 GB herunterladen, dann BGZF- und FASTA-Indizes bauen (19 min).

BioQ0.07 s

Eine Anfrage; 1,7 ms in der Engine.

51K×
Welche Datenbanken kennen diese ID, und welche haben nie nachgesehen?
Selbst gemacht≈3.3 h

≈1.2 TB an Archiven laden, um sie einzeln zu prüfen.

BioQ0.12–0.48 s

Eine Anfrage fragt neun Ebenen gleichzeitig ab.

25K×

Die Balken nutzen eine logarithmische Skala von 1 Millisekunde bis 10 Stunden.

Fünf Ebenen zwischen Ihnen und 1,15 TB

Wo Sie arbeiten

Überall dieselben Antworten
Web appREST APIResearch agentMCP · Claude · ChatGPT

Gateway

Wer fragen darf und wie viel
Google · email sign-inAPI keysDaily quotasParameter validationResponse scrubbing

Engine

20 von 22 Ebenen live
/whereis/search/lookup/domains/cooccur/depmap/affinity/interaction/dna+12

Eigene Indizes

≈107 GB, gegen die Quelle geprüft
parquet footer indexseekable C2 storeBGZF + .gzi/.fai32 MB co-occurrence blocksTrEMBL offset indexPfam forward + invertedMMseqs2 k-mer index

Öffentliche Quellen

Vor Ort gelesen, nie komplett kopiert
UniProtMGnifyPfamPDBAlphaFold DBChEMBLDrugCentralGtoPdbClinVarSTRINGBioGRIDDepMapRefSeqGRCh38GRCm39

Sechs Indexierungsentscheidungen, die es schnell machen

Der Footer der Datei ist der Index

1,11 TB parquet speichern bereits minimale und maximale IDs für alle 46.303 Row Groups. Aus dem 827-MB-Footer wird ein 2-MB-Index.

Vorher1.11 TB
Nachher25.5 MB

Ein Layout für viele Leser

128,7 Mio. repräsentative Sequenzen, neu geschrieben in einen Speicher mit Direktzugriff: Jeder Abruf bewegt 46 KB statt bis zu 242 MB.

Vorher42.9 s
Nachher168 ms

Direktzugriff in gzip

Normales gzip muss von Anfang an entpackt werden. Als BGZF mit Blockindex neu geschrieben, liegt jede Koordinate nur einen Seek entfernt.

Vorher1.40 s
Nachher1.7 ms

Ein Block pro Frage

Ein 26-GB-gzip ohne Direktzugriff wurde zu 5.773 unabhängigen Blöcken, ohne einen einzigen verlorenen Datensatz und mit einem 404-KB-Index.

Vorher715 ms
Nachher13.2 ms

Beide Richtungen, dicht gepackt

Pfam-Indizes Protein→Domäne und Domäne→Protein über 4,62 Milliarden Paare, von 66 GB auf 18 GB neu gepackt.

Vorher35.6 min
Nachher1.4 ms

Indizes zusammen mit den Daten geschrieben

Ein nachträglich angebauter Sparse-Index brauchte über eine Stunde; während des Builds geschrieben, kostet er nichts. 102.074 kleine Dateien in vier gepackt.

Vorher6,829 ms
Nachher374 ms

Homologiesuche mit Gedächtnis

MMseqs2 mit vorab gebautem k-mer-Index. Jedes Ergebnis wird unter einem Fingerabdruck aus Sequenz, Parametern und Datenbankversion zwischengespeichert, sodass eine Wiederholung sofort zurückkommt und trotzdem angibt, wann sie berechnet wurde.

8.8–10 s

erste Suche über das Internet

0.04 s

dieselbe Suche erneut

Positivkontrollen

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

Warum wir gezielt indexieren

Ein k-mer-Index ist 20–46× so groß wie seine Datenbank. Swiss-Prot (575.748 Sequenzen) ist live; größere Korpora werden gerade indexiert.

DB1.59 GB
Index73 GB

Eine Frage, alle Ebenen, ehrliche Antworten

/whereis fragt neun Ebenen parallel ab, jede mit eigenem Zeitlimit, und meldet, was jede tatsächlich getan hat. Über das Internet antwortet der Endpunkt in 0,12–0,48 s.

GET /api/v1/whereis?id=MGYP000000149140found
MGnify C2Gefunden1.05 ms
MGnify proteinsGefunden2,017 ms
MGnify assembliesGefunden103 ms
Pfam domainsDurchsucht, nicht vorhanden0.13 ms
UniProt TrEMBLNicht anwendbar
Pfam domain indexNicht anwendbar
StructuresNicht anwendbar
BindingNicht anwendbar
ClinVarNicht anwendbar

Aussagen brauchen unabhängige Belege

Eine Assoziation braucht mindestens drei Assemblies aus verschiedenen Probenahmen. Jede Antwort trägt ihre Einstufung.

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

Kein Verhältnis ohne Grundgesamtheit

Dieselbe Überlappung ergibt 1,000 oder 212,5, je nach Grundgesamtheit. Die Engine weigert sich, sie zu raten.

Geraten1.000
Angegeben212.5

Schneller unter Last

Auf dem Speicher mit Direktzugriff verbessert sich die Median-Latenz mit steigender Parallelität, ohne einen einzigen Fehler.

Abfragen pro Sekunde

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

Median-Latenz

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

Bevor die Engine Anfragen bedient, muss sie fünf echte Fragen beantworten

  1. KRAS: am stärksten abhängige Lineage ist Pankreas
  2. Die Interaktion TP53–MDM2 erreicht einen Score von mindestens 700
  3. Spike-Basen von SARS-CoV-2 kommen aus RefSeq zurück
  4. Eine Hämoglobin-Suche findet ihr Homolog
  5. Eine Negativkontrolle belegt die Abwesenheit

Stille Falschantworten: gefunden, gemessen, konstruktiv ausgeschlossen

395,688

Eine fensterbasierte Suche übersah 395.688 Sequenzen und antwortete „nicht gefunden“.

Jetzt wird jede Row Group geprüft; der Regressionstest besteht 4 von 4.

89.2%

Mit 2 von 19 geladenen TrEMBL-Shards wären 89,2 % der Datensätze scheinbar nicht vorhanden gewesen.

Die Abdeckung wird ausgewiesen; Abwesenheit wird nie angenommen.

+1

Ein Off-by-one-Fehler verschob die Domänen jedes Proteins um eine Zeile, während alle Summen stimmten.

Builder prüfen sich selbst; Leser verifizieren beim Laden die Längen.

∅ = ∅

Ein Prüfer protokollierte „Übereinstimmung“, obwohl beide Seiten leer waren.

Prüfer müssen erst etwas finden, bevor sie vergleichen.

212.5×

Eine echte Anreicherung von 212,5× wurde als 1,000 gemeldet.

Kein Verhältnis, solange die Grundgesamtheit nicht angegeben ist.

7.8×

Die „Reste“ von AlphaFold waren Atomzahlen, 7,8× zu hoch.

Aus Cα-Einträgen neu aufgebaut; 4 von 4 Kontrollen bestanden.

Fünf Regeln für jede Ebene

  1. Herkunftsangabe bei jeder Antwort.
  2. Ein Index wird gegen seine Quelle geprüft, nie gegen sich selbst.
  3. Ist nur ein Teil geladen, kommt 503 mit Grund, nie ein stilles „keine“.
  4. Builds prüfen ihre Summen.
  5. Ohne Positivkontrolle nicht fertig.

Die Testsuite erkennt 13 von 13 absichtlich verletzten Verträgen.

Pilotphase

Als Nächstes: semantische Suche mit Protein-Sprachmodellen

Wir haben alle 575.748 Swiss-Prot-Proteine in 47,6 Minuten auf einer GPU mit ESM-2 (650M) eingebettet und bei entfernten Homologen mit MMseqs2 verglichen.

Paare, die MMseqs2 nicht alignieren kann

MMseqs240.7%
ESM-246.9%

Paare, die MMseqs2 alignieren kann

MMseqs286.8%
ESM-278.2%

Beide ergänzen sich, daher lautet der Plan: zuerst MMseqs2, dann Re-Ranking mit ESM-2. Noch nicht live.

Sehen Sie, wie BioQ Ihre Frage beantwortet

Kostenlose Konten erhalten die volle Engine: alle Ebenen, den Agenten und die API.

Kostenlos startenAPI