Cambridge Cheminformatics Network Meeting, Cambridge, 27th May 2015
Substructure Searching
Face-off
John May and Roger Sayle
NextMove Software
Cambridge, UK
Molecular Identity
is foo the same as bar?
Substructure
is foo part of bar?
Chemical Similarity
how much is foo like bar?
“A grand unified theory: the three fundamental forces of Cheminformatics” - R Sayle et al.
SmallWorld: Efficient Maximum Common Subgraph Searching of Large Chemical Databases. ACS.
Aug 2012.
SUBSTRUCTURE SEARCH
Some of the many uses:
• Fragment-based lead discovery
• Murcko Scaffolds
• Matched pairs
• Functional groups, atom types
• Similarity Keys (MACCS/CACTVS)
• Toxicology - Tim Allen’s MIE models
Substructure searches are infrequent*…
…they can be slow - correlation/causation?
*~10x more unique similarity queries in Structure Query Collection
ANATOMY OF A SUBSEARCH
0008800040008020 CCO
1000000050000028 NCC
5008a04040008020 CCCCO
0000000040000024 CCl
0000080000040020 CBr
0048002000008020 C(=O)O
CCO query
0008000000008020 query-fp
1. Generate
fingerprint
0008800040008020 CCO
1000000050000028 NCC
5008a04040008020 CCCCO
0000000040000024 CCl
0000080000040020 CBr
0048002000008020 C(=O)O
2. Fingerprint
Scan
0008800040008020 CCO
1000000050000028 NCC
5008a04040008020 CCCCO
0000000040000024 CCl
0000080000040020 CBr
0048002000008020 C(=O)O
3. Atom-match
Variables
• fp type
• fp index type
• none
• linear
• sub-linear
• mol format
• line-notation
• binary
• atom-match
• VF2
• Ullmann
• storage
• flatfile
• RDMS
*CBr is actually filtered with this fingerprint but left to show the FP is generally not perfect (precision<1)
WHY CAN IT FEEL SLOW?
Identity and Similarity Search
different queries, similar amount of work
Substructure Search
different queries, potentially huge difference in work
Rough est. for ~10 mil compounds
• Identity, index canonical form – b-tree: ≤ 1 ms
• Similarity, index fingerprint – linear scan: ≤ 100 ms
• Substructure, index fingerprint + structure
• linear FP scan, atom-based match: ≥ 100 ms
• sub-linear FP scan, atom-based match: ≥ 5 ms
STRATEGIES?
Parallelisation
resource contention from multiple users
Limit query count (first 10)
must decide which ones are first
Limit time (60 s in eMolecules/SureChEMBL)
hits depend on hardware/workload
Cache or filter pathological queries
how to predict?
Limit screen count (fastsearch)
may get no hits?
EXISTING BENCHMARKS
Several tools publish isolated performance figures
and should be commended.
“what performance can you expect”
Alas different hardware, queries, and target
dataset limit meaningful conclusions and
comparisons.
Using the same hardware, queries, and target
dataset we present the execution efficiency (how
fast). Retrieval efficiency (hits) will be touched
upon.
OUR BENCHMARK:
COUNT TOTAL
NUMBER OF HITS
TARGET DATABASE
Needed moderate size collection
ChEMBL ~1.5 mil, too easy, fits easily in a memory cache
PubChem Compound ~70 mil, too large for many tools
eMolecules 6,996,230 compounds
performed minimal cleanup
eMol IDs will be made available
QUERIES
Structure Query Collection (SQC)
3,488 BindingDB_substructure queries
3,342 connected, 121 fragments
User generated
Includes pathological queries
Excluded fragments – some consider benzene as bad:
c1ccccc1.c1ccccc1 slow
c1ccccc1.c1ccccc1.c1ccccc1 very slow
c1ccccc1.c1ccccc1.c1ccccc1.c1ccccc1.c1ccccc1 ouch
Andrew Dalke's BitBucket Project - https://bitbucket.org/dalke/sqc
QUERIES
Duplicates due to aromaticity or hydrogens
[H]C1=CN=CN=C1[H] pyrimidine
[H]C1=CN=CN=C1 pyrimidine
C1=CN=CN=C1 pyrimidine
C1=CC=CC=C1 benzene
c1ccccc1 benzene
3,140/3,342 unique - but used the non-unique set:
- Hydrogens change semantics of match
- Queries run unmodified but standardised* to queries-clean
when needed, tools that expect “SMARTS”
*aromatised, suppressed-H, atom-stereo removed
KEY Type Chemistry Storage FORMAT
arthor standalone NextMove Flatfile Serialised
bingo-pgsql cartridge Indigo PostgreSQL Serialised
bingo-orcl cartridge Indigo Oracle Serialised
bingo-nosql standalone Indigo Flatfile Serialised
fastsearch standalone Open Babel Flatfile SMILES1
jcart standalone/cartridge ChemAxon Oracle Serialised
jcart-st (1 thread) standalone/cartridge ChemAxon Oracle Serialised
mychem cartridge Open Babel MySQL
(MariaDB)
Serialised
pgchem cartridge Open Babel PostgreSQL Serialised
orchem cartridge CDK Oracle Serialised2
rdcart cartridge RDKit PostgreSQL Serialised
rdluc standalone RDKit Lucene SMILES
rdsmigrep standalone RDKit SMILES SMILES
tripod-ss standalone ChemAxon Oracle Cache SMILES3
1) FastSearch format depends on input. 2) OrChem serialises as a string rather than binary. 3) Tripod’s
Search Search uses molfiles by default. Underlined: queries-clean used
TOOLS EVALUATED
Name Type Chemistry Storage
Pinpoint Cartridge Dotmatics Oracle
Direct Cartridge BIOVIA/Accelrys/MDL Oracle
Accord Cartridge BIOVIA/Accelrys Oracle
ABCD Cartridge J&J Oracle
DayCart Cartridge Daylight Oracle/Postgres
Torus Cartridge Digital Chem Oracle
OpenEye Cartridge Cartridge OpenEye Oracle
MolCart Cartridge ICM MySQL
MolSQL Cartridge Scilligence SQL Server
Chord Cartridge OpenEye PostgreSQL
OpenChord Cartridge Open Babel / RDKit PostgreSQL
IC Cartridge Cartridge InfoChem Oracle
AUSPYX Cartridge Tripos Oracle
Oracle Cartridge Cartridge PerkinElemer Oracle
MORE CARTRIDGES
Some not externally available (ABCD) or being retired (Accord)
Name Type Chemistry Storage
ChemFP standalone Multiple FPS/BFPS in-memory
Similr standalone ? MongoDB
Data Warrior standalone Acetlion In-memory
Ambit - OpenTox standalone CDK/Ambit MySQL
MolecularLucene standalone CDK Lucene
Wikipedia CSE standalone Acetlion (JS) In-browser-memory
MOLDB6 standalone checkmol/matchmol MySQL
ChemSearch1
SQL SQL Oracle/PostgreSQL
SQLMOL SQL SQL MS SQL
MORE STANDALONES
ChemFP, Similr, MolecularLucene
- currently similarity only
MOLDB6
- index time for eMol est. at 22 days… we started last week
1: Golovin A and Henrick K. Chemical Substructure Search in SQL. JCIM. 2008. 49(1)
CHANGES FROM
“OUT OF THE BOX”
MyChem and RDKit Lucene
- fingerprint screen workaround
- OB FP2 and Avalon FP, no bits ≠ no hits
Tripod Search Server
- Load from SMILES instead of molfile
- Avoid aromaticity recalculation
- Used larger cache size
MEASUREMENT IS NOT PROPHECY1
Large number of variables
Time taken for this benchmark, with these tool versions,
on a machine, with this load. Tools were setup as per
user manuals (shared memory etc).
A “normal” desktop, £££ less than iPhone 6+.
CentOS 7
Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
16 GB RAM
“Trust has no place in science” - NextMove Software will
make inputs available for others to test
1: http://benchmarksgame.alioth.debian.org/
3342 Queries
6996230 TARGETS
≤23,381,400,660
MATCHES LATER
EXCLUDED QueRIES
19 queries skipped in one or more tools
3,323/3,342 that were executed by all
2 Non-terminal hydrogens
C1N[H]OC[H]1
1 Invalid stereochemistry
CC[C@@H]
10 Atom classes
C1C[N:1]CNC1
6 Bond stereo not-implemented (should have cleaned)
N
1
HN
H2
C
NH
H
O
H2C
H
H3
C CH
RETRIEVAL DIFFERENCES
“We demand rigidly defined areas of doubt and
uncertainty!”
CH3
CH3
o-xylene
RETRIEVAL DIFFERENCES
“We demand rigidly defined areas of doubt and
uncertainty!”
Somewhere between 440,901 and 529,386
rdcart 500,126
rdluc 500,053
bingo (pgsql/orcl) 500,865
bingo (nosql) 498,427
tripod-ss 509,655
jcart 444,541
fastsearch 440,901
orchem 529,386
arthor 444,553
CH3
CH3
o-xylene
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
90%
99%
1s 10s 30s1m 5m
many queries,
running quick
<— all start here
some queries,
running slow
Where the line drops from
3323, that is the fastest
query. Where it falls bellow 0, that
was the slowest.
Area under curve ~ total elapsed
time for all queries. However
log,log plot so can be deceptive.
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
rdcart
rdsmigrep
90%
99%
1s 10s 30s1m 5m
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
rdcart
rdsmigrep
90%
99%
1s 10s 30s1m 5m
5h9m
9d15h0m
90% < 10 s
75% < 1 s
No FP screen, all queries
take around 5 mins for rdsmigrep
(no sanitise). rdcart slowest query is
nearly as slow.
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
rdcart
rdluc
rdsmigrep
90%
99%
1s 10s 30s1m 5m
5h9m
9d15h0m
1d18h11m FP scan degraded
perfomance for
these queries
rdcart worse case
is only better due to mol
serialisation. rdluc / rdsmigrep
both use SMILES.
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
bingo-orcl
bingo-pgsql
90%
99%
1s 10s 30s1m 5m
1h54m
2h6m
Bingo Oracle and PostgreSQL
perform similarly. Small
difference is likely measurement
inaccuracies.
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
bingo-orcl
bingo-nosql
bingo-pgsql
90%
99%
1s 10s 30s1m 5m
59m47s
1h54m
2h6m
The recent “NoSQL”
(flatfile) version is about twice
as fast – DB overhead?
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
jcart-st
jcart
90%
99%
1s 10s 30s1m 5m
2h41m
1h2m
jcart was the fastest
cartridge. By default it
uses all available processors…
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
jcart-st
jcart
bingo-orcl
bingo-pgsql
90%
99%
1s 10s 30s1m 5m
2h41m
1h2m
1h54m
2h6m
…limiting to a single thread (st)
we observed a similar performance
to the Bingo cartridges.
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
fastsearch
mychem
pgchem
90%
99%
1s 10s 30s1m 5m
13h54m
1d1h52m
1d15h22m
pgchem and mychem have a
different shape curve. This
turns out to be hydrogen
sprouting for some queries.
fastsearch would also
show this but got queries-clean
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
fastsearch
mychem
pgchem
90%
99%
1s 10s 30s1m 5m
13h54m
1d1h52m
1d15h22m
linear scan diff
Both mychem and fastsearch do
a linear FP scan. mychem does this
via a SQL statement, fastsearch does
it sequentially from the file.
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
fastsearch
mychem
pgchem
rdcart
90%
99%
1s 10s 30s1m 5m
5h9m
13h54m
pghcem and rdcart both use
a GIST, r-tree based index. This
provides sub-linear screening for
some queries.
The curves are similar and we
would therefore expect
pgchem to also be ~ 6 hrs with the
hydrogen issues resolved.
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
tripod-ss
fastsearch
mychem
pgchem
rdcart
90%
99%
1s 10s 30s1m 5m
1d15h22m
1d5h48m
tripod-ss also uses a
tree-based index and we see a
similar performance curve.
The curve is shallower
because pgchem and mychem
use serialised molecules.
5h9m
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
tripod-ss
jcart-st
jcart
rdcart
90%
99%
1s 10s 30s1m 5m
1d5h48m
2h41m
1h2m
tripod-ss use the JChem atom-
match and path fingerprints. jcart
was fastest on overall time…
5h9m
…but sub-linear screens clearly win
for many easy queries. Notice
jcart ran ~1000 queries faster.
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
tripod-ss
orchem
fastsearch
rdluc
90%
99%
1s 10s 30s1m 5m
1d15h22m
1d5h48m
3d1h13m
1d18h11m
Unfortunately orchem was the
slowest cartridge measured. The
slowest queries were similar to
others using line-notations.
Recent CDK improvements
could make it faster.
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
bingo-nosql
bingo-nosql-clean
90%
99%
1s 10s 30s1m 5m
59m47s
1h6m
Comparing queries-clean to
default query set.
OTHER CONSIDERATIONS
What are the hits? o-xylene example
How do they scale?
• Index, tree-based indexes will have many
more internal nodes
• Memory usage
• binary < SMILES < molfile
• fingerprint length
PubChem Compound currently ~10x eMolecules
BENCHMARK SUMMARY
Many tools have reasonable performance for most
queries but are hindered by their worst cases.
Minimal difference between Oracle vs PostgreSQL
OrChem vs JCart (slowest and fastest cartridges)
MyChem and pgchem will benefit from improved
query preparation (hydrogen handling)
Domain specific indexes
preferable to table selects.
Efficient IO
Image: http://timvdm.blogspot.co.uk/
FINGERPRINT PERFORMANCE
Much work has been done on optimising fingerprints
Screen performance measured for several of the tools
• only partially explains observed time differences
• occasional v. bad precision for some queries
• hydrogens are difficult to encode1
• Maybe False Negatives! – but they’re relative
Tool Type Screenout Precision
bingo Hashed Trees/Rings 98.63% 80.9%
rdcart Hashed Patterns 97.95% 59.9%
jcart,tripod-ss Hashed Paths 98.15% 59.7%
pgchem,mychem,fastsearch Hashed Paths/Rings 98.2% 57.3%
1. http://nextmovesoftware.com/blog/2015/02/16/
H
N
H
AN EfFICIENT
ATOM-MATCH
Arthor
(codename)
• Query optimisation
• Database preprocessing
• Efficient binary representation
• eMolecules, 1.2GiB
• Matching done on representation
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
orchem
fastsearch
jcart
bingo-nosql
bingo-pgsql
arthor
rdcart
90%
99%
1s 10s 30s1m 5m
27m31s
1h2m
59m47s
FINGERPRINTING MATERS
Arthor - 0% screen-out
23,290,449,670 atom-matches
Bingo - 98.63% screen-out
319,079,160 atom-matches
Can test how much different fingerprints mater…
Provide arthor a pre-computed list of screen hits
Times therefore presume instant bit screen
False negatives are relative to 0% screen-out.
FINGERPRINTING MATERS
Fingerprint Length Density Time False
NEGATIVES
arthor - - 27m35s -
+rdpath 2048 61.90% 2m52s
(x9.5)
61,915
(0.02%)
+maccs 166 29.08% 2m26s
(x11.2)
140,968,649
(57.63%)
+dalke353 353 6.59% 2m2s
(x13.5)
0
+obfp2 1021 12.55% 1m32s
(x17.9)
641,712
(0.26%)
+jpath 1024 23.36% 1m7s
(x24.5)
41,889
(0.01)
+indigo-sub 1600 23.09% 55s
(x29.6)
128,288
(0.05%)
+indigo-sub+ext 1624 22.48% 54s
(x30.1)
128,288
(0.05%)
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
90%
99%
1s
arthor
rdpath
maccs
dalke353
jpath
indigo-sub+ext
indigo-sub
obfp2
n.b. < 3323 because some
queries had no hits from the
fingerprint screen
CONCLUSIONS
Fast searching depends on many factors
• index data-structure
• fingerprint type
• molecule representation
• atom-match algorithm
Fingerprint optimisation does mater but is not the
performance bottleneck and can’t always help:
Generic patterns, a-a
Hydrogens, [H]N([H])C
ACKNOWLEDGEMENTS
Daniel Lowe and Noel O’Boyle, NextMove Software
Andrew Dalke
- assembling Structure Query Collection (SQC)
Michael Gilson and Tiqing Liu
- providing BindingDB (http://www.bindingdb.org/)
queries for SQC
Tool and cartridge developers
Further optimisation and keeping file open: 36 s including
inverted index FP screen, single threaded:
1
10
100
1000
100
101
102
103
104
105
106
107
QueriesNotFinished(n)
Time (ms)
3323
tripod-ss
orchem
fastsearch
mychem
pgchem
jcart-st
jcart
bingo-orcl
bingo-nosql
bingo-pgsql
arthor-fp
arthor
rdcart
rdluc
rdsmigrep
90%
99%
1s 10s 30s1m 5m
Some FALSE NEGATIVES
Most false negatives are due to Kekulisation/Aromaticity.
Typically when reading SMILES a tool will assign a Kekulé
form and then re-aromatise.
H3C
N
CH3
P
OO
H3C
N
CH3
P
OO
H3C
N
CH3
P
OO
H3C
N
CH3
P
OO
H3C
N
CH3
P
OO
Kekulise
Aromatise
Input
Open Babel
Some FALSE NEGATIVES
OO
CH3
OO
CH3
OO
CH3
OO
CH3
Kekulise Aromatise
JChem, RDKit
Open Babel, CDK, OEChem
Does have
o-xylene
substructure
Doesn’t have
o-xylene
substructure

Substructure Search Face-off

  • 1.
    Cambridge Cheminformatics NetworkMeeting, Cambridge, 27th May 2015 Substructure Searching Face-off John May and Roger Sayle NextMove Software Cambridge, UK
  • 2.
    Molecular Identity is foothe same as bar? Substructure is foo part of bar? Chemical Similarity how much is foo like bar? “A grand unified theory: the three fundamental forces of Cheminformatics” - R Sayle et al. SmallWorld: Efficient Maximum Common Subgraph Searching of Large Chemical Databases. ACS. Aug 2012.
  • 3.
    SUBSTRUCTURE SEARCH Some ofthe many uses: • Fragment-based lead discovery • Murcko Scaffolds • Matched pairs • Functional groups, atom types • Similarity Keys (MACCS/CACTVS) • Toxicology - Tim Allen’s MIE models Substructure searches are infrequent*… …they can be slow - correlation/causation? *~10x more unique similarity queries in Structure Query Collection
  • 4.
    ANATOMY OF ASUBSEARCH 0008800040008020 CCO 1000000050000028 NCC 5008a04040008020 CCCCO 0000000040000024 CCl 0000080000040020 CBr 0048002000008020 C(=O)O CCO query 0008000000008020 query-fp 1. Generate fingerprint 0008800040008020 CCO 1000000050000028 NCC 5008a04040008020 CCCCO 0000000040000024 CCl 0000080000040020 CBr 0048002000008020 C(=O)O 2. Fingerprint Scan 0008800040008020 CCO 1000000050000028 NCC 5008a04040008020 CCCCO 0000000040000024 CCl 0000080000040020 CBr 0048002000008020 C(=O)O 3. Atom-match Variables • fp type • fp index type • none • linear • sub-linear • mol format • line-notation • binary • atom-match • VF2 • Ullmann • storage • flatfile • RDMS *CBr is actually filtered with this fingerprint but left to show the FP is generally not perfect (precision<1)
  • 5.
    WHY CAN ITFEEL SLOW? Identity and Similarity Search different queries, similar amount of work Substructure Search different queries, potentially huge difference in work Rough est. for ~10 mil compounds • Identity, index canonical form – b-tree: ≤ 1 ms • Similarity, index fingerprint – linear scan: ≤ 100 ms • Substructure, index fingerprint + structure • linear FP scan, atom-based match: ≥ 100 ms • sub-linear FP scan, atom-based match: ≥ 5 ms
  • 6.
    STRATEGIES? Parallelisation resource contention frommultiple users Limit query count (first 10) must decide which ones are first Limit time (60 s in eMolecules/SureChEMBL) hits depend on hardware/workload Cache or filter pathological queries how to predict? Limit screen count (fastsearch) may get no hits?
  • 7.
    EXISTING BENCHMARKS Several toolspublish isolated performance figures and should be commended. “what performance can you expect” Alas different hardware, queries, and target dataset limit meaningful conclusions and comparisons. Using the same hardware, queries, and target dataset we present the execution efficiency (how fast). Retrieval efficiency (hits) will be touched upon.
  • 8.
  • 9.
    TARGET DATABASE Needed moderatesize collection ChEMBL ~1.5 mil, too easy, fits easily in a memory cache PubChem Compound ~70 mil, too large for many tools eMolecules 6,996,230 compounds performed minimal cleanup eMol IDs will be made available
  • 10.
    QUERIES Structure Query Collection(SQC) 3,488 BindingDB_substructure queries 3,342 connected, 121 fragments User generated Includes pathological queries Excluded fragments – some consider benzene as bad: c1ccccc1.c1ccccc1 slow c1ccccc1.c1ccccc1.c1ccccc1 very slow c1ccccc1.c1ccccc1.c1ccccc1.c1ccccc1.c1ccccc1 ouch Andrew Dalke's BitBucket Project - https://bitbucket.org/dalke/sqc
  • 11.
    QUERIES Duplicates due toaromaticity or hydrogens [H]C1=CN=CN=C1[H] pyrimidine [H]C1=CN=CN=C1 pyrimidine C1=CN=CN=C1 pyrimidine C1=CC=CC=C1 benzene c1ccccc1 benzene 3,140/3,342 unique - but used the non-unique set: - Hydrogens change semantics of match - Queries run unmodified but standardised* to queries-clean when needed, tools that expect “SMARTS” *aromatised, suppressed-H, atom-stereo removed
  • 12.
    KEY Type ChemistryStorage FORMAT arthor standalone NextMove Flatfile Serialised bingo-pgsql cartridge Indigo PostgreSQL Serialised bingo-orcl cartridge Indigo Oracle Serialised bingo-nosql standalone Indigo Flatfile Serialised fastsearch standalone Open Babel Flatfile SMILES1 jcart standalone/cartridge ChemAxon Oracle Serialised jcart-st (1 thread) standalone/cartridge ChemAxon Oracle Serialised mychem cartridge Open Babel MySQL (MariaDB) Serialised pgchem cartridge Open Babel PostgreSQL Serialised orchem cartridge CDK Oracle Serialised2 rdcart cartridge RDKit PostgreSQL Serialised rdluc standalone RDKit Lucene SMILES rdsmigrep standalone RDKit SMILES SMILES tripod-ss standalone ChemAxon Oracle Cache SMILES3 1) FastSearch format depends on input. 2) OrChem serialises as a string rather than binary. 3) Tripod’s Search Search uses molfiles by default. Underlined: queries-clean used TOOLS EVALUATED
  • 13.
    Name Type ChemistryStorage Pinpoint Cartridge Dotmatics Oracle Direct Cartridge BIOVIA/Accelrys/MDL Oracle Accord Cartridge BIOVIA/Accelrys Oracle ABCD Cartridge J&J Oracle DayCart Cartridge Daylight Oracle/Postgres Torus Cartridge Digital Chem Oracle OpenEye Cartridge Cartridge OpenEye Oracle MolCart Cartridge ICM MySQL MolSQL Cartridge Scilligence SQL Server Chord Cartridge OpenEye PostgreSQL OpenChord Cartridge Open Babel / RDKit PostgreSQL IC Cartridge Cartridge InfoChem Oracle AUSPYX Cartridge Tripos Oracle Oracle Cartridge Cartridge PerkinElemer Oracle MORE CARTRIDGES Some not externally available (ABCD) or being retired (Accord)
  • 14.
    Name Type ChemistryStorage ChemFP standalone Multiple FPS/BFPS in-memory Similr standalone ? MongoDB Data Warrior standalone Acetlion In-memory Ambit - OpenTox standalone CDK/Ambit MySQL MolecularLucene standalone CDK Lucene Wikipedia CSE standalone Acetlion (JS) In-browser-memory MOLDB6 standalone checkmol/matchmol MySQL ChemSearch1 SQL SQL Oracle/PostgreSQL SQLMOL SQL SQL MS SQL MORE STANDALONES ChemFP, Similr, MolecularLucene - currently similarity only MOLDB6 - index time for eMol est. at 22 days… we started last week 1: Golovin A and Henrick K. Chemical Substructure Search in SQL. JCIM. 2008. 49(1)
  • 15.
    CHANGES FROM “OUT OFTHE BOX” MyChem and RDKit Lucene - fingerprint screen workaround - OB FP2 and Avalon FP, no bits ≠ no hits Tripod Search Server - Load from SMILES instead of molfile - Avoid aromaticity recalculation - Used larger cache size
  • 16.
    MEASUREMENT IS NOTPROPHECY1 Large number of variables Time taken for this benchmark, with these tool versions, on a machine, with this load. Tools were setup as per user manuals (shared memory etc). A “normal” desktop, £££ less than iPhone 6+. CentOS 7 Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz 16 GB RAM “Trust has no place in science” - NextMove Software will make inputs available for others to test 1: http://benchmarksgame.alioth.debian.org/
  • 17.
  • 18.
    EXCLUDED QueRIES 19 queriesskipped in one or more tools 3,323/3,342 that were executed by all 2 Non-terminal hydrogens C1N[H]OC[H]1 1 Invalid stereochemistry CC[C@@H] 10 Atom classes C1C[N:1]CNC1 6 Bond stereo not-implemented (should have cleaned) N 1 HN H2 C NH H O H2C H H3 C CH
  • 19.
    RETRIEVAL DIFFERENCES “We demandrigidly defined areas of doubt and uncertainty!” CH3 CH3 o-xylene
  • 20.
    RETRIEVAL DIFFERENCES “We demandrigidly defined areas of doubt and uncertainty!” Somewhere between 440,901 and 529,386 rdcart 500,126 rdluc 500,053 bingo (pgsql/orcl) 500,865 bingo (nosql) 498,427 tripod-ss 509,655 jcart 444,541 fastsearch 440,901 orchem 529,386 arthor 444,553 CH3 CH3 o-xylene
  • 21.
    1 10 100 1000 100 101 102 103 104 105 106 107 QueriesNotFinished(n) Time (ms) 3323 90% 99% 1s 10s30s1m 5m many queries, running quick <— all start here some queries, running slow Where the line drops from 3323, that is the fastest query. Where it falls bellow 0, that was the slowest. Area under curve ~ total elapsed time for all queries. However log,log plot so can be deceptive.
  • 22.
  • 23.
    1 10 100 1000 100 101 102 103 104 105 106 107 QueriesNotFinished(n) Time (ms) 3323 rdcart rdsmigrep 90% 99% 1s 10s30s1m 5m 5h9m 9d15h0m 90% < 10 s 75% < 1 s No FP screen, all queries take around 5 mins for rdsmigrep (no sanitise). rdcart slowest query is nearly as slow.
  • 24.
    1 10 100 1000 100 101 102 103 104 105 106 107 QueriesNotFinished(n) Time (ms) 3323 rdcart rdluc rdsmigrep 90% 99% 1s 10s30s1m 5m 5h9m 9d15h0m 1d18h11m FP scan degraded perfomance for these queries rdcart worse case is only better due to mol serialisation. rdluc / rdsmigrep both use SMILES.
  • 25.
    1 10 100 1000 100 101 102 103 104 105 106 107 QueriesNotFinished(n) Time (ms) 3323 bingo-orcl bingo-pgsql 90% 99% 1s 10s30s1m 5m 1h54m 2h6m Bingo Oracle and PostgreSQL perform similarly. Small difference is likely measurement inaccuracies.
  • 26.
    1 10 100 1000 100 101 102 103 104 105 106 107 QueriesNotFinished(n) Time (ms) 3323 bingo-orcl bingo-nosql bingo-pgsql 90% 99% 1s 10s30s1m 5m 59m47s 1h54m 2h6m The recent “NoSQL” (flatfile) version is about twice as fast – DB overhead?
  • 27.
    1 10 100 1000 100 101 102 103 104 105 106 107 QueriesNotFinished(n) Time (ms) 3323 jcart-st jcart 90% 99% 1s 10s30s1m 5m 2h41m 1h2m jcart was the fastest cartridge. By default it uses all available processors…
  • 28.
    1 10 100 1000 100 101 102 103 104 105 106 107 QueriesNotFinished(n) Time (ms) 3323 jcart-st jcart bingo-orcl bingo-pgsql 90% 99% 1s 10s30s1m 5m 2h41m 1h2m 1h54m 2h6m …limiting to a single thread (st) we observed a similar performance to the Bingo cartridges.
  • 29.
    1 10 100 1000 100 101 102 103 104 105 106 107 QueriesNotFinished(n) Time (ms) 3323 fastsearch mychem pgchem 90% 99% 1s 10s30s1m 5m 13h54m 1d1h52m 1d15h22m pgchem and mychem have a different shape curve. This turns out to be hydrogen sprouting for some queries. fastsearch would also show this but got queries-clean
  • 30.
    1 10 100 1000 100 101 102 103 104 105 106 107 QueriesNotFinished(n) Time (ms) 3323 fastsearch mychem pgchem 90% 99% 1s 10s30s1m 5m 13h54m 1d1h52m 1d15h22m linear scan diff Both mychem and fastsearch do a linear FP scan. mychem does this via a SQL statement, fastsearch does it sequentially from the file.
  • 31.
    1 10 100 1000 100 101 102 103 104 105 106 107 QueriesNotFinished(n) Time (ms) 3323 fastsearch mychem pgchem rdcart 90% 99% 1s 10s30s1m 5m 5h9m 13h54m pghcem and rdcart both use a GIST, r-tree based index. This provides sub-linear screening for some queries. The curves are similar and we would therefore expect pgchem to also be ~ 6 hrs with the hydrogen issues resolved.
  • 32.
    1 10 100 1000 100 101 102 103 104 105 106 107 QueriesNotFinished(n) Time (ms) 3323 tripod-ss fastsearch mychem pgchem rdcart 90% 99% 1s 10s30s1m 5m 1d15h22m 1d5h48m tripod-ss also uses a tree-based index and we see a similar performance curve. The curve is shallower because pgchem and mychem use serialised molecules. 5h9m
  • 33.
    1 10 100 1000 100 101 102 103 104 105 106 107 QueriesNotFinished(n) Time (ms) 3323 tripod-ss jcart-st jcart rdcart 90% 99% 1s 10s30s1m 5m 1d5h48m 2h41m 1h2m tripod-ss use the JChem atom- match and path fingerprints. jcart was fastest on overall time… 5h9m …but sub-linear screens clearly win for many easy queries. Notice jcart ran ~1000 queries faster.
  • 34.
    1 10 100 1000 100 101 102 103 104 105 106 107 QueriesNotFinished(n) Time (ms) 3323 tripod-ss orchem fastsearch rdluc 90% 99% 1s 10s30s1m 5m 1d15h22m 1d5h48m 3d1h13m 1d18h11m Unfortunately orchem was the slowest cartridge measured. The slowest queries were similar to others using line-notations. Recent CDK improvements could make it faster.
  • 35.
  • 36.
    OTHER CONSIDERATIONS What arethe hits? o-xylene example How do they scale? • Index, tree-based indexes will have many more internal nodes • Memory usage • binary < SMILES < molfile • fingerprint length PubChem Compound currently ~10x eMolecules
  • 37.
    BENCHMARK SUMMARY Many toolshave reasonable performance for most queries but are hindered by their worst cases. Minimal difference between Oracle vs PostgreSQL OrChem vs JCart (slowest and fastest cartridges) MyChem and pgchem will benefit from improved query preparation (hydrogen handling) Domain specific indexes preferable to table selects. Efficient IO Image: http://timvdm.blogspot.co.uk/
  • 38.
    FINGERPRINT PERFORMANCE Much workhas been done on optimising fingerprints Screen performance measured for several of the tools • only partially explains observed time differences • occasional v. bad precision for some queries • hydrogens are difficult to encode1 • Maybe False Negatives! – but they’re relative Tool Type Screenout Precision bingo Hashed Trees/Rings 98.63% 80.9% rdcart Hashed Patterns 97.95% 59.9% jcart,tripod-ss Hashed Paths 98.15% 59.7% pgchem,mychem,fastsearch Hashed Paths/Rings 98.2% 57.3% 1. http://nextmovesoftware.com/blog/2015/02/16/ H N H
  • 39.
    AN EfFICIENT ATOM-MATCH Arthor (codename) • Queryoptimisation • Database preprocessing • Efficient binary representation • eMolecules, 1.2GiB • Matching done on representation
  • 40.
  • 41.
    FINGERPRINTING MATERS Arthor -0% screen-out 23,290,449,670 atom-matches Bingo - 98.63% screen-out 319,079,160 atom-matches Can test how much different fingerprints mater… Provide arthor a pre-computed list of screen hits Times therefore presume instant bit screen False negatives are relative to 0% screen-out.
  • 42.
    FINGERPRINTING MATERS Fingerprint LengthDensity Time False NEGATIVES arthor - - 27m35s - +rdpath 2048 61.90% 2m52s (x9.5) 61,915 (0.02%) +maccs 166 29.08% 2m26s (x11.2) 140,968,649 (57.63%) +dalke353 353 6.59% 2m2s (x13.5) 0 +obfp2 1021 12.55% 1m32s (x17.9) 641,712 (0.26%) +jpath 1024 23.36% 1m7s (x24.5) 41,889 (0.01) +indigo-sub 1600 23.09% 55s (x29.6) 128,288 (0.05%) +indigo-sub+ext 1624 22.48% 54s (x30.1) 128,288 (0.05%)
  • 43.
  • 44.
    CONCLUSIONS Fast searching dependson many factors • index data-structure • fingerprint type • molecule representation • atom-match algorithm Fingerprint optimisation does mater but is not the performance bottleneck and can’t always help: Generic patterns, a-a Hydrogens, [H]N([H])C
  • 45.
    ACKNOWLEDGEMENTS Daniel Lowe andNoel O’Boyle, NextMove Software Andrew Dalke - assembling Structure Query Collection (SQC) Michael Gilson and Tiqing Liu - providing BindingDB (http://www.bindingdb.org/) queries for SQC Tool and cartridge developers
  • 46.
    Further optimisation andkeeping file open: 36 s including inverted index FP screen, single threaded: 1 10 100 1000 100 101 102 103 104 105 106 107 QueriesNotFinished(n) Time (ms) 3323 tripod-ss orchem fastsearch mychem pgchem jcart-st jcart bingo-orcl bingo-nosql bingo-pgsql arthor-fp arthor rdcart rdluc rdsmigrep 90% 99% 1s 10s 30s1m 5m
  • 47.
    Some FALSE NEGATIVES Mostfalse negatives are due to Kekulisation/Aromaticity. Typically when reading SMILES a tool will assign a Kekulé form and then re-aromatise. H3C N CH3 P OO H3C N CH3 P OO H3C N CH3 P OO H3C N CH3 P OO H3C N CH3 P OO Kekulise Aromatise Input Open Babel
  • 48.
    Some FALSE NEGATIVES OO CH3 OO CH3 OO CH3 OO CH3 KekuliseAromatise JChem, RDKit Open Babel, CDK, OEChem Does have o-xylene substructure Doesn’t have o-xylene substructure