Moteur

Conçu pour interroger la biologie à l’échelle du téraoctet

BioQ interroge 5,74 milliards de protéines métagénomiques et 149 millions d’enregistrements UniProt sans les charger dans une base de données. Voici les techniques qui le permettent, avec les chiffres que nous avons mesurés.

5.74Bprotéines métagénomiques accessibles par ID
107 GBd’index pour 1,15 TB de données sources
1.5M×plus rapide pour répondre « aucun domaine Pfam » : de 35,6 min à 1,4 ms
230 q/savec 64 utilisateurs simultanés, médiane de 165 ms

La plupart des outils retrouvent ce qui est enregistré. BioQ cherche ce qui remplit une condition.

Les portails et les outils de type BLAST répondent à « montre-moi X » et « qu’est-ce qui ressemble à X ». Les questions de découverte sont des conditions qui traversent plusieurs jeux de données : le moteur croise ses couches pour vous.

Consultation

Montre-moi UniProt P04637

Séquences proches de la mienne

Protéines échantillonnées dans le sol

Condition

Assemblages qui contiennent la protéine A mais pas la B

Grandes familles de protéines du sol sans domaine connu

Toutes les bases qui connaissent cet ID, et toutes celles qui ne l’ont jamais cherché

Ce qu’il faut pour le faire soi-même

Six vraies questions, chronométrées dans les deux cas. Les temps de téléchargement reposent sur les débits que nous avons mesurés depuis les archives publiques ; votre connexion peut différer.

Récupérer une protéine métagénomique par ID, parmi 5,74 milliards
Par vous-même≈3 h

Télécharger 1.11 TB, puis parcourir 46 303 row groups non triés.

BioQ0.17 s

Une seule requête. 0,17 s pour un représentant de cluster ; jusqu’à 14,5 s à froid pour les autres membres.

64K×
Quels domaines Pfam porte cette protéine, s’il y en a ?
Par vous-même≈7.5 h

Télécharger 117.6 GB, puis construire un index direct de 66 GB (74 min).

BioQ40 ms

Une seule requête, environ 40 ms via Internet.

678K×
Assemblages contenant la protéine A sans la protéine B
Par vous-même≈2.4 h

Télécharger 26.1 GB de gzip sans accès direct, puis décompresser 112 GB à chaque question.

BioQ≤1.5 s

Une requête lit un seul bloc de 5 MB.

6K×
La séquence d’un enregistrement UniProt TrEMBL
Par vous-même≈2.3 h

Télécharger 40.6 GB, puis décompresser tout ce qui précède l’enregistrement.

BioQ76 s

76 s la première fois à cette profondeur ; chaque répétition est servie depuis le cache.

110×
Les bases à une coordonnée, parmi 544 891 séquences RefSeq
Par vous-même≈1 h

Télécharger 11.9 GB, puis construire les index BGZF et FASTA (19 min).

BioQ0.07 s

Une seule requête ; 1,7 ms dans le moteur.

51K×
Quelles bases connaissent cet identifiant, et lesquelles ne l’ont jamais cherché ?
Par vous-même≈3.3 h

Rapatrier ≈1.2 TB d’archives pour les vérifier une à une.

BioQ0.12–0.48 s

Une requête interroge neuf couches à la fois.

25K×

Les barres suivent une échelle logarithmique de 1 milliseconde à 10 heures.

Cinq couches entre vous et 1,15 TB

Là où vous travaillez

Les mêmes réponses partout
Web appREST APIResearch agentMCP · Claude · ChatGPT

Passerelle

Qui peut interroger, et combien
Google · email sign-inAPI keysDaily quotasParameter validationResponse scrubbing

Moteur

20 couches sur 22 en ligne
/whereis/search/lookup/domains/cooccur/depmap/affinity/interaction/dna+12

Nos propres index

≈107 GB, vérifiés par rapport à la source
parquet footer indexseekable C2 storeBGZF + .gzi/.fai32 MB co-occurrence blocksTrEMBL offset indexPfam forward + invertedMMseqs2 k-mer index

Sources publiques

Lues sur place, jamais copiées en entier
UniProtMGnifyPfamPDBAlphaFold DBChEMBLDrugCentralGtoPdbClinVarSTRINGBioGRIDDepMapRefSeqGRCh38GRCm39

Six choix d’indexation qui le rendent rapide

Le footer du fichier fait office d’index

1,11 TB de parquet stockent déjà les ID min et max des 46 303 row groups. Ce footer de 827 MB devient un index de 2 MB.

Avant1.11 TB
Après25.5 MB

Une organisation pensée pour de nombreux lecteurs

128,7 millions de séquences représentatives réécrites dans un stockage à accès direct : chaque consultation transfère 46 KB, contre jusqu’à 242 MB.

Avant42.9 s
Après168 ms

Accès direct dans un fichier gzip

Un gzip classique doit être décompressé depuis le début. Réécrit en BGZF avec un index de blocs, chaque coordonnée s’atteint en un seul accès.

Avant1.40 s
Après1.7 ms

Un bloc par question

Un gzip de 26 GB sans accès direct est devenu 5 773 blocs indépendants, sans aucun enregistrement perdu et avec un index de 404 KB.

