Search in sources :

Example 1 with DoubleLongRegister

use of org.neo4j.register.Register.DoubleLongRegister in project neo4j by neo4j.

the class IndexingService method indexUpdatesAndSize.

public DoubleLongRegister indexUpdatesAndSize(LabelSchemaDescriptor descriptor) throws IndexNotFoundKernelException {
    final long indexId = indexMapRef.getOnlineIndexId(descriptor);
    final DoubleLongRegister output = Registers.newDoubleLongRegister();
    storeView.indexUpdatesAndSize(indexId, output);
    return output;
}
Also used : DoubleLongRegister(org.neo4j.register.Register.DoubleLongRegister)

Example 2 with DoubleLongRegister

use of org.neo4j.register.Register.DoubleLongRegister in project neo4j by neo4j.

the class IndexingService method indexUniqueValuesPercentage.

public double indexUniqueValuesPercentage(LabelSchemaDescriptor descriptor) throws IndexNotFoundKernelException {
    final long indexId = indexMapRef.getOnlineIndexId(descriptor);
    final DoubleLongRegister output = Registers.newDoubleLongRegister();
    storeView.indexSample(indexId, output);
    long unique = output.readFirst();
    long size = output.readSecond();
    if (size == 0) {
        return 1.0d;
    } else {
        return ((double) unique) / ((double) size);
    }
}
Also used : DoubleLongRegister(org.neo4j.register.Register.DoubleLongRegister)

Example 3 with DoubleLongRegister

use of org.neo4j.register.Register.DoubleLongRegister in project neo4j by neo4j.

the class IndexSamplingIntegrationTest method shouldSampleNotUniqueIndex.

@Test
public void shouldSampleNotUniqueIndex() throws Throwable {
    GraphDatabaseService db = null;
    long deletedNodes = 0;
    try {
        // Given
        db = new TestGraphDatabaseFactory().newEmbeddedDatabase(testDirectory.graphDbDir());
        IndexDefinition indexDefinition;
        try (Transaction tx = db.beginTx()) {
            indexDefinition = db.schema().indexFor(label).on(property).create();
            tx.success();
        }
        try (Transaction tx = db.beginTx()) {
            db.schema().awaitIndexOnline(indexDefinition, 10, TimeUnit.SECONDS);
            tx.success();
        }
        try (Transaction tx = db.beginTx()) {
            for (int i = 0; i < nodes; i++) {
                db.createNode(label).setProperty(property, names[i % names.length]);
                tx.success();
            }
        }
        try (Transaction tx = db.beginTx()) {
            for (int i = 0; i < (nodes / 10); i++) {
                db.findNodes(label, property, names[i % names.length]).next().delete();
                deletedNodes++;
                tx.success();
            }
        }
    } finally {
        if (db != null) {
            db.shutdown();
        }
    }
    // When
    triggerIndexResamplingOnNextStartup();
    // Then
    // sampling will consider also the delete nodes till the next lucene compaction
    DoubleLongRegister register = fetchIndexSamplingValues(db);
    assertEquals(names.length, register.readFirst());
    assertEquals(nodes, register.readSecond());
    // but the deleted nodes should not be considered in the index size value
    DoubleLongRegister indexSizeRegister = fetchIndexSizeValues(db);
    assertEquals(0, indexSizeRegister.readFirst());
    assertEquals(nodes - deletedNodes, indexSizeRegister.readSecond());
}
Also used : GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) IndexDefinition(org.neo4j.graphdb.schema.IndexDefinition) Transaction(org.neo4j.graphdb.Transaction) DoubleLongRegister(org.neo4j.register.Register.DoubleLongRegister) TestGraphDatabaseFactory(org.neo4j.test.TestGraphDatabaseFactory) Test(org.junit.Test)

Example 4 with DoubleLongRegister

use of org.neo4j.register.Register.DoubleLongRegister in project neo4j by neo4j.

the class CountsRecordState method counts.

private DoubleLongRegister counts(CountsKey key) {
    DoubleLongRegister count = counts.get(key);
    if (count == null) {
        count = Registers.newDoubleLongRegister(DEFAULT_FIRST_VALUE, DEFAULT_SECOND_VALUE);
        counts.put(key, count);
    }
    return count;
}
Also used : DoubleLongRegister(org.neo4j.register.Register.DoubleLongRegister)

Example 5 with DoubleLongRegister

use of org.neo4j.register.Register.DoubleLongRegister in project neo4j by neo4j.

the class CountsRecordState method accept.

@Override
public void accept(CountsVisitor visitor) {
    for (Map.Entry<CountsKey, DoubleLongRegister> entry : counts.entrySet()) {
        DoubleLongRegister register = entry.getValue();
        entry.getKey().accept(visitor, register.readFirst(), register.readSecond());
    }
}
Also used : DoubleLongRegister(org.neo4j.register.Register.DoubleLongRegister) CountsKey(org.neo4j.kernel.impl.store.counts.keys.CountsKey) HashMap(java.util.HashMap) Map(java.util.Map)

Aggregations

DoubleLongRegister (org.neo4j.register.Register.DoubleLongRegister)7 Test (org.junit.Test)2 GraphDatabaseService (org.neo4j.graphdb.GraphDatabaseService)2 Transaction (org.neo4j.graphdb.Transaction)2 TestGraphDatabaseFactory (org.neo4j.test.TestGraphDatabaseFactory)2 HashMap (java.util.HashMap)1 Map (java.util.Map)1 IndexDefinition (org.neo4j.graphdb.schema.IndexDefinition)1 KernelAPI (org.neo4j.kernel.api.KernelAPI)1 KernelTransaction (org.neo4j.kernel.api.KernelTransaction)1 Statement (org.neo4j.kernel.api.Statement)1 NewIndexDescriptor (org.neo4j.kernel.api.schema_new.index.NewIndexDescriptor)1 CountsKey (org.neo4j.kernel.impl.store.counts.keys.CountsKey)1