Search in sources :

Example 1 with CompoundIndexStrategy

use of org.locationtech.geowave.core.index.CompoundIndexStrategy in project geowave by locationtech.

the class CompoundHierarchicalIndexStrategyWrapper method fromBinary.

@Override
public void fromBinary(final byte[] bytes) {
    final CompoundIndexStrategy rootStrategy = (CompoundIndexStrategy) PersistenceUtils.fromBinary(bytes);
    parentStrategies = new ArrayList<>();
    // discover hierarchy
    firstHierarchicalStrategy = findHierarchicalStrategy(rootStrategy, parentStrategies);
}
Also used : CompoundIndexStrategy(org.locationtech.geowave.core.index.CompoundIndexStrategy)

Example 2 with CompoundIndexStrategy

use of org.locationtech.geowave.core.index.CompoundIndexStrategy in project geowave by locationtech.

the class CompoundHierarchicalIndexStrategyWrapper method getSubStrategies.

@Override
public SubStrategy[] getSubStrategies() {
    // for these substrategies we need to replace the last parent strategy's
    // hierarchical index strategy with the underlying substrategy index
    // strategy
    final SubStrategy[] subStrategies = firstHierarchicalStrategy.getSubStrategies();
    final SubStrategy[] retVal = new SubStrategy[subStrategies.length];
    for (int i = 0; i < subStrategies.length; i++) {
        NumericIndexStrategy currentStrategyToBeReplaced = firstHierarchicalStrategy;
        NumericIndexStrategy currentStrategyReplacement = subStrategies[i].getIndexStrategy();
        for (int j = parentStrategies.size() - 1; j >= 0; j--) {
            // traverse parents in reverse order
            final CompoundIndexStrategy parent = parentStrategies.get(j);
            if (parent.getPrimarySubStrategy().equals(currentStrategyToBeReplaced)) {
                // replace primary
                currentStrategyReplacement = new CompoundIndexStrategy(currentStrategyReplacement, parent.getSecondarySubStrategy());
            } else {
                // replace secondary
                currentStrategyReplacement = new CompoundIndexStrategy(parent.getPrimarySubStrategy(), currentStrategyReplacement);
            }
            currentStrategyToBeReplaced = parent;
        }
        retVal[i] = new SubStrategy(currentStrategyReplacement, subStrategies[i].getPrefix());
    }
    return retVal;
}
Also used : CompoundIndexStrategy(org.locationtech.geowave.core.index.CompoundIndexStrategy) HierarchicalNumericIndexStrategy(org.locationtech.geowave.core.index.HierarchicalNumericIndexStrategy) NumericIndexStrategy(org.locationtech.geowave.core.index.NumericIndexStrategy)

Example 3 with CompoundIndexStrategy

use of org.locationtech.geowave.core.index.CompoundIndexStrategy in project geowave by locationtech.

the class HashKeyIndexStrategyTest method testBinaryEncoding.

@Test
public void testBinaryEncoding() {
    final byte[] bytes = PersistenceUtils.toBinary(compoundIndexStrategy);
    final CompoundIndexStrategy deserializedStrategy = (CompoundIndexStrategy) PersistenceUtils.fromBinary(bytes);
    final byte[] bytes2 = PersistenceUtils.toBinary(deserializedStrategy);
    Assert.assertArrayEquals(bytes, bytes2);
}
Also used : CompoundIndexStrategy(org.locationtech.geowave.core.index.CompoundIndexStrategy) Test(org.junit.Test)

Example 4 with CompoundIndexStrategy

use of org.locationtech.geowave.core.index.CompoundIndexStrategy in project geowave by locationtech.

the class RoundRobinKeyIndexStrategyTest method testBinaryEncoding.

@Test
public void testBinaryEncoding() {
    final byte[] bytes = PersistenceUtils.toBinary(compoundIndexStrategy);
    final CompoundIndexStrategy deserializedStrategy = (CompoundIndexStrategy) PersistenceUtils.fromBinary(bytes);
    final byte[] bytes2 = PersistenceUtils.toBinary(deserializedStrategy);
    Assert.assertArrayEquals(bytes, bytes2);
}
Also used : CompoundIndexStrategy(org.locationtech.geowave.core.index.CompoundIndexStrategy) Test(org.junit.Test)

Example 5 with CompoundIndexStrategy

use of org.locationtech.geowave.core.index.CompoundIndexStrategy in project geowave by locationtech.

the class RocksDBLockfileTest method testLockfile.

