diff --git a/.gitmodules b/.gitmodules
index 6660f3f7..2fb5f51a 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,3 @@
[submodule "src/test/resources/maxmind-db"]
- path = src/test/resources/maxmind-db
+ path = reader/src/test/resources/maxmind-db
url = https://github.com/maxmind/MaxMind-DB
diff --git a/README.md b/README.md
index 8e8c4532..8008aa8a 100644
--- a/README.md
+++ b/README.md
@@ -188,6 +188,18 @@ Maven, you must
Failure to do so will result in `InvalidDatabaseException` exceptions being
thrown when querying the database.
+## Benchmarking ##
+
+Set an environment variable `GEO_LITE` with the path to `GeoLite2-City.mmdb`.
+
+```shell
+mvn -Dcheckstyle.skip -DskipTests clean package
+GEO_LITE=/.../GeoLite2-City.mmdb java -jar benchmarks/target/microbenchmarks.jar
+```
+
+For more, see [https://github.com/openjdk/jmh](https://github.com/openjdk/jmh) or
+`java -jar benchmarks/target/microbenchmarks.jar -h`.
+
## Format ##
The MaxMind DB format is an open format for quickly mapping IP addresses to
diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
new file mode 100644
index 00000000..5941ee97
--- /dev/null
+++ b/benchmarks/pom.xml
@@ -0,0 +1,73 @@
+
+
+ 4.0.0
+ com.maxmind.db
+ benchmarks
+ 3.1.2-SNAPSHOT
+ jar
+
+ 1.37
+
+
+
+ com.maxmind.db
+ maxmind-db
+ 3.1.2-SNAPSHOT
+
+
+ org.openjdk.jmh
+ jmh-core
+ ${jmhVersion}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.13.0
+
+ 11
+ 11
+ 11
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ ${jmhVersion}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.6.0
+
+
+ package
+
+ shade
+
+
+ microbenchmarks
+
+
+ org.openjdk.jmh.Main
+
+
+
+
+ *:*
+
+ META-INF/services/javax.annotation.processing.Processor
+
+
+
+
+
+
+
+
+
+
diff --git a/benchmarks/src/main/java/com/maxmind/db/BenchmarkGet.java b/benchmarks/src/main/java/com/maxmind/db/BenchmarkGet.java
new file mode 100644
index 00000000..23db99d8
--- /dev/null
+++ b/benchmarks/src/main/java/com/maxmind/db/BenchmarkGet.java
@@ -0,0 +1,71 @@
+package com.maxmind.db;
+
+import com.maxmind.db.Reader.FileMode;
+import java.io.File;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OperationsPerInvocation;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.Warmup;
+import org.openjdk.jmh.infra.Blackhole;
+
+@State(Scope.Benchmark)
+@Warmup(iterations = 3, time = 5)
+@Measurement(iterations = 10, time = 5)
+@Fork(1)
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.NANOSECONDS)
+public class BenchmarkGet {
+ private static final int COUNT = 1_000_000;
+
+ private static InetAddress[] getInetAddresses(final int seed) throws UnknownHostException {
+ final InetAddress[] addresses = new InetAddress[COUNT];
+ final Random random = new Random(seed);
+ final byte[] address = new byte[4];
+ for (int addressIx = 0; addressIx < COUNT; addressIx++) {
+ random.nextBytes(address);
+ addresses[addressIx] = InetAddress.getByAddress(address);
+ }
+ return addresses;
+ }
+
+ InetAddress[] addresses;
+ Reader reader;
+ Reader cachedReader;
+
+ @Setup
+ public void setup() throws IOException {
+ addresses = getInetAddresses(0);
+ final File database = new File(System.getenv("GEO_LITE"));
+ reader = new Reader(database, FileMode.MEMORY_MAPPED, NoCache.getInstance());
+ cachedReader = new Reader(database, FileMode.MEMORY_MAPPED, new CHMCache());
+ }
+
+ @Benchmark
+ @OperationsPerInvocation(COUNT)
+ public void withoutCaching(Blackhole bh) throws IOException {
+ for (InetAddress address: addresses) {
+ bh.consume(reader.get(address, Map.class));
+ }
+ }
+
+ @Benchmark
+ @OperationsPerInvocation(COUNT)
+ public void withCaching(Blackhole bh) throws IOException {
+ for (InetAddress address: addresses) {
+ bh.consume(cachedReader.get(address, Map.class));
+ }
+ }
+}
diff --git a/dev-bin/release.sh b/dev-bin/release.sh
index 497c346e..38ccd69f 100755
--- a/dev-bin/release.sh
+++ b/dev-bin/release.sh
@@ -97,11 +97,11 @@ fi
# could be combined with the primary build
-mvn release:clean
-mvn release:prepare -DreleaseVersion="$version" -Dtag="$tag"
-mvn release:perform
+mvn -pl reader release:clean
+mvn -pl reader release:prepare -DreleaseVersion="$version" -Dtag="$tag"
+mvn -pl reader release:perform
rm -fr ".gh-pages/doc/$tag"
-cp -r target/checkout/target/reports/apidocs ".gh-pages/doc/$tag"
+cp -r reader/target/checkout/target/reports/apidocs ".gh-pages/doc/$tag"
rm .gh-pages/doc/latest
ln -fs "$tag" .gh-pages/doc/latest
diff --git a/pom.xml b/pom.xml
index f71271c2..8b7d95bc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,237 +1,18 @@
- 4.0.0
- com.maxmind.db
- maxmind-db
- 3.1.2-SNAPSHOT
- jar
- MaxMind DB Reader
- Reader for MaxMind DB
- http://dev.maxmind.com/
-
-
- Apache License 2.0
- http://www.apache.org/licenses/LICENSE-2.0.html
- repo
-
-
-
- MaxMind, Inc.
- http://www.maxmind.com/
-
-
- https://github.com/maxmind/MaxMind-DB-Reader-java
- scm:git:git://github.com:maxmind/MaxMind-DB-Reader-java.git
- scm:git:git@github.com:maxmind/MaxMind-DB-Reader-java.git
- HEAD
+ 4.0.0
+ pom
+ com.maxmind.db
+ maxmind-parent
+ 3.1.2-SNAPSHOT
+
+ https://github.com/maxmind/MaxMind-DB-Reader-java
+ scm:git:git://github.com:maxmind/MaxMind-DB-Reader-java.git
+ scm:git:git@github.com:maxmind/MaxMind-DB-Reader-java.git
+ HEAD
-
- https://github.com/maxmind/MaxMind-DB-Reader-java/issues
- GitHub
-
-
-
- oschwald
- Gregory J. Oschwald
- goschwald@maxmind.com
-
-
-
-
- org.junit.jupiter
- junit-jupiter
- 5.11.4
- test
-
-
- org.hamcrest
- java-hamcrest
- 2.0.0.0
- test
-
-
-
-
-
- org.apache.maven.plugins
- maven-enforcer-plugin
- 3.5.0
-
-
- enforce-maven
-
- enforce
-
-
-
-
- 3.6.3
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-checkstyle-plugin
- 3.6.0
-
- true
- checkstyle.xml
- checkstyle-suppressions.xml
- warning
-
-
-
- com.puppycrawl.tools
- checkstyle
- 10.21.2
-
-
-
-
- test
- test
-
- check
-
-
-
-
-
- org.apache.maven.plugins
- maven-gpg-plugin
- 3.2.7
-
-
- sign-artifacts
- verify
-
- sign
-
-
-
-
-
- org.apache.maven.plugins
- maven-source-plugin
- 3.3.1
-
-
- attach-sources
- package
-
- jar-no-fork
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- 3.11.2
-
- -missing
-
-
-
-
- jar
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.13.0
-
- 11
- 11
- 11
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- 3.5.2
-
-
- org.codehaus.mojo
- versions-maven-plugin
- 2.18.0
-
-
- org.sonatype.plugins
- nexus-staging-maven-plugin
- 1.7.0
- true
-
- sonatype-nexus-staging
- https://oss.sonatype.org/
- true
-
-
-
- default-deploy
- deploy
-
- deploy
-
-
-
-
-
-
-
- UTF-8
-
-
-
- not-windows
-
-
- !Windows
-
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
- 3.5.0
-
-
- initialize
- invoke build
-
- exec
-
-
-
-
- git
- submodule update --init --recursive
-
-
-
-
-
-
-
-
- sonatype-nexus-staging
- https://oss.sonatype.org/service/local/staging/deploy/maven2/
-
-
+
+ reader
+ benchmarks
+
diff --git a/checkstyle-suppressions.xml b/reader/checkstyle-suppressions.xml
similarity index 100%
rename from checkstyle-suppressions.xml
rename to reader/checkstyle-suppressions.xml
diff --git a/reader/pom.xml b/reader/pom.xml
new file mode 100644
index 00000000..c05bcb75
--- /dev/null
+++ b/reader/pom.xml
@@ -0,0 +1,237 @@
+
+
+ 4.0.0
+ jar
+ com.maxmind.db
+ maxmind-db
+ 3.1.2-SNAPSHOT
+ MaxMind DB Reader
+ Reader for MaxMind DB
+ http://dev.maxmind.com/
+
+
+ Apache License 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.html
+ repo
+
+
+
+ MaxMind, Inc.
+ http://www.maxmind.com/
+
+
+ https://github.com/maxmind/MaxMind-DB-Reader-java
+ scm:git:git://github.com:maxmind/MaxMind-DB-Reader-java.git
+ scm:git:git@github.com:maxmind/MaxMind-DB-Reader-java.git
+ HEAD
+
+
+ https://github.com/maxmind/MaxMind-DB-Reader-java/issues
+ GitHub
+
+
+
+ oschwald
+ Gregory J. Oschwald
+ goschwald@maxmind.com
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.11.4
+ test
+
+
+ org.hamcrest
+ java-hamcrest
+ 2.0.0.0
+ test
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+ 3.5.0
+
+
+ enforce-maven
+
+ enforce
+
+
+
+
+ 3.6.3
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ 3.6.0
+
+ true
+ ../checkstyle.xml
+ checkstyle-suppressions.xml
+ warning
+
+
+
+ com.puppycrawl.tools
+ checkstyle
+ 10.21.2
+
+
+
+
+ test
+ test
+
+ check
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 3.2.7
+
+
+ sign-artifacts
+ verify
+
+ sign
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.3.1
+
+
+ attach-sources
+ package
+
+ jar-no-fork
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 3.11.2
+
+ -missing
+
+
+
+
+ jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.13.0
+
+ 11
+ 11
+ 11
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.5.2
+
+
+ org.codehaus.mojo
+ versions-maven-plugin
+ 2.18.0
+
+
+ org.sonatype.plugins
+ nexus-staging-maven-plugin
+ 1.7.0
+ true
+
+ sonatype-nexus-staging
+ https://oss.sonatype.org/
+ true
+
+
+
+ default-deploy
+ deploy
+
+ deploy
+
+
+
+
+
+
+
+ UTF-8
+
+
+
+ not-windows
+
+
+ !Windows
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.5.0
+
+
+ initialize
+ invoke build
+
+ exec
+
+
+
+
+ git
+ submodule update --init --recursive
+
+
+
+
+
+
+
+
+ sonatype-nexus-staging
+ https://oss.sonatype.org/service/local/staging/deploy/maven2/
+
+
+
diff --git a/src/main/java/com/maxmind/db/BufferHolder.java b/reader/src/main/java/com/maxmind/db/BufferHolder.java
similarity index 100%
rename from src/main/java/com/maxmind/db/BufferHolder.java
rename to reader/src/main/java/com/maxmind/db/BufferHolder.java
diff --git a/src/main/java/com/maxmind/db/CHMCache.java b/reader/src/main/java/com/maxmind/db/CHMCache.java
similarity index 100%
rename from src/main/java/com/maxmind/db/CHMCache.java
rename to reader/src/main/java/com/maxmind/db/CHMCache.java
diff --git a/src/main/java/com/maxmind/db/CacheKey.java b/reader/src/main/java/com/maxmind/db/CacheKey.java
similarity index 100%
rename from src/main/java/com/maxmind/db/CacheKey.java
rename to reader/src/main/java/com/maxmind/db/CacheKey.java
diff --git a/src/main/java/com/maxmind/db/CachedConstructor.java b/reader/src/main/java/com/maxmind/db/CachedConstructor.java
similarity index 100%
rename from src/main/java/com/maxmind/db/CachedConstructor.java
rename to reader/src/main/java/com/maxmind/db/CachedConstructor.java
diff --git a/src/main/java/com/maxmind/db/ClosedDatabaseException.java b/reader/src/main/java/com/maxmind/db/ClosedDatabaseException.java
similarity index 100%
rename from src/main/java/com/maxmind/db/ClosedDatabaseException.java
rename to reader/src/main/java/com/maxmind/db/ClosedDatabaseException.java
diff --git a/src/main/java/com/maxmind/db/ConstructorNotFoundException.java b/reader/src/main/java/com/maxmind/db/ConstructorNotFoundException.java
similarity index 100%
rename from src/main/java/com/maxmind/db/ConstructorNotFoundException.java
rename to reader/src/main/java/com/maxmind/db/ConstructorNotFoundException.java
diff --git a/src/main/java/com/maxmind/db/CtrlData.java b/reader/src/main/java/com/maxmind/db/CtrlData.java
similarity index 100%
rename from src/main/java/com/maxmind/db/CtrlData.java
rename to reader/src/main/java/com/maxmind/db/CtrlData.java
diff --git a/src/main/java/com/maxmind/db/DatabaseRecord.java b/reader/src/main/java/com/maxmind/db/DatabaseRecord.java
similarity index 100%
rename from src/main/java/com/maxmind/db/DatabaseRecord.java
rename to reader/src/main/java/com/maxmind/db/DatabaseRecord.java
diff --git a/src/main/java/com/maxmind/db/DecodedValue.java b/reader/src/main/java/com/maxmind/db/DecodedValue.java
similarity index 100%
rename from src/main/java/com/maxmind/db/DecodedValue.java
rename to reader/src/main/java/com/maxmind/db/DecodedValue.java
diff --git a/src/main/java/com/maxmind/db/Decoder.java b/reader/src/main/java/com/maxmind/db/Decoder.java
similarity index 100%
rename from src/main/java/com/maxmind/db/Decoder.java
rename to reader/src/main/java/com/maxmind/db/Decoder.java
diff --git a/src/main/java/com/maxmind/db/DeserializationException.java b/reader/src/main/java/com/maxmind/db/DeserializationException.java
similarity index 100%
rename from src/main/java/com/maxmind/db/DeserializationException.java
rename to reader/src/main/java/com/maxmind/db/DeserializationException.java
diff --git a/src/main/java/com/maxmind/db/InvalidDatabaseException.java b/reader/src/main/java/com/maxmind/db/InvalidDatabaseException.java
similarity index 100%
rename from src/main/java/com/maxmind/db/InvalidDatabaseException.java
rename to reader/src/main/java/com/maxmind/db/InvalidDatabaseException.java
diff --git a/src/main/java/com/maxmind/db/InvalidNetworkException.java b/reader/src/main/java/com/maxmind/db/InvalidNetworkException.java
similarity index 100%
rename from src/main/java/com/maxmind/db/InvalidNetworkException.java
rename to reader/src/main/java/com/maxmind/db/InvalidNetworkException.java
diff --git a/src/main/java/com/maxmind/db/MaxMindDbConstructor.java b/reader/src/main/java/com/maxmind/db/MaxMindDbConstructor.java
similarity index 100%
rename from src/main/java/com/maxmind/db/MaxMindDbConstructor.java
rename to reader/src/main/java/com/maxmind/db/MaxMindDbConstructor.java
diff --git a/src/main/java/com/maxmind/db/MaxMindDbParameter.java b/reader/src/main/java/com/maxmind/db/MaxMindDbParameter.java
similarity index 100%
rename from src/main/java/com/maxmind/db/MaxMindDbParameter.java
rename to reader/src/main/java/com/maxmind/db/MaxMindDbParameter.java
diff --git a/src/main/java/com/maxmind/db/Metadata.java b/reader/src/main/java/com/maxmind/db/Metadata.java
similarity index 100%
rename from src/main/java/com/maxmind/db/Metadata.java
rename to reader/src/main/java/com/maxmind/db/Metadata.java
diff --git a/src/main/java/com/maxmind/db/Network.java b/reader/src/main/java/com/maxmind/db/Network.java
similarity index 100%
rename from src/main/java/com/maxmind/db/Network.java
rename to reader/src/main/java/com/maxmind/db/Network.java
diff --git a/src/main/java/com/maxmind/db/Networks.java b/reader/src/main/java/com/maxmind/db/Networks.java
similarity index 100%
rename from src/main/java/com/maxmind/db/Networks.java
rename to reader/src/main/java/com/maxmind/db/Networks.java
diff --git a/src/main/java/com/maxmind/db/NetworksIterationException.java b/reader/src/main/java/com/maxmind/db/NetworksIterationException.java
similarity index 100%
rename from src/main/java/com/maxmind/db/NetworksIterationException.java
rename to reader/src/main/java/com/maxmind/db/NetworksIterationException.java
diff --git a/src/main/java/com/maxmind/db/NoCache.java b/reader/src/main/java/com/maxmind/db/NoCache.java
similarity index 100%
rename from src/main/java/com/maxmind/db/NoCache.java
rename to reader/src/main/java/com/maxmind/db/NoCache.java
diff --git a/src/main/java/com/maxmind/db/NodeCache.java b/reader/src/main/java/com/maxmind/db/NodeCache.java
similarity index 100%
rename from src/main/java/com/maxmind/db/NodeCache.java
rename to reader/src/main/java/com/maxmind/db/NodeCache.java
diff --git a/src/main/java/com/maxmind/db/ParameterNotFoundException.java b/reader/src/main/java/com/maxmind/db/ParameterNotFoundException.java
similarity index 100%
rename from src/main/java/com/maxmind/db/ParameterNotFoundException.java
rename to reader/src/main/java/com/maxmind/db/ParameterNotFoundException.java
diff --git a/src/main/java/com/maxmind/db/Reader.java b/reader/src/main/java/com/maxmind/db/Reader.java
similarity index 100%
rename from src/main/java/com/maxmind/db/Reader.java
rename to reader/src/main/java/com/maxmind/db/Reader.java
diff --git a/src/main/java/com/maxmind/db/Type.java b/reader/src/main/java/com/maxmind/db/Type.java
similarity index 100%
rename from src/main/java/com/maxmind/db/Type.java
rename to reader/src/main/java/com/maxmind/db/Type.java
diff --git a/src/main/java/com/maxmind/db/package-info.java b/reader/src/main/java/com/maxmind/db/package-info.java
similarity index 100%
rename from src/main/java/com/maxmind/db/package-info.java
rename to reader/src/main/java/com/maxmind/db/package-info.java
diff --git a/src/main/java/module-info.java b/reader/src/main/java/module-info.java
similarity index 100%
rename from src/main/java/module-info.java
rename to reader/src/main/java/module-info.java
diff --git a/src/test/java/com/maxmind/db/DecoderTest.java b/reader/src/test/java/com/maxmind/db/DecoderTest.java
similarity index 100%
rename from src/test/java/com/maxmind/db/DecoderTest.java
rename to reader/src/test/java/com/maxmind/db/DecoderTest.java
diff --git a/src/test/java/com/maxmind/db/MultiThreadedTest.java b/reader/src/test/java/com/maxmind/db/MultiThreadedTest.java
similarity index 100%
rename from src/test/java/com/maxmind/db/MultiThreadedTest.java
rename to reader/src/test/java/com/maxmind/db/MultiThreadedTest.java
diff --git a/src/test/java/com/maxmind/db/NetworkTest.java b/reader/src/test/java/com/maxmind/db/NetworkTest.java
similarity index 100%
rename from src/test/java/com/maxmind/db/NetworkTest.java
rename to reader/src/test/java/com/maxmind/db/NetworkTest.java
diff --git a/src/test/java/com/maxmind/db/PointerTest.java b/reader/src/test/java/com/maxmind/db/PointerTest.java
similarity index 100%
rename from src/test/java/com/maxmind/db/PointerTest.java
rename to reader/src/test/java/com/maxmind/db/PointerTest.java
diff --git a/src/test/java/com/maxmind/db/ReaderTest.java b/reader/src/test/java/com/maxmind/db/ReaderTest.java
similarity index 100%
rename from src/test/java/com/maxmind/db/ReaderTest.java
rename to reader/src/test/java/com/maxmind/db/ReaderTest.java
diff --git a/src/test/resources/maxmind-db b/reader/src/test/resources/maxmind-db
similarity index 100%
rename from src/test/resources/maxmind-db
rename to reader/src/test/resources/maxmind-db
diff --git a/sample/Benchmark.java b/sample/Benchmark.java
deleted file mode 100644
index 3d73011b..00000000
--- a/sample/Benchmark.java
+++ /dev/null
@@ -1,62 +0,0 @@
-import java.io.File;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.util.Map;
-import java.util.Random;
-
-import com.maxmind.db.CHMCache;
-import com.maxmind.db.InvalidDatabaseException;
-import com.maxmind.db.NoCache;
-import com.maxmind.db.NodeCache;
-import com.maxmind.db.Reader;
-import com.maxmind.db.Reader.FileMode;
-
-public class Benchmark {
-
- private final static int COUNT = 1000000;
- private final static int WARMUPS = 3;
- private final static int BENCHMARKS = 5;
- private final static boolean TRACE = false;
-
- public static void main(String[] args) throws IOException, InvalidDatabaseException {
- File file = new File(args.length > 0 ? args[0] : "GeoLite2-City.mmdb");
- System.out.println("No caching");
- loop("Warming up", file, WARMUPS, NoCache.getInstance());
- loop("Benchmarking", file, BENCHMARKS, NoCache.getInstance());
-
- System.out.println("With caching");
- loop("Warming up", file, WARMUPS, new CHMCache());
- loop("Benchmarking", file, BENCHMARKS, new CHMCache());
- }
-
- private static void loop(String msg, File file, int loops, NodeCache cache) throws IOException {
- System.out.println(msg);
- for (int i = 0; i < loops; i++) {
- Reader r = new Reader(file, FileMode.MEMORY_MAPPED, cache);
- bench(r, COUNT, i);
- }
- System.out.println();
- }
-
- private static void bench(Reader r, int count, int seed) throws IOException {
- Random random = new Random(seed);
- long startTime = System.nanoTime();
- byte[] address = new byte[4];
- for (int i = 0; i < count; i++) {
- random.nextBytes(address);
- InetAddress ip = InetAddress.getByAddress(address);
- Map t = r.get(ip, Map.class);
- if (TRACE) {
- if (i % 50000 == 0) {
- System.out.println(i + " " + ip);
- System.out.println(t);
- }
- }
- }
- long endTime = System.nanoTime();
-
- long duration = endTime - startTime;
- long qps = count * 1000000000L / duration;
- System.out.println("Requests per second: " + qps);
- }
-}