From a467a42278f864bd333bf4bc551f5222d3f91ad2 Mon Sep 17 00:00:00 2001 From: Jeff Shaw Date: Fri, 7 Feb 2025 16:35:57 -0500 Subject: [PATCH] Use JMH for benchmarks. --- .gitmodules | 2 +- README.md | 12 + benchmarks/pom.xml | 73 ++++++ .../java/com/maxmind/db/BenchmarkGet.java | 71 +++++ dev-bin/release.sh | 8 +- pom.xml | 247 +----------------- .../checkstyle-suppressions.xml | 0 reader/pom.xml | 237 +++++++++++++++++ .../java/com/maxmind/db/BufferHolder.java | 0 .../main/java/com/maxmind/db/CHMCache.java | 0 .../main/java/com/maxmind/db/CacheKey.java | 0 .../com/maxmind/db/CachedConstructor.java | 0 .../maxmind/db/ClosedDatabaseException.java | 0 .../db/ConstructorNotFoundException.java | 0 .../main/java/com/maxmind/db/CtrlData.java | 0 .../java/com/maxmind/db/DatabaseRecord.java | 0 .../java/com/maxmind/db/DecodedValue.java | 0 .../main/java/com/maxmind/db/Decoder.java | 0 .../maxmind/db/DeserializationException.java | 0 .../maxmind/db/InvalidDatabaseException.java | 0 .../maxmind/db/InvalidNetworkException.java | 0 .../com/maxmind/db/MaxMindDbConstructor.java | 0 .../com/maxmind/db/MaxMindDbParameter.java | 0 .../main/java/com/maxmind/db/Metadata.java | 0 .../main/java/com/maxmind/db/Network.java | 0 .../main/java/com/maxmind/db/Networks.java | 0 .../db/NetworksIterationException.java | 0 .../main/java/com/maxmind/db/NoCache.java | 0 .../main/java/com/maxmind/db/NodeCache.java | 0 .../db/ParameterNotFoundException.java | 0 .../src}/main/java/com/maxmind/db/Reader.java | 0 .../src}/main/java/com/maxmind/db/Type.java | 0 .../java/com/maxmind/db/package-info.java | 0 .../src}/main/java/module-info.java | 0 .../test/java/com/maxmind/db/DecoderTest.java | 0 .../com/maxmind/db/MultiThreadedTest.java | 0 .../test/java/com/maxmind/db/NetworkTest.java | 0 .../test/java/com/maxmind/db/PointerTest.java | 0 .../test/java/com/maxmind/db/ReaderTest.java | 0 {src => reader/src}/test/resources/maxmind-db | 0 sample/Benchmark.java | 62 ----- 41 files changed, 412 insertions(+), 300 deletions(-) create mode 100644 benchmarks/pom.xml create mode 100644 benchmarks/src/main/java/com/maxmind/db/BenchmarkGet.java rename checkstyle-suppressions.xml => reader/checkstyle-suppressions.xml (100%) create mode 100644 reader/pom.xml rename {src => reader/src}/main/java/com/maxmind/db/BufferHolder.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/CHMCache.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/CacheKey.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/CachedConstructor.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/ClosedDatabaseException.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/ConstructorNotFoundException.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/CtrlData.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/DatabaseRecord.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/DecodedValue.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/Decoder.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/DeserializationException.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/InvalidDatabaseException.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/InvalidNetworkException.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/MaxMindDbConstructor.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/MaxMindDbParameter.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/Metadata.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/Network.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/Networks.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/NetworksIterationException.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/NoCache.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/NodeCache.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/ParameterNotFoundException.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/Reader.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/Type.java (100%) rename {src => reader/src}/main/java/com/maxmind/db/package-info.java (100%) rename {src => reader/src}/main/java/module-info.java (100%) rename {src => reader/src}/test/java/com/maxmind/db/DecoderTest.java (100%) rename {src => reader/src}/test/java/com/maxmind/db/MultiThreadedTest.java (100%) rename {src => reader/src}/test/java/com/maxmind/db/NetworkTest.java (100%) rename {src => reader/src}/test/java/com/maxmind/db/PointerTest.java (100%) rename {src => reader/src}/test/java/com/maxmind/db/ReaderTest.java (100%) rename {src => reader/src}/test/resources/maxmind-db (100%) delete mode 100644 sample/Benchmark.java 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); - } -}