private void testLockfile(final int numThreads, final boolean secondaryIndexing) {
    final RocksDBOptions options = new RocksDBOptions();
    options.setDirectory(DEFAULT_DB_DIRECTORY);
    options.getStoreOptions().setSecondaryIndexing(secondaryIndexing);
    final DataStore store = new RocksDBStoreFactoryFamily().getDataStoreFactory().createStore(options);
    store.deleteAll();
    store.addType(BasicDataTypeAdapter.newAdapter(POI_TYPE_NAME, POI.class, "name"));
    Index index = AttributeDimensionalityTypeProvider.createIndexFromOptions(store, new AttributeIndexOptions(POI_TYPE_NAME, "latitude"));
    index = new CustomNameIndex(new CompoundIndexStrategy(new RoundRobinKeyIndexStrategy(32), index.getIndexStrategy()), index.getIndexModel(), index.getName() + "_" + PartitionStrategy.ROUND_ROBIN.name() + "_" + 32);
    final Index latAttributeIndex = new IndexWrapper(index);
    store.addIndex(POI_TYPE_NAME, latAttributeIndex);
    final DataStore store2 = new RocksDBStoreFactoryFamily().getDataStoreFactory().createStore(options);
    IntStream.range(0, numThreads).mapToObj(i -> CompletableFuture.runAsync(() -> {
        double offset = i * numThreads;
        try (Writer<POI> w = store.createWriter(POI_TYPE_NAME)) {
            w.write(new POI("name" + offset, offset, offset));
        }
        try (CloseableIterator<POI> poiIt = store2.query(QueryBuilder.newBuilder(POI.class).build())) {
            if (numThreads == 1) {
                Assert.assertEquals(1, Iterators.size(poiIt));
            } else {
                Assert.assertTrue(Iterators.size(poiIt) >= 1);
            }
        }
        offset++;
        try (Writer<POI> w = store2.createWriter(POI_TYPE_NAME)) {
            w.write(new POI("name" + offset, offset, offset));
        }
        try (CloseableIterator<POI> poiIt = store.query(QueryBuilder.newBuilder(POI.class).build())) {
            if (numThreads == 1) {
                Assert.assertEquals(2, Iterators.size(poiIt));
            } else {
                Assert.assertTrue(Iterators.size(poiIt) >= 2);
            }
        }
        offset++;
        try (Writer<POI> w = store2.createWriter(POI_TYPE_NAME)) {
            w.write(new POI("name" + offset, offset, offset));
            try (CloseableIterator<POI> poiIt = store.query(QueryBuilder.newBuilder(POI.class).build())) {
                if (numThreads == 1) {
                    Assert.assertEquals(2, Iterators.size(poiIt));
                } else {
                    Assert.assertTrue(Iterators.size(poiIt) >= 2);
                }
            }
            w.flush();
            try (CloseableIterator<POI> poiIt = store.query(QueryBuilder.newBuilder(POI.class).build())) {
                if (numThreads == 1) {
                    Assert.assertEquals(3, Iterators.size(poiIt));
                } else {
                    Assert.assertTrue(Iterators.size(poiIt) >= 3);
                }
            }
        }
        try (CloseableIterator<POI> poiIt = store2.query(QueryBuilder.newBuilder(POI.class).build())) {
            if (numThreads == 1) {
                Assert.assertEquals(3, Iterators.size(poiIt));
            } else {
                Assert.assertTrue(Iterators.size(poiIt) >= 3);
            }
        }
    }));
    store.deleteAll();
}
Also used : CloseableIterator(org.locationtech.geowave.core.store.CloseableIterator) AttributeIndexOptions(org.locationtech.geowave.core.store.index.AttributeIndexOptions) CompoundIndexStrategy(org.locationtech.geowave.core.index.CompoundIndexStrategy) DataStore(org.locationtech.geowave.core.store.api.DataStore) CustomNameIndex(org.locationtech.geowave.core.store.index.CustomNameIndex) Index(org.locationtech.geowave.core.store.api.Index) RoundRobinKeyIndexStrategy(org.locationtech.geowave.core.index.simple.RoundRobinKeyIndexStrategy) RocksDBOptions(org.locationtech.geowave.datastore.rocksdb.config.RocksDBOptions) CustomNameIndex(org.locationtech.geowave.core.store.index.CustomNameIndex) Writer(org.locationtech.geowave.core.store.api.Writer)

Aggregations

CompoundIndexStrategy (org.locationtech.geowave.core.index.CompoundIndexStrategy)7 HierarchicalNumericIndexStrategy (org.locationtech.geowave.core.index.HierarchicalNumericIndexStrategy)3 Test (org.junit.Test)2 NumericIndexStrategy (org.locationtech.geowave.core.index.NumericIndexStrategy)2 RoundRobinKeyIndexStrategy (org.locationtech.geowave.core.index.simple.RoundRobinKeyIndexStrategy)2 ArrayList (java.util.ArrayList)1 MultiDimensionalNumericData (org.locationtech.geowave.core.index.numeric.MultiDimensionalNumericData)1 CloseableIterator (org.locationtech.geowave.core.store.CloseableIterator)1 DataStore (org.locationtech.geowave.core.store.api.DataStore)1 Index (org.locationtech.geowave.core.store.api.Index)1 Writer (org.locationtech.geowave.core.store.api.Writer)1 AttributeIndexOptions (org.locationtech.geowave.core.store.index.AttributeIndexOptions)1 CustomNameIndex (org.locationtech.geowave.core.store.index.CustomNameIndex)1 RocksDBOptions (org.locationtech.geowave.datastore.rocksdb.config.RocksDBOptions)1