Package org.locationtech.geogig.test.performance

Source Code of org.locationtech.geogig.test.performance.RevTreeBuilderPerformanceTest

/* Copyright (c) 2013-2014 Boundless and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Distribution License v1.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/edl-v10.html
*
* Contributors:
* Gabriel Roldan (Boundless) - initial implementation
*/
package org.locationtech.geogig.test.performance;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;
import org.locationtech.geogig.api.Node;
import org.locationtech.geogig.api.ObjectId;
import org.locationtech.geogig.api.RevObject.TYPE;
import org.locationtech.geogig.api.RevTreeBuilder;
import org.locationtech.geogig.storage.NodeStorageOrder;
import org.locationtech.geogig.storage.ObjectDatabase;
import org.locationtech.geogig.test.integration.RepositoryTestCase;

import com.google.common.base.Stopwatch;
import com.google.common.collect.AbstractIterator;
import com.google.common.collect.Iterators;
import com.google.common.collect.UnmodifiableIterator;
import com.vividsolutions.jts.geom.Envelope;

public class RevTreeBuilderPerformanceTest extends RepositoryTestCase {

    private ObjectDatabase odb;

    private static final ObjectId FAKE_ID = ObjectId.forString("fake");

    private static final int numNodes = 512 * 32;

    private static Iterable<Node> nodes;

    // private static List<Node> sortedNodes;

    @BeforeClass
    public static void beforeClass() {
        // nodes = createNodes(numNodes);
        nodes = new Iterable<Node>() {
            @Override
            public Iterator<Node> iterator() {
                return new AbstractIterator<Node>() {
                    int count = 0;

                    @Override
                    protected Node computeNext() {
                        count++;
                        if (count > numNodes) {
                            return endOfData();
                        }
                        return createNode(count);
                    }
                };
            }
        };
        // sortedNodes = new ArrayList<Node>(nodes);
        //
        // System.err.printf("Sorting %d nodes...", numNodes);
        // Stopwatch s = new Stopwatch().start();
        // Collections.sort(sortedNodes, new NodeStorageOrder());
        // s.stop();
        // System.err.printf("done in %s\n", s);
    }

    @Override
    protected void setUpInternal() throws Exception {
        odb = repo.objectDatabase();
    }

    @Test
    public void testInsertUnordered() {
        System.err.println("testInsertUnordered...");
        createTree(nodes, new RevTreeBuilder(odb), true);
        // createTree(nodes, new RevTreeBuilder(odb), true);
    }

    // @Test
    // public void testInsertOrdered() {
    // System.err.println("testInsertOrdered...");
    // createTree(sortedNodes, new RevTreeBuilder(odb), true);
    // // createTree(sortedNodes, new RevTreeBuilder(odb), true);
    // }

    @Test
    public void testInsertOrderedPartitioned10K() {
        System.err.println("testInsertOrderedPartitioned10K...");
        final int partitionSize = 10 * 1000;
        testInsertPartitioned(partitionSize);
    }

    @Test
    public void testInsertOrderedPartitioned50K() {
        System.err.println("testInsertOrderedPartitioned50K...");
        final int partitionSize = 50 * 1000;
        testInsertPartitioned(partitionSize);
    }

    @Test
    public void testInsertOrderedPartitioned100K() {
        System.err.println("testInsertOrderedPartitioned100K...");
        final int partitionSize = 100 * 1000;
        testInsertPartitioned(partitionSize);
    }

    @Test
    public void testInsertOrderedPartitioned500K() {
        System.err.println("testInsertOrderedPartitioned500K...");
        final int partitionSize = 500 * 1000;
        testInsertPartitioned(partitionSize);
    }

    private void testInsertPartitioned(int partitionSize) {
        UnmodifiableIterator<List<Node>> partitions = Iterators.partition(nodes.iterator(),
                partitionSize);

        RevTreeBuilder builder = new RevTreeBuilder(odb);
        Stopwatch sw = Stopwatch.createStarted();
        while (partitions.hasNext()) {
            List<Node> partition = new ArrayList<Node>(partitions.next());
            Collections.sort(partition, new NodeStorageOrder());
            createTree(partition, builder, false);
        }
        System.err.println("Calling RevTreeBuilder.build()...");
        builder.build();
        sw.stop();
        System.err.printf("-- Created tree with %d sorted partitioned size in %s\n", partitionSize,
                sw);
    }

    private static Node createNode(int i) {
        byte[] rawID = FAKE_ID.getRawValue();
        String key = "Feature." + i;
        ObjectId id = new ObjectId(rawID);
        Envelope env = new Envelope(0, 0, i, i);
        Node ref = Node.create(key, id, FAKE_ID, TYPE.FEATURE, env);
        return ref;
    }

    private RevTreeBuilder createTree(final Iterable<Node> nodes, final RevTreeBuilder b,
            final boolean buildTree) {
        if (buildTree) {
            System.err.printf("Creating treee with %d nodes...", numNodes);
        }
        Stopwatch sw = Stopwatch.createStarted();
        for (Node n : nodes) {
            b.put(n);
        }
        sw.stop();
        if (buildTree) {
            System.err.printf("Created in %s\n", sw);
        }
        return b;
    }

}
TOP

Related Classes of org.locationtech.geogig.test.performance.RevTreeBuilderPerformanceTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.