From 598199dbb0779590c0b1a93c13d0458a99a596d4 Mon Sep 17 00:00:00 2001 From: brinn <brinn> Date: Mon, 25 May 2009 11:02:31 +0000 Subject: [PATCH] add: support for schema versioning change: use new batch update support of eodsql SVN: 11131 --- rtd_yeastx/.classpath | 28 ++--- .../ch/systemsx/cisd/yeastx/db/DBFactory.java | 40 +++++-- .../cisd/yeastx/eicml/EICML2Database.java | 34 ++++-- .../cisd/yeastx/eicml/IEICMSRunDAO.java | 21 ++-- .../yeastx/eicml/ListChromatogramLabels.java | 2 +- .../cisd/yeastx/fiaml/FIAML2Database.java | 104 ++++++------------ .../cisd/yeastx/fiaml/IFIAMSRunDAO.java | 15 +-- .../cisd/yeastx/fiaml/ProfileDTO.java | 87 +++++++++++++++ .../001/schema-001.sql} | 24 ++-- .../ReadChromatogramsPerformanceTest.java | 2 +- 10 files changed, 227 insertions(+), 130 deletions(-) create mode 100644 rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/ProfileDTO.java rename rtd_yeastx/source/sql/{schema.sql => postgresql/001/schema-001.sql} (87%) diff --git a/rtd_yeastx/.classpath b/rtd_yeastx/.classpath index ecca2a6ee13..eb162b4b474 100644 --- a/rtd_yeastx/.classpath +++ b/rtd_yeastx/.classpath @@ -1,13 +1,15 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="source/java"/> - <classpathentry kind="src" path="sourceTest/java"/> - <classpathentry kind="lib" path="/libraries/commons-codec/commons-codec.jar" sourcepath="/libraries/commons-codec/src.zip"/> - <classpathentry kind="lib" path="/libraries/commons-io/commons-io.jar" sourcepath="/libraries/commons-io/src.zip"/> - <classpathentry kind="lib" path="/libraries/commons-lang/commons-lang.jar" sourcepath="/libraries/commons-lang/src.zip"/> - <classpathentry kind="lib" path="/libraries/cisd-base/cisd-base.jar" sourcepath="/libraries/cisd-base/cisd-base-src.zip"/> - <classpathentry kind="lib" path="/libraries/postgresql/postgresql.jar" sourcepath="/libraries/postgresql/postgresql-src.zip"/> - <classpathentry kind="lib" path="/libraries/eodsql/eodsql.jar" sourcepath="/libraries/eodsql/eodsql_src.zip"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="output" path="targets/classes"/> -</classpath> +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="source/java"/> + <classpathentry kind="src" path="sourceTest/java"/> + <classpathentry kind="lib" path="/libraries/commons-codec/commons-codec.jar" sourcepath="/libraries/commons-codec/src.zip"/> + <classpathentry kind="lib" path="/libraries/commons-io/commons-io.jar" sourcepath="/libraries/commons-io/src.zip"/> + <classpathentry kind="lib" path="/libraries/commons-lang/commons-lang.jar" sourcepath="/libraries/commons-lang/src.zip"/> + <classpathentry kind="lib" path="/libraries/cisd-base/cisd-base.jar" sourcepath="/libraries/cisd-base/cisd-base-src.zip"/> + <classpathentry kind="lib" path="/libraries/postgresql/postgresql.jar" sourcepath="/libraries/postgresql/postgresql-src.zip"/> + <classpathentry kind="lib" path="/libraries/eodsql/eodsql.jar" sourcepath="/libraries/eodsql/eodsql_src.zip"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry combineaccessrules="false" kind="src" path="/dbmigration"/> + <classpathentry combineaccessrules="false" kind="src" path="/common"/> + <classpathentry kind="output" path="targets/classes"/> +</classpath> diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DBFactory.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DBFactory.java index 2381ba6ac2f..a4090b816f6 100644 --- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DBFactory.java +++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/db/DBFactory.java @@ -17,11 +17,13 @@ package ch.systemsx.cisd.yeastx.db; import java.sql.Connection; -import java.sql.DriverManager; import java.sql.SQLException; import net.lemnik.eodsql.QueryTool; +import ch.systemsx.cisd.dbmigration.DBMigrationEngine; +import ch.systemsx.cisd.dbmigration.DatabaseConfigurationContext; + /** * Factory for database connections. * @@ -29,25 +31,39 @@ import net.lemnik.eodsql.QueryTool; */ public class DBFactory { + /** Current version of the database. */ + public static final String DATABASE_VERSION = "001"; + static { QueryTool.getTypeMap().put(float[].class, new FloatArrayMapper()); } - public static Connection getConnection() throws SQLException + private final DatabaseConfigurationContext context; + + public DBFactory(DatabaseConfigurationContext context) + { + this.context = context; + DBMigrationEngine.createOrMigrateDatabaseAndGetScriptProvider(context, DATABASE_VERSION); + } + + public Connection getConnection() throws SQLException { - try - { - Class.forName("org.postgresql.Driver"); - } catch (ClassNotFoundException ex) - { - throw new SQLException("No suitable driver."); - } - final Connection conn = - DriverManager.getConnection("jdbc:postgresql:metabol", System.getProperties() - .getProperty("user.name"), ""); + final Connection conn = context.getDataSource().getConnection(); conn.setAutoCommit(false); return conn; } + public static DatabaseConfigurationContext createDefaultDBContext() + { + final DatabaseConfigurationContext context = new DatabaseConfigurationContext(); + context.setDatabaseEngineCode("postgresql"); + context.setBasicDatabaseName("metabol"); + context.setDatabaseKind("dev"); + context.setReadOnlyGroup("metabol_readonly"); + context.setReadWriteGroup("metabol_readwrite"); + context.setScriptFolder("source/sql"); + return context; + } + } diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICML2Database.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICML2Database.java index 43c5ef19f56..624930e02a9 100644 --- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICML2Database.java +++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICML2Database.java @@ -20,6 +20,8 @@ import java.io.File; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; import javax.xml.parsers.ParserConfigurationException; @@ -40,18 +42,32 @@ import ch.systemsx.cisd.yeastx.eicml.EICMLParser.IMSRunObserver; public class EICML2Database { + private final static int CHROMATOGRAM_BATCH_SIZE = 100; + public static IEICMSRunDAO getDAO(Connection conn) { return QueryTool.getQuery(conn, IEICMSRunDAO.class); } + private static void addChromatograms(IEICMSRunDAO dao, long eicMLId, + List<ChromatogramDTO> chromatograms, int threshold) + { + if (chromatograms.size() >= CHROMATOGRAM_BATCH_SIZE) + { + dao.addChromatograms(eicMLId, chromatograms); + chromatograms.clear(); + } + } + /** * Method for uploading an <var>eicMLFile</var> to the database. */ - public static void uploadEicMLFile(final Connection conn, final File eicMLFile, - String permId) throws SQLException + public static void uploadEicMLFile(final Connection conn, final File eicMLFile, String permId) + throws SQLException { - final long[] id = new long[1]; + final long[] eicMLId = new long[1]; + final List<ChromatogramDTO> chromatograms = + new ArrayList<ChromatogramDTO>(CHROMATOGRAM_BATCH_SIZE); try { final IEICMSRunDAO dao = getDAO(conn); @@ -59,16 +75,18 @@ public class EICML2Database { public void observe(EICMSRunDTO run) { - id[0] = dao.addMSRun(run); + eicMLId[0] = dao.addMSRun(run); + addChromatograms(dao, eicMLId[0], chromatograms, 1); } }, new IChromatogramObserver() { public void observe(ChromatogramDTO chromatogram) { - chromatogram.setEicMsRunId(id[0]); - dao.addChromatogram(chromatogram); + chromatograms.add(chromatogram); + addChromatograms(dao, eicMLId[0], chromatograms, CHROMATOGRAM_BATCH_SIZE); } }); + addChromatograms(dao, eicMLId[0], chromatograms, 1); conn.commit(); } catch (Throwable th) { @@ -86,7 +104,8 @@ public class EICML2Database public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, SQLException { - final Connection conn = DBFactory.getConnection(); + final long start = System.currentTimeMillis(); + final Connection conn = new DBFactory(DBFactory.createDefaultDBContext()).getConnection(); try { final String dir = args[0]; @@ -99,6 +118,7 @@ public class EICML2Database { conn.close(); } + System.out.println((System.currentTimeMillis() - start) / 1000.0); } } diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/IEICMSRunDAO.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/IEICMSRunDAO.java index 1e7d0ecfd22..a32d0a685b6 100644 --- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/IEICMSRunDAO.java +++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/IEICMSRunDAO.java @@ -16,9 +16,12 @@ package ch.systemsx.cisd.yeastx.eicml; +import java.util.List; + import net.lemnik.eodsql.BaseQuery; import net.lemnik.eodsql.DataIterator; import net.lemnik.eodsql.Select; +import net.lemnik.eodsql.Update; /** * Interface for querying / updating the metabol database. @@ -42,11 +45,11 @@ public interface IEICMSRunDAO extends BaseQuery + "?{1.methodSeparation}, ?{1.setId}, ?{1.operator}, ?{1.startTime}, ?{1.endTime}) returning eicMsRunId") public long addMSRun(EICMSRunDTO msRun); - @Select("INSERT INTO chromatograms (eicMsRunId, Q1MZ, Q3LowMz, Q3HighMz, label, polarity, runTimes, " - + "intensities) values (?{1.eicMsRunId}, ?{1.q1Mz}, " - + "?{1.q3LowMz}, ?{1.q3HighMz}, ?{1.label}, " - + "?{1.polarity}, ?{1.runTimes}, ?{1.intensities}) returning chromId") - public long addChromatogram(ChromatogramDTO chromatogram); + @Update(sql = "INSERT INTO chromatograms (eicMsRunId, Q1MZ, Q3LowMz, Q3HighMz, label, polarity, runTimes, " + + "intensities) values (?{1}, ?{2.q1Mz}, ?{2.q3LowMz}, ?{2.q3HighMz}, ?{2.label}, " + + "?{2.polarity}, ?{2.runTimes}, ?{2.intensities})", batchUpdate = true, parameterTypes = + { Long.class, ChromatogramDTO.class }) + public void addChromatograms(long eicMsRunId, List<ChromatogramDTO> chromatogram); @Select(sql = "SELECT * from eicmsruns", rubberstamp = true) public DataIterator<EICMSRunDTO> getMsRuns(); @@ -70,16 +73,16 @@ public interface IEICMSRunDAO extends BaseQuery @Select("SELECT chromatograms.* FROM chromatograms where chromId=?{1}") public ChromatogramDTO getChromatogramById(long id); - + @Select("SELECT chromatograms.* FROM chromatograms where label=?{1}") public ChromatogramDTO getChromatogramByLabel(String label); - @Select(sql = "SELECT chromatograms.* FROM chromatograms LEFT JOIN eicmsruns USING(eicMsRunId) " - + "where eicMsRunId=?{1.eicMsRunId}", rubberstamp = true) + @Select("SELECT chromatograms.* FROM chromatograms LEFT JOIN eicmsruns USING(eicMsRunId) " + + "where eicMsRunId=?{1.eicMsRunId}") public DataIterator<ChromatogramDTO> getChromatogramsForRun(EICMSRunDTO msRun); @Select(sql = "SELECT chromId, eicMsRunId, Q1Mz, Q3LowMz, Q3HighMz, label, polarity FROM chromatograms " - + "LEFT JOIN eicmsruns USING(eicMsRunId) " + "where eicMsRunId=?{1.eicMsRunId}", rubberstamp = true) + + "LEFT JOIN eicmsruns USING(eicMsRunId) " + "where eicMsRunId=?{1.eicMsRunId}") public DataIterator<ChromatogramDTO> getChromatogramsForRunNoData(EICMSRunDTO msRun); } diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/ListChromatogramLabels.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/ListChromatogramLabels.java index 7ac602839b7..e5b50a783bd 100644 --- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/ListChromatogramLabels.java +++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/ListChromatogramLabels.java @@ -33,7 +33,7 @@ public class ListChromatogramLabels public static void main(String[] args) throws SQLException { - final Connection conn = DBFactory.getConnection(); + final Connection conn = new DBFactory(DBFactory.createDefaultDBContext()).getConnection(); try { final IEICMSRunDAO dao = EICML2Database.getDAO(conn); diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/FIAML2Database.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/FIAML2Database.java index d8856dc148f..f017266053b 100644 --- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/FIAML2Database.java +++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/FIAML2Database.java @@ -17,10 +17,9 @@ package ch.systemsx.cisd.yeastx.fiaml; import java.io.File; -import java.sql.BatchUpdateException; import java.sql.Connection; -import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.Iterator; import net.lemnik.eodsql.QueryTool; @@ -43,67 +42,39 @@ public class FIAML2Database return QueryTool.getQuery(conn, IFIAMSRunDAO.class); } - private static void addProfilesForRun(final Connection conn, final long fiaMsRunId, - FIAMSRunDataDTO runData) throws SQLException + private static Iterable<ProfileDTO> profileChunk(final FIAMSRunDataDTO runData) { - try - { - final PreparedStatement prepProfile = - conn.prepareStatement("INSERT INTO profiles " - + "(fiaMsRunId, lowMz, highMz, mz, " - + "intensities) values (?, ?, ?, ?, ?)"); - final float[] mz = runData.getProfileMz(); - final float[] intensities = runData.getProfileIntensities(); - for (int i = 0; i < mz.length; i += PROFILE_CHUNK_SIZE) + return new Iterable<ProfileDTO>() { - final int imax = Math.min(mz.length, i + PROFILE_CHUNK_SIZE); - prepProfile.setLong(1, fiaMsRunId); - prepProfile.setFloat(2, mz[i]); - prepProfile.setFloat(3, mz[imax - 1]); - prepProfile.setString(4, toString(mz, i, imax)); - prepProfile.setString(5, toString(intensities, i, imax)); - prepProfile.addBatch(); - } - prepProfile.executeBatch(); - } catch (BatchUpdateException ex) - { - throw ex.getNextException(); - } - } + public Iterator<ProfileDTO> iterator() + { + return new Iterator<ProfileDTO>() + { + int i = 0; - private static String toString(float[] array, int start, int end) - { - StringBuilder b = new StringBuilder(); - for (int i = start; i < end; ++i) - { - b.append(array[i]); - b.append(','); - } - b.setLength(b.length() - 1); - return b.toString(); - } + public boolean hasNext() + { + return i < runData.getProfileMz().length; + } - private static void addCentroidsForRun(final Connection conn, final long fiaMsRunId, - FIAMSRunDataDTO runData) throws SQLException - { - try - { - final PreparedStatement prepCentroid = - conn.prepareStatement("INSERT INTO centroids (fiaMsRunId, mz, " - + "intensity, correlation) values (?, ?, ?, ?)"); - for (int i = 0; i < runData.getCentroidMz().length; ++i) - { - prepCentroid.setLong(1, fiaMsRunId); - prepCentroid.setFloat(2, runData.getCentroidMz()[i]); - prepCentroid.setFloat(3, runData.getCentroidIntensities()[i]); - prepCentroid.setFloat(4, runData.getCentroidCorrelations()[i]); - prepCentroid.addBatch(); - } - prepCentroid.executeBatch(); - } catch (BatchUpdateException ex) - { - throw ex.getNextException(); - } + public ProfileDTO next() + { + final int imax = + Math.min(runData.getProfileMz().length, i + + PROFILE_CHUNK_SIZE); + final int imin = i; + i = imax; + return ProfileDTO.split(runData.getProfileMz(), runData + .getProfileIntensities(), imin, imax); + } + + public void remove() + { + throw new UnsupportedOperationException(); + } + }; + } + }; } /** @@ -120,14 +91,11 @@ public class FIAML2Database public void observe(FIAMSRunDTO run, FIAMSRunDataDTO runData) { final long fiaMsRunId = dao.addMSRun(run); - try - { - addProfilesForRun(conn, fiaMsRunId, runData); - addCentroidsForRun(conn, fiaMsRunId, runData); - } catch (SQLException ex) - { - throw CheckedExceptionTunnel.wrapIfNecessary(ex); - } + getDAO(conn).addProfiles(fiaMsRunId, profileChunk(runData)); + getDAO(conn) + .addCentroids(fiaMsRunId, runData.getCentroidMz(), + runData.getCentroidIntensities(), + runData.getCentroidCorrelations()); } }); conn.commit(); @@ -147,7 +115,7 @@ public class FIAML2Database public static void main(String[] args) throws SQLException { final long start = System.currentTimeMillis(); - final Connection conn = DBFactory.getConnection(); + final Connection conn = new DBFactory(DBFactory.createDefaultDBContext()).getConnection(); try { final String dir = args[0]; diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/IFIAMSRunDAO.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/IFIAMSRunDAO.java index 796b8db17a2..a5359fdeac2 100644 --- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/IFIAMSRunDAO.java +++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/IFIAMSRunDAO.java @@ -44,12 +44,13 @@ public interface IFIAMSRunDAO extends BaseQuery + "?{1.internalStandard}, ?{1.od}, ?{1.operator}) returning fiaMsRunId") public long addMSRun(FIAMSRunDTO msRun); - // Too slow as eodsql 2.0 doesn't support batch updates. - @Update("INSERT INTO profiles (fiaMsRunId, mz, intensity) values (?{1}, ?{2}, ?{3})") - public void addProfileEntry(long fiaMsRunId, float mz, float intensity); + @Update(sql = "INSERT INTO centroids (fiaMsRunId, mz, intensity, correlation) " + + "values (?{1}, ?{2}, ?{3}, ?{4})", batchUpdate = true) + public void addCentroids(long fiaMsRunId, float[] mz, float[] intensity, float[] correlation); + + @Update(sql = "INSERT INTO profiles (fiaMsRunId, lowMz, highMz, mz, intensities) " + + "values (?{1}, ?{2.lowMz}, ?{2.highMz}, ?{2.mz}, ?{2.intensities})", batchUpdate = true, parameterTypes = + { Long.class, ProfileDTO.class }) + public void addProfiles(long fiaMsRunId, Iterable<ProfileDTO> profiles); - // Too slow as eodsql 2.0 doesn't support batch updates. - @Update("INSERT INTO centroids (fiaMsRunId, mz, intensity, correlation) " - + "values (?{1}, ?{2}, ?{3}, ?{4})") - public void addCentroidEntry(long fiaMsRunId, float mz, float intensity, float correlation); } diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/ProfileDTO.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/ProfileDTO.java new file mode 100644 index 00000000000..8d9a06abee7 --- /dev/null +++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/fiaml/ProfileDTO.java @@ -0,0 +1,87 @@ +/* + * Copyright 2009 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.yeastx.fiaml; + +/** + * A data transfer object for "mz over intensity" profiles. + * + * @author Bernd Rinn + */ +public class ProfileDTO +{ + private float lowMz; + + private float highMz; + + private float[] mz; + + private float[] intensities; + + public static ProfileDTO split(float[] mz, float[] intensities, int imin, int imax) + { + final ProfileDTO dto = new ProfileDTO(); + final float[] mzChunk = new float[imax - imin]; + System.arraycopy(mz, imin, mzChunk, 0, imax - imin); + dto.setMz(mzChunk); + dto.setLowMz(mzChunk[0]); + dto.setHighMz(mzChunk[mzChunk.length - 1]); + final float[] intChunk = new float[imax - imin]; + System.arraycopy(intensities, imin, intChunk, 0, imax - imin); + dto.setIntensities(intChunk); + return dto; + } + + public float getLowMz() + { + return lowMz; + } + + public void setLowMz(float lowMz) + { + this.lowMz = lowMz; + } + + public float getHighMz() + { + return highMz; + } + + public void setHighMz(float highMz) + { + this.highMz = highMz; + } + + public float[] getMz() + { + return mz; + } + + public void setMz(float[] mz) + { + this.mz = mz; + } + + public float[] getIntensities() + { + return intensities; + } + + public void setIntensities(float[] intensities) + { + this.intensities = intensities; + } +} \ No newline at end of file diff --git a/rtd_yeastx/source/sql/schema.sql b/rtd_yeastx/source/sql/postgresql/001/schema-001.sql similarity index 87% rename from rtd_yeastx/source/sql/schema.sql rename to rtd_yeastx/source/sql/postgresql/001/schema-001.sql index cd1301e9484..94f5cc3ec0c 100644 --- a/rtd_yeastx/source/sql/schema.sql +++ b/rtd_yeastx/source/sql/postgresql/001/schema-001.sql @@ -1,12 +1,6 @@ -CREATE DATABASE metabol ENCODING 'UTF8'; - -CREATE ROLE metabol_readonly; - -CREATE ROLE metabol_readwrite; - -GRANT metabol_readwrite to brinn; - -\c metabol +----------------------------------- +-- Version 001 +----------------------------------- CREATE TABLE eicmsruns ( eicMsRunId BIGSERIAL NOT NULL, @@ -66,26 +60,30 @@ CREATE TABLE fiamsruns ( ); CREATE TABLE profiles ( + profileId BIGSERIAL NOT NULL, fiaMsRunId BIGINT NOT NULL, lowMz REAL NOT NULL, highMz REAL NOT NULL, mz TEXT NOT NULL, intensities TEXT NOT NULL, - PRIMARY KEY (fiaMsRunId, lowMz), + PRIMARY KEY (profileId), CONSTRAINT FK_profiles_1 FOREIGN KEY (fiaMsRunId) REFERENCES fiamsruns (fiaMsRunId) ON DELETE CASCADE ON UPDATE CASCADE ); -CREATE INDEX profile_idx on profiles(fiaMsRunId, lowMz, highMz); +CREATE INDEX profile_i on profiles(fiaMsRunId, lowMz, highMz); CREATE TABLE centroids ( + centroidId BIGSERIAL NOT NULL, fiaMsRunId BIGINT NOT NULL, mz REAL NOT NULL, intensity REAL NOT NULL, correlation REAL NOT NULL, - PRIMARY KEY (fiaMsRunId, mz), + PRIMARY KEY (centroidId), CONSTRAINT FK_centroids_1 FOREIGN KEY (fiaMsRunId) REFERENCES fiamsruns (fiaMsRunId) ON DELETE CASCADE ON UPDATE CASCADE ); +CREATE INDEX centroid_i on centroids(fiaMsRunId, mz); + GRANT SELECT ON TABLE eicmsruns TO GROUP metabol_readonly; GRANT SELECT ON TABLE chromatograms TO GROUP metabol_readonly; GRANT SELECT ON TABLE fiamsruns TO GROUP metabol_readonly; @@ -103,3 +101,5 @@ GRANT ALL PRIVILEGES ON TABLE centroids TO GROUP metabol_readwrite; GRANT ALL PRIVILEGES ON SEQUENCE eicmsruns_eicmsrunid_seq TO GROUP metabol_readwrite; GRANT ALL PRIVILEGES ON SEQUENCE chromatograms_chromid_seq TO GROUP metabol_readwrite; GRANT ALL PRIVILEGES ON SEQUENCE fiamsruns_fiamsrunid_seq TO GROUP metabol_readwrite; +GRANT ALL PRIVILEGES ON SEQUENCE profiles_profileid_seq TO GROUP metabol_readwrite; +GRANT ALL PRIVILEGES ON SEQUENCE centroids_centroidid_seq TO GROUP metabol_readwrite; diff --git a/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/eicml/ReadChromatogramsPerformanceTest.java b/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/eicml/ReadChromatogramsPerformanceTest.java index 783a5c309bd..ba7fb6d009c 100644 --- a/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/eicml/ReadChromatogramsPerformanceTest.java +++ b/rtd_yeastx/sourceTest/java/ch/systemsx/cisd/yeastx/eicml/ReadChromatogramsPerformanceTest.java @@ -31,8 +31,8 @@ public class ReadChromatogramsPerformanceTest public static void main(String[] args) throws SQLException { + final Connection conn = new DBFactory(DBFactory.createDefaultDBContext()).getConnection(); long start = System.currentTimeMillis(); - final Connection conn = DBFactory.getConnection(); try { final IEICMSRunDAO dao = EICML2Database.getDAO(conn); -- GitLab