diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java | 66 |
1 files changed, 36 insertions, 30 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java b/src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java index c2d66f5c..7916c75f 100644 --- a/src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java +++ b/src/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.database; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -43,9 +43,9 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.ObjectBundle; import de.lmu.ifi.dbs.elki.index.Index; import de.lmu.ifi.dbs.elki.index.IndexFactory; import de.lmu.ifi.dbs.elki.logging.Logging; +import de.lmu.ifi.dbs.elki.logging.statistics.Duration; import de.lmu.ifi.dbs.elki.utilities.documentation.Description; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; import de.lmu.ifi.dbs.elki.utilities.optionhandling.Parameterizable; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectListParameter; @@ -98,7 +98,7 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz this.idrep = null; // Add indexes. - if(indexFactories != null) { + if (indexFactories != null) { this.indexFactories.addAll(indexFactories); } } @@ -116,8 +116,8 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz */ @Override public void initialize() { - if(databaseConnection != null) { - if(LOG.isDebugging()) { + if (databaseConnection != null) { + if (LOG.isDebugging()) { LOG.debugFine("Loading data from database connection."); } MultipleObjectsBundle objpackages = databaseConnection.loadData(); @@ -127,12 +127,11 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz // Find DBID column int idrepnr = findDBIDColumn(objpackages); // Build DBID array - if(idrepnr == -1) { + if (idrepnr == -1) { this.ids = DBIDUtil.generateStaticDBIDRange(objpackages.dataLength()); - } - else { + } else { final ArrayModifiableDBIDs newids = DBIDUtil.newArray(objpackages.dataLength()); - for(int j = 0; j < objpackages.dataLength(); j++) { + for (int j = 0; j < objpackages.dataLength(); j++) { DBID newid = (DBID) objpackages.data(j, idrepnr); newids.add(newid); } @@ -148,11 +147,11 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz Relation<?>[] targets = alignColumns(objpackages); DBIDIter newid = ids.iter(); - for(int j = 0; j < objpackages.dataLength(); j++, newid.advance()) { + for (int j = 0; j < objpackages.dataLength(); j++, newid.advance()) { // insert object - for(int i = 0; i < targets.length; i++) { + for (int i = 0; i < targets.length; i++) { // DBIDs were handled above. - if(i == idrepnr) { + if (i == idrepnr) { continue; } @SuppressWarnings("unchecked") @@ -161,18 +160,26 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz } } - for(Relation<?> relation : relations) { + for (Relation<?> relation : relations) { SimpleTypeInformation<?> meta = relation.getDataTypeInformation(); // Try to add indexes where appropriate - for(IndexFactory<?, ?> factory : indexFactories) { - if(factory.getInputTypeRestriction().isAssignableFromType(meta)) { + for (IndexFactory<?, ?> factory : indexFactories) { + if (factory.getInputTypeRestriction().isAssignableFromType(meta)) { @SuppressWarnings("unchecked") final IndexFactory<Object, ?> ofact = (IndexFactory<Object, ?>) factory; @SuppressWarnings("unchecked") final Relation<Object> orep = (Relation<Object>) relation; final Index index = ofact.instantiate(orep); + Duration duration = LOG.isStatistics() ? LOG.newDuration(index.getClass().getName() + ".construction") : null; + if (duration != null) { + duration.begin(); + } + index.initialize(); + if (duration != null) { + duration.end(); + LOG.statistics(duration); + } addIndex(index); - index.insertAll(ids); } } } @@ -184,7 +191,7 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz @Override public void addIndex(Index index) { - if(LOG.isDebuggingFiner()) { + if (LOG.isDebuggingFiner()) { LOG.debugFine("Adding index: " + index); } this.indexes.add(index); @@ -192,7 +199,6 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz this.addChildResult(index); } - /** * Find an DBID column. * @@ -200,9 +206,9 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz * @return DBID column */ protected int findDBIDColumn(ObjectBundle pack) { - for(int i = 0; i < pack.metaLength(); i++) { + for (int i = 0; i < pack.metaLength(); i++) { SimpleTypeInformation<?> meta = pack.meta(i); - if(TypeUtil.DBID.isAssignableFromType(meta)) { + if (TypeUtil.DBID.isAssignableFromType(meta)) { return i; } } @@ -220,19 +226,19 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz // align representations. Relation<?>[] targets = new Relation<?>[pack.metaLength()]; BitSet used = new BitSet(relations.size()); - for(int i = 0; i < targets.length; i++) { + for (int i = 0; i < targets.length; i++) { SimpleTypeInformation<?> meta = pack.meta(i); // TODO: aggressively try to match exact metas first? // Try to match unused representations only - for(int j = used.nextClearBit(0); j >= 0 && j < relations.size(); j = used.nextClearBit(j + 1)) { + for (int j = used.nextClearBit(0); j >= 0 && j < relations.size(); j = used.nextClearBit(j + 1)) { Relation<?> relation = relations.get(j); - if(relation.getDataTypeInformation().isAssignableFromType(meta)) { + if (relation.getDataTypeInformation().isAssignableFromType(meta)) { targets[i] = relation; used.set(j); break; } } - if(targets[i] == null) { + if (targets[i] == null) { targets[i] = addNewRelation(meta); used.set(relations.size() - 1); } @@ -249,7 +255,7 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz private Relation<?> addNewRelation(SimpleTypeInformation<?> meta) { @SuppressWarnings("unchecked") SimpleTypeInformation<Object> ometa = (SimpleTypeInformation<Object>) meta; - Relation<?> relation = new MaterializedRelation<Object>(this, ometa, ids); + Relation<?> relation = new MaterializedRelation<>(this, ometa, ids); relations.add(relation); getHierarchy().add(this, relation); return relation; @@ -282,13 +288,13 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz protected void makeOptions(Parameterization config) { super.makeOptions(config); // Get database connection. - final ObjectParameter<DatabaseConnection> dbcP = new ObjectParameter<DatabaseConnection>(OptionID.DATABASE_CONNECTION, DatabaseConnection.class, FileBasedDatabaseConnection.class); - if(config.grab(dbcP)) { + final ObjectParameter<DatabaseConnection> dbcP = new ObjectParameter<>(Database.DATABASE_CONNECTION_ID, DatabaseConnection.class, FileBasedDatabaseConnection.class); + if (config.grab(dbcP)) { databaseConnection = dbcP.instantiateClass(config); } // Get indexes. - final ObjectListParameter<IndexFactory<?, ?>> indexFactoryP = new ObjectListParameter<IndexFactory<?, ?>>(INDEX_ID, IndexFactory.class, true); - if(config.grab(indexFactoryP)) { + final ObjectListParameter<IndexFactory<?, ?>> indexFactoryP = new ObjectListParameter<>(INDEX_ID, IndexFactory.class, true); + if (config.grab(indexFactoryP)) { indexFactories = indexFactoryP.instantiateClasses(config); } } @@ -298,4 +304,4 @@ public class StaticArrayDatabase extends AbstractDatabase implements Parameteriz return new StaticArrayDatabase(databaseConnection, indexFactories); } } -}
\ No newline at end of file +} |