Avant715 ms
Après13.2 ms

Dans les deux sens, compactés au plus juste

Index Pfam protéine→domaine et domaine→protéine sur 4,62 milliards de paires, recompactés de 66 GB à 18 GB.

Avant35.6 min
Après1.4 ms

Des index écrits avec les données

Un index épars ajouté après coup a pris plus d’une heure ; écrit pendant la construction, il ne coûte rien. 102 074 petits fichiers regroupés en quatre.

Avant6,829 ms
Après374 ms

Une recherche d’homologie qui se souvient

MMseqs2 avec un index de k-mers précalculé. Chaque résultat est mis en cache sous une empreinte de la séquence, des paramètres et de la version de la base, si bien qu’une recherche répétée revient instantanément et indique toujours quand elle a été calculée.

8.8–10 s

première recherche via Internet

0.04 s

la même recherche, relancée

Témoins positifs

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

Pourquoi nous indexons avec discernement

Un index de k-mers pèse 20–46× la taille de sa base. Swiss-Prot (575 748 séquences) est en ligne ; des corpus plus grands sont en cours d’indexation.

DB1.59 GB
Index73 GB

Une question, toutes les couches, des réponses honnêtes

/whereis interroge neuf couches en parallèle, chacune avec son propre délai maximal, et rapporte ce que chacune a réellement fait. Via Internet, il répond en 0,12–0,48 s.

GET /api/v1/whereis?id=MGYP000000149140found
MGnify C2Trouvé1.05 ms
MGnify proteinsTrouvé2,017 ms
MGnify assembliesTrouvé103 ms
Pfam domainsRecherché, absent0.13 ms
UniProt TrEMBLNon applicable
Pfam domain indexNon applicable
StructuresNon applicable
BindingNon applicable
ClinVarNon applicable

Une affirmation exige des preuves indépendantes

Une association exige au moins trois assemblages issus de prélèvements différents. Chaque réponse porte son verdict.

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

Pas de ratio sans univers

Le même recouvrement vaut 1,000 ou 212,5 selon l’univers. Le moteur refuse de le deviner.

Deviné1.000
Déclaré212.5

Plus rapide sous charge

Sur le stockage à accès direct, la latence médiane s’améliore à mesure que la concurrence augmente, sans aucun échec.

Requêtes par seconde

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

Latence médiane

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

Avant toute mise en service, le moteur doit répondre à cinq vraies questions

  1. KRAS : le lignage le plus dépendant est le pancréas
  2. L’interaction TP53–MDM2 obtient un score d’au moins 700
  3. Les bases du gène Spike du SARS-CoV-2 reviennent de RefSeq
  4. Une recherche d’hémoglobine trouve son homologue
  5. Un témoin négatif prouve l’absence

Erreurs silencieuses trouvées, mesurées et rendues impossibles

395,688

Une recherche par fenêtre a manqué 395 688 séquences et a répondu « non trouvé ».

Tous les row groups sont désormais vérifiés ; le test de non-régression passe 4 sur 4.

89.2%

Avec 2 shards TrEMBL sur 19 chargés, 89,2 % des enregistrements auraient semblé absents.

La couverture est indiquée ; l’absence n’est jamais présumée.

+1

Une erreur off-by-one a décalé d’une ligne les domaines de chaque protéine, alors que tous les totaux concordaient.

Chaque build s’autovérifie ; les lecteurs contrôlent les longueurs au chargement.

∅ = ∅

Un vérificateur a enregistré « concordance » alors que les deux côtés étaient vides.

Un vérificateur doit trouver quelque chose avant de comparer.

212.5×

Un enrichissement réel de 212,5× a été rapporté comme 1,000.

Aucun ratio tant que l’univers n’est pas déclaré.

7.8×

Les « résidus » d’AlphaFold étaient des nombres d’atomes, 7,8× trop élevés.

Reconstruit à partir des enregistrements Cα ; 4 témoins sur 4 passent.

Cinq règles que suit chaque couche

  1. Une provenance pour chaque réponse.
  2. Un index est vérifié par rapport à sa source, jamais par rapport à lui-même.
  3. Un chargement partiel répond 503 avec un motif, jamais un « aucun » silencieux.
  4. Chaque build vérifie ses totaux.
  5. Rien n’est terminé sans témoin positif.

La suite de tests détecte 13 contrats sur 13 délibérément rompus.

Phase pilote

Prochaine étape : la recherche sémantique par modèles de langage protéique

Nous avons calculé les embeddings des 575 748 protéines de Swiss-Prot avec ESM-2 (650M) en 47,6 minutes sur un seul GPU, puis comparé le résultat à MMseqs2 sur des homologues distants.

Paires que MMseqs2 ne peut pas aligner

MMseqs240.7%
ESM-246.9%

Paires que MMseqs2 peut aligner

MMseqs286.8%
ESM-278.2%

Les deux sont complémentaires : le plan est MMseqs2 d’abord, puis un reclassement par ESM-2. Pas encore en ligne.

Voyez-le répondre à votre question

Les comptes gratuits accèdent au moteur complet : toutes les couches, l’agent et l’API.

Commencer gratuitementAPI