functionaliteit
Hieronder is een lijst van de kernfunctionaliteit van MDF:
-
chemische structuur zoeken: Full, Sub, SMARTS, Similarity, Formula
-
zoekopdrachten naar chemische structuur kunnen worden gecombineerd met zoekopdrachten naar Eigenschappen
-
zoekopdrachten naar chemische structuur worden opgepiept en gecached
-
Ondersteuning voor meercomponentenverbindingen (mengsels)
-
3 doorzoekbare entiteiten met chemische structuur: ChemicalCompound, Containable and ChemicalCompoundContainer
-
Import and Export of SD-Files for above 3 entities
-
toegang tot transactionele databases
-
optionele beveiliging (autorisatie)
met het ontwerp en de functionaliteit van MDF is het mogelijk om veel verschillende soorten systemen te bouwen, zoals registratiesystemen, inventarisatiesystemen of slechts een eenvoudige samengestelde database. Terwijl je ook je eigen ELN kon maken, bestaat er ook de gratis Indigo ELN. Dit ELN is gemaakt door Gga Software Services en wordt gebruikt bij Pfizer .
in tegenstelling tot MolDB5R en MyMolDB is MDF geen volledig functionele standalone webtoepassing met zoekopdracht naar chemische structuur. Zoals de naam al aangeeft is het een raamwerk om het maken van een dergelijke toepassing te vereenvoudigen. MDF kan ook worden gebruikt om lokale of client-server-bureaubladtoepassingen te maken. MDF is gericht op softwareontwikkelaars en niet bedoeld voor gebruik door wetenschappers zelf. MDF-functies zijn echter zeer robuust. Chemische structuur zoeken wordt gedaan in de database en niet de applicatie code. Daarom kunt u zoeken op chemische structuur en andere eigenschappen op hetzelfde moment, de resultaten kunnen worden gesorteerd op meerdere eigenschappen en kunnen worden opgepiept (SQL OFFSET en LIMIETCLAUSULES). Merk op dat als u de chemische structuur zoeken in applicatie code, elke query vereist ten minste twee reizen naar de database, namelijk de structuur zoeken en vervolgens het filteren op andere eigenschappen, sorteren en/of beperken. Beide moeten gebeuren in dezelfde transactie. Er werd niet vastgesteld of MolDB5R en MyMolDB dit daadwerkelijk doen in dezelfde transactie.
in MDF kunnen chemische verbindingen worden geassocieerd met een containable, die in registratiesystemen een partij of in een inventarisatiesysteem een partij zou zijn. Een specifiek fysiek beschikbaar monster in een fles met barcode kan dan worden geassocieerd met een container. Deze containers kunnen ook worden doorzocht op chemische structuur. Dit is de basis voor het creëren van een inventarisatiesysteem. Ontwikkelaars kunnen zoveel extra eigenschappen toevoegen als ze willen aan elk van de entiteiten en ze zijn allemaal doorzoekbaar samen met de chemische structuur.
alle gegevenstoegang in MDF is transactioneel om gegevensinconsistenties te voorkomen. MDF kan worden geconfigureerd om een database-verbindingsgroep te gebruiken. Bij het opvragen van een RDBMS kost het maken van een verbinding vaak meer tijd dan de query zelf en als u al open verbindingen hebt, kunnen de responstijden worden verkort.
voor het zoeken naar overeenkomsten heeft MDF de algoritmen van de Bingo-Cartridge blootgelegd die Tanimoto, Tversky en Euclidische metriek zijn voor substructuren.
MDF is klaar voor gebruik met Veerbeveiliging. Beveiliging is optioneel. MDF biedt method level security (autorisatie). Het biedt geen authenticatie functies.
Mengselverwerking
MDF ondersteunt meercomponenten chemische verbindingen. Zoeken op substructuur geeft alle verbindingen terug die ten minste één component (chemische structuur) hebben die overeenkomt met de query-structuur. Dit is belangrijk omdat reactieproducten die in een chemisch registratiesysteem kunnen worden ingevoerd bijna altijd mengsels zijn, tenzij uitgebreide zuivering wordt gedaan.
als een item in een geïmporteerd SD-bestand bestaat uit meerdere niet-verbonden structuren, wordt aangenomen dat dit item een mengsel is en elke structuur wordt opgeslagen als een afzonderlijke chemische structuur.
Structure normalization
standaard slaat MDF de chemische structuren op zoals ze worden ingediend. MDF doet geen standaardisatie/normalisatie van chemische structuren. Het is aan de ontwikkelaar die MDF gebruikt om ervoor te zorgen dat chemische structuren correct worden genormaliseerd voordat ze in de database worden opgeslagen. Momenteel wordt voorgesteld dat ontwikkelaars een dergelijke functie te implementeren door het overschrijven van de preSave () methode van ChemicalCompoundServiceImpl. Deze methode wordt genoemd alvorens om het even welke chemische samenstelling wordt gecreeerd of bijgewerkt. Binnen deze methode kunnen de chemische verbinding en alle chemische structuren waaruit het bestaat vrij worden gemanipuleerd zoals gewenst. Merk op dat elke verbinding wordt opgeslagen zal worden verwerkt door deze methode.
zouten, oplosmiddelen en oplossingen
MDF de huidige versie 1.0.1 heeft geen speciale behandeling voor zouten, oplosmiddelen of oplossingen. MDF zal afzonderlijke componenten opslaan in een chemische structuurbestand als een aparte chemische structuur. Daarom bespaart een zout zoals 1 = CC = C1. wordt weergegeven als een mengsel van de twee ionen zonder vastgestelde percentages. Een exacte structuur zoeken naar beide ionen zou dit zout terug geven. Als het zout een lading groter dan 1 heeft en er meerdere ionen aan verbonden zijn zoals 1 = CC = C = C1.. het zout wordt opgeslagen als een mengsel van 1 = CC = C = C1 en zonder vast te stellen percentages. Als de chemische structuur één enkel ion is, wordt het opgeslagen en doorzoekbaar zoals elke andere chemische structuur. Als dit gedrag in een specifiek geval ongeschikt is, kunnen ontwikkelaars salt en solvate handling functionaliteit implementeren in de preSave () methode.
sommige commerciële systemen lijken ook geen oplossing te kunnen hanteren. Het wordt geadviseerd om de samenstelling te creëren alsof het zuiver was en de oplossingsinformatie als afzonderlijke gebieden op het samenstellingsniveau toe te voegen.
voorbeeld webtoepassing
een eenvoudige webtoepassing met MDF is gemaakt. De webapplicatie maakt gebruik van Spring MVC. De applicatie maakt geen gebruik van de security integratie en het maakt geen gebruik van de entiteiten bevatten en chemische Compoundcontainer. Het maakt alleen gebruik van chemische samengestelde entiteit. De toepassing is een samenstellingsdatabase voor meercomponenten samenstellingen. Het heeft een pagina voor het importeren van de chemische structuren in een SD-bestand in de samengestelde database. De database kan worden doorzocht op substructuur en eigenschappen. Het gebruikt JSME voor het tekenen van de chemische structuren (Figuur 3). De pagina met zoekresultaten toont de zoekresultaten in tabelvorm en paged. Wanneer een substructuur zoek wordt gedaan, zal de substructuur worden gemarkeerd in de zoekresultaten (Figuur 4). De hits van een zoekopdracht kunnen worden geëxporteerd als een SD-bestand. De zoekresultaten bevatten een link naar één compound view. De eigenschappen van de verbinding kunnen worden bewerkt en samenstellingen kunnen worden toegevoegd, bewerkt en verwijderd (figuren 5 en 6). Bij het bewerken van een samenstelling of een samenstelling behandelt de toepassing op transparante wijze gelijktijdige wijzigingen en het dialoogvenster conflictoplossing wordt weergegeven waarin de gebruiker kan selecteren welke waarden voor elke eigenschap te gebruiken en vervolgens die nieuwe versie op te slaan.
Performance
MDF heeft een belangrijk prestatieprobleem bij het verwerken van mengsels. Als een toepassing mengsels gebruikt, dat wil zeggen verbindingen met meerdere componenten, zal een chemische structuur query één rij retourneren voor elke component in een verbinding die overeenkomt met de query. Dit is ongewenst omdat de eindgebruikers willen elke verbinding die overeenkomt met de query slechts één keer te zien. De oplossing voor het probleem is om een aparte query te gebruiken en dit is waar de prestaties probleem gebeurt. Als u een aparte query uitvoert, moet de hele database worden doorzocht, ongeacht de limietclausule die de uitvoeringstijd aanzienlijk verhoogt. Merk op dat sorteren hetzelfde effect heeft. Dus Sorteren kan ook een enorme prestatie straf hebben en wanneer je paging moet je altijd sorteren om een voorspelbaar resultaat te krijgen. Om dit nog erger te maken Bingo Cartridge voor PostgreSQL heeft nog geen goede implementatie voor kosten schatting en de kosten voor het gebruik van de chemische structuur index is hard gecodeerd en onderschat. Dit misleidt de PostgreSQL query schaafmachine altijd gebruik maken van een volledige index scan op structuur zoekindex, zelfs wanneer de query heeft een extra waar-clausule die sterk beperkt de hoeveelheid resultaten. In deze gevallen zou het bijvoorbeeld sneller zijn om de index voor het CAS-nummer te gebruiken en de Bingo matchsub-functie te gebruiken voor het filteren. De matchsub functie doet substructuur matching zonder index. Dit is natuurlijk langzamer dan bij een index maar als het maar voor een klein aantal structuren hoeft te gebeuren is het een stuk sneller dan de volledige index scan. Om de kostenraming probleem op te lossen, MDF doet een aantal interne berekeningen om expliciet te beslissen of de structuur index of de matchsub functie wordt gebruikt. Dit kan de prestaties met een orde van grootte verbeteren. Merk op dat de leverancier van de Bingo Cartridge op de hoogte is van dit probleem en de tijdlijn voor de fix was eind 2013. Het belangrijkste probleem van verschillende queries en sorteren is echter inherent aan hoe relationele databases werken en kan niet worden opgelost, behalve met een betere substructuur zoekindex of betere hardware. MDF biedt ook een instelling voor het uitschakelen van verschillende queries toepassing-brede voor single-component samengestelde databases.
om MDF te benchmarken werd de eerder beschreven webtoepassing gebruikt. De database bevat 525573 unieke verbindingen. De verbindingen zijn van zink subset 13 bij referentie pH 7 de SD-files 13_p0. 0.sdf, 13_p0. 1.sdf, 13_p0. 10.sdf en 13_p0.11.sdf. De structuren worden opgeslagen in de database als SMILES. Het importeren van elk van de SD-bestanden, die ongeveer 131’000 chemische structuren bevatten, duurde 12 minuten met de chemische structuur zoekindex uitgeschakeld. Het herbouwen van de index nadat alle SD-bestanden werden geïmporteerd duurde 22 minuten op een laptop met 4 GB RAM, Core i5-3220M CPU en een 512GB Samsung 830 SSD. Dat is 1 uur 10 min om een volledig geïndexeerde database op te zetten met een half miljoen verbindingen. Als extra referentie werd dezelfde import gedaan op een desktop PC met 12 GB RAM, i7-875K @ 3,4 GHz en de database die draait op een Western Digital Green Drive (5400 RPM). Hier de import duurde 8 min en de conclusie is dat de import is CPU beperkt in plaats van wordt beperkt door opslag-snelheid. De index generatie duurde ongeveer 22 minuten op de laptop en 20 minuten op de desktop. De conclusie hier is dat het meer wordt beperkt door de CPU, maar rijden snelheid is ook belangrijk. De import en index generatie prestaties bij het opslaan van de structuren als molfiles was niet gebenchmarked.
de zoekprestaties van de substructuur werden gebenchmarked met verschillende configuratie-instellingen. Substructure search wordt gedaan door Bingo PostgreSQL cartridge en deze benchmark weerspiegelt daarom zijn prestaties plus eventuele overhead veroorzaakt door MDF. Met uitzondering van c1ccccc1 tekende de auteur chemische structuren zonder specifieke betekenis en testte de zoeksnelheid. De zoeksnelheid werd bepaald door logbacks implementatie van org.slf4j.profiler.Profiler.
de eerste benchmark is een referentie. Deze benchmark gebruikt de optie om alle verschillende query ‘ s uit te schakelen en er is geen Sorteren gedaan. MDF voert een telling van de totale hits bij het eerste voorkomen van een chemische structuur zoeken en de telling wordt gecached waardoor de eerste pagina te laden langzamer dan de volgende pagina ‘ s. Elke pagina bevat 4 records. De resultaten zijn weergegeven in Tabel 2 gerangschikt Oplopend op aantal hits.
de benchmark werd herhaald, maar deze keer met verschillende queries ingeschakeld. De laadtijd van de eerste pagina wordt verdubbeld omdat de count query wordt uitgevoerd en vervolgens de werkelijke query wordt uitgevoerd die ongeveer dezelfde hoeveelheid tijd in beslag neemt als de count query als gevolg van de afzonderlijke clausule. De tweede pagina duurt dan altijd de helft van de tijd om te laden in vergelijking met de eerste pagina om dezelfde reden (Tabel 3). Het aantal treffers is identiek aan die in Tabel 2 omdat alle verbindingen in de database uit slechts één component bestaan.
de resultaten tonen aan dat Bingo geen optimalisaties doet voor een veelvoorkomende substructure query zoals een benzeenring en daarom is het zoeken naar c1ccccc1 in een database waarin bijna alle moleculen deze functie hebben erg traag. Om de zoeksnelheid in een dergelijk scenario te verbeteren, wordt filtering door extra eigenschappen aanbevolen. Vandaar dat de benchmark werd herhaald met een extra filter van samengestelde naam te beginnen met “ZINC34”.
Tabel 4 toont het voordeel van de MDF-optimalisatie als een oplossing voor het probleem van de kostenraming in Bingo PostgreSQL-cartridge. Zonder deze optimalisatie zou de benchmark dezelfde prestaties leveren als in Tabel 3.
MDF maakt ook gebruik van Bingo Cartridges similarity Search functionaliteit. De prestaties werden getest door te zoeken naar verbindingen met een gelijkvormigheidsscore van 0.9 met behulp van de Tanimoto similarity measure, ook bekend als Jaccard Index . De resultaten zijn weergegeven in Tabel 5.
Outlook
voor het genereren van de chemische structuurafbeeldingen wordt de indigo-toolkit gebruikt. De toolkit kan worden geconfigureerd om de structuren te genereren op vele manieren, waaronder het kleuren van heteroatomen, bond lengte en breedte en nog veel meer. Momenteel is dit hard gecodeerd en kan niet worden aangepast door de gebruiker. Een volgende stap zou zijn om deze configuraties opties bloot te leggen, zodat ze kunnen worden ingesteld door middel van een Java properties bestand. Ook de behandeling van zouten en solvaten moet worden geïmplementeerd om MDF bruikbaar te maken in gebieden waar dergelijke verbindingen belangrijk zijn.
om gebruik te maken van MDF moet je in staat zijn om te programmeren in Java en je hebt basiskennis nodig over Spring framework en hoe het te configureren. Dit beperkt de doelgroep. Bij het gebruik van MDF je nodig hebt om een aantal ketel-plaat code te schrijven en dus de volgende stap zou zijn om extra tools te creëren om het gebruik van MDF te vergemakkelijken, zoals de automatische generatie van entiteit klassen en hun repositories en diensten. Deze tools moeten configureerbaar zijn, zodat een gebruiker de gewenste eigenschappen voor elk van de entiteiten en de gewenste zoekmethoden kan definiëren. Een optie zou een maven plugin. Maven plugins kunnen code genereren zoals de metamodel creatie gedaan door de QueryDSL-maven plugin. Een andere optie zijn annotaties die code genereren bij het compileren zoals Project Lombok dat doet .
de laatste stap zou zijn om een webapplicatieplatform te maken waarmee beheerders nieuwe webapplicaties kunnen maken met zoekmogelijkheden met chemische structuur door simpelweg de gewenste eigenschappen voor de entiteiten in te voeren op een webformulier en op een knop te klikken. Het is duidelijk dat hiervoor een aanzienlijke ontwikkelingsinspanning nodig is.