Skip to content

Instantly share code, notes, and snippets.

@komamitsu
Last active March 25, 2018 16:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save komamitsu/0d67813f20904bd05dc93cf036cd5ab5 to your computer and use it in GitHub Desktop.
Save komamitsu/0d67813f20904bd05dc93cf036cd5ab5 to your computer and use it in GitHub Desktop.
Performance and memory footprint comparison for set collections
package org.komamitsu.test;
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
import it.unimi.dsi.fastutil.objects.ObjectSets;
import org.eclipse.collections.api.factory.set.MutableSetFactory;
import org.eclipse.collections.api.set.MutableSet;
import org.eclipse.collections.impl.set.mutable.UnifiedSet;
import org.trie4j.doublearray.DoubleArray;
import org.trie4j.patricia.PatriciaTrie;
import java.io.IOException;
import java.util.HashSet;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
public class Test
{
public static void main(String[] args)
throws IOException, InterruptedException
{
// Duration(construct): 2535
// Duration(search): 13376
int COUNT = 350000;
long start = System.currentTimeMillis();
HashSet<String> strings = new HashSet<>(COUNT);
for (int i = 0; i < COUNT; i++) {
strings.add(UUID.randomUUID().toString());
}
System.out.println("Duration(construct): " + (System.currentTimeMillis() - start));
System.gc();
TimeUnit.SECONDS.sleep(5);
start = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
strings.contains(UUID.randomUUID().toString());
}
System.out.println("Duration(search): " + (System.currentTimeMillis() - start));
/*
// Duration(construct): 4370
// Duration(search): 87453
int COUNT = 470000;
long start = System.currentTimeMillis();
ObjectOpenHashSet<String> strings = new ObjectOpenHashSet<>();
for (int i = 0; i < COUNT; i++) {
strings.add(UUID.randomUUID().toString());
}
System.out.println("Duration(construct): " + (System.currentTimeMillis() - start));
System.gc();
TimeUnit.SECONDS.sleep(5);
start = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
strings.contains(UUID.randomUUID().toString());
}
System.out.println("Duration(search): " + (System.currentTimeMillis() - start));
*/
/*
// Duration(construct): 3047
// Duration(search): 9872
int COUNT = 420000;
long start = System.currentTimeMillis();
UnifiedSet<String> strings = new UnifiedSet<>(COUNT);
for (int i = 0; i < COUNT; i++) {
strings.add(UUID.randomUUID().toString());
}
System.out.println("Duration(construct): " + (System.currentTimeMillis() - start));
System.gc();
TimeUnit.SECONDS.sleep(5);
start = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
strings.contains(UUID.randomUUID().toString());
}
System.out.println("Duration(search): " + (System.currentTimeMillis() - start));
*/
/*
// Duration(construct): 8981
// Duration(search): 10745
int COUNT = 440000;
long start = System.currentTimeMillis();
PatriciaTrie strings = new PatriciaTrie();
for (int i = 0; i < COUNT; i++) {
strings.insert(UUID.randomUUID().toString());
}
System.out.println("Duration(construct): " + (System.currentTimeMillis() - start));
System.gc();
TimeUnit.SECONDS.sleep(5);
start = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
strings.contains(UUID.randomUUID().toString());
}
System.out.println("Duration(search): " + (System.currentTimeMillis() - start));
*/
// First try
// Duration(construct): 15169
// Duration(search): 5085
// Load from file
// Duration(search): 12500
int COUNT = 800000;
RocksDB.loadLibrary();
try (final Options options = new Options().setCreateIfMissing(true)) {
// a factory method that returns a RocksDB instance
try (final RocksDB db = RocksDB.open(options, "/Users/komamitsu/tmp/test.db")) {
long start = System.currentTimeMillis();
byte[] exists = new byte[] { 1 };
for (int i = 0; i < COUNT; i++) {
db.put(UUID.randomUUID().toString().getBytes(Charset.defaultCharset()), exists);
}
System.out.println("Duration(construct): " + (System.currentTimeMillis() - start));
System.gc();
TimeUnit.SECONDS.sleep(5);
start = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
db.get(UUID.randomUUID().toString().getBytes(Charset.defaultCharset()));
}
System.out.println("Duration(search): " + (System.currentTimeMillis() - start));
}
} catch (RocksDBException e) {
throw new RuntimeException(e);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment