mirror of
https://github.com/facebook/rocksdb.git
synced 2024-11-27 11:43:49 +00:00
f8969ad7d4
Summary: Performance improvements for `get()` paths in the RocksJava API (JNI). Document describing the performance results. Replace uses of the legacy `DB::Get()` method wrapper returning data in a `std::string` with direct calls to `DB::Get()` passing a pinnable slice to receive this data. Copying from a pinned slice direct to the destination java byte array, without going via an intervening std::string, is a major performance gain for this code path. Note that this gain only comes where `DB::Get()` is able to return a pinned buffer; where it has to copy into the buffer owned by the slice, there is still the intervening copy and no performance gain. It may be possible to address this case too, but it is not trivial. Pull Request resolved: https://github.com/facebook/rocksdb/pull/10970 Reviewed By: pdillinger Differential Revision: D42125567 Pulled By: ajkr fbshipit-source-id: b7a4df7523b0420cadb1e9b6c7da3ec030a8da34
179 lines
7.2 KiB
XML
179 lines
7.2 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
<modelVersion>4.0.0</modelVersion>
|
|
|
|
<groupId>org.rocksdb</groupId>
|
|
<artifactId>rocksdbjni</artifactId>
|
|
<version>${ROCKSDB_JAVA_VERSION}</version> <!-- this will be replaced by the Makefile's rocksdbjavageneratepom target -->
|
|
|
|
<name>RocksDB JNI</name>
|
|
<description>RocksDB fat jar that contains .so files for linux32 and linux64 (glibc and musl-libc), jnilib files
|
|
for Mac OSX, and a .dll for Windows x64.
|
|
</description>
|
|
<url>https://rocksdb.org</url>
|
|
<inceptionYear>2012</inceptionYear>
|
|
|
|
<licenses>
|
|
<license>
|
|
<name>Apache License 2.0</name>
|
|
<url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
|
|
<distribution>repo</distribution>
|
|
</license>
|
|
<license>
|
|
<name>GNU General Public License, version 2</name>
|
|
<url>http://www.gnu.org/licenses/gpl-2.0.html</url>
|
|
<distribution>repo</distribution>
|
|
</license>
|
|
</licenses>
|
|
|
|
<scm>
|
|
<connection>scm:git:https://github.com/facebook/rocksdb.git</connection>
|
|
<developerConnection>scm:git:https://github.com/facebook/rocksdb.git</developerConnection>
|
|
<url>scm:git:https://github.com/facebook/rocksdb.git</url>
|
|
</scm>
|
|
|
|
<organization>
|
|
<name>Facebook</name>
|
|
<url>https://www.facebook.com</url>
|
|
</organization>
|
|
|
|
<developers>
|
|
<developer>
|
|
<name>Facebook</name>
|
|
<email>help@facebook.com</email>
|
|
<timezone>America/New_York</timezone>
|
|
<roles>
|
|
<role>architect</role>
|
|
</roles>
|
|
</developer>
|
|
</developers>
|
|
|
|
<mailingLists>
|
|
<mailingList>
|
|
<name>rocksdb - Google Groups</name>
|
|
<subscribe>rocksdb-subscribe@googlegroups.com</subscribe>
|
|
<unsubscribe>rocksdb-unsubscribe@googlegroups.com</unsubscribe>
|
|
<post>rocksdb@googlegroups.com</post>
|
|
<archive>https://groups.google.com/forum/#!forum/rocksdb</archive>
|
|
</mailingList>
|
|
</mailingLists>
|
|
|
|
<properties>
|
|
<project.build.source>1.8</project.build.source>
|
|
<project.build.target>1.8</project.build.target>
|
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
</properties>
|
|
|
|
<build>
|
|
<plugins>
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-compiler-plugin</artifactId>
|
|
<version>3.2</version>
|
|
<configuration>
|
|
<source>${project.build.source}</source>
|
|
<target>${project.build.target}</target>
|
|
<encoding>${project.build.sourceEncoding}</encoding>
|
|
</configuration>
|
|
</plugin>
|
|
<plugin>
|
|
<groupId>org.apache.maven.plugins</groupId>
|
|
<artifactId>maven-surefire-plugin</artifactId>
|
|
<version>2.18.1</version>
|
|
<configuration>
|
|
<argLine>${argLine} -ea -Xcheck:jni -Djava.library.path=${project.build.directory}</argLine>
|
|
<useManifestOnlyJar>false</useManifestOnlyJar>
|
|
<useSystemClassLoader>false</useSystemClassLoader>
|
|
<additionalClasspathElements>
|
|
<additionalClasspathElement>${project.build.directory}/*</additionalClasspathElement>
|
|
</additionalClasspathElements>
|
|
</configuration>
|
|
</plugin>
|
|
<plugin>
|
|
<groupId>org.jacoco</groupId>
|
|
<artifactId>jacoco-maven-plugin</artifactId>
|
|
<version>0.7.2.201409121644</version>
|
|
<executions>
|
|
<execution>
|
|
<goals>
|
|
<goal>prepare-agent</goal>
|
|
</goals>
|
|
</execution>
|
|
<execution>
|
|
<id>report</id>
|
|
<phase>prepare-package</phase>
|
|
<goals>
|
|
<goal>report</goal>
|
|
</goals>
|
|
</execution>
|
|
</executions>
|
|
</plugin>
|
|
<plugin>
|
|
<groupId>org.codehaus.gmaven</groupId>
|
|
<artifactId>groovy-maven-plugin</artifactId>
|
|
<version>2.0</version>
|
|
<executions>
|
|
<execution>
|
|
<phase>process-classes</phase>
|
|
<goals>
|
|
<goal>execute</goal>
|
|
</goals>
|
|
<configuration>
|
|
<defaults>
|
|
<name>Xenu</name>
|
|
</defaults>
|
|
<source>
|
|
String fileContents = new File(project.basedir.absolutePath + '/../include/rocksdb/version.h').getText('UTF-8')
|
|
matcher = (fileContents =~ /(?s).*ROCKSDB_MAJOR ([0-9]+).*?/)
|
|
String major_version = matcher.getAt(0).getAt(1)
|
|
matcher = (fileContents =~ /(?s).*ROCKSDB_MINOR ([0-9]+).*?/)
|
|
String minor_version = matcher.getAt(0).getAt(1)
|
|
matcher = (fileContents =~ /(?s).*ROCKSDB_PATCH ([0-9]+).*?/)
|
|
String patch_version = matcher.getAt(0).getAt(1)
|
|
String version = String.format('%s.%s.%s', major_version, minor_version, patch_version)
|
|
// Set version to be used in pom.properties
|
|
project.version = version
|
|
// Set version to be set as jar name
|
|
project.build.finalName = project.artifactId + "-" + version
|
|
</source>
|
|
</configuration>
|
|
</execution>
|
|
</executions>
|
|
</plugin>
|
|
</plugins>
|
|
</build>
|
|
|
|
<dependencies>
|
|
<dependency>
|
|
<groupId>junit</groupId>
|
|
<artifactId>junit</artifactId>
|
|
<version>4.13.1</version>
|
|
<scope>test</scope>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.hamcrest</groupId>
|
|
<artifactId>hamcrest</artifactId>
|
|
<version>2.2</version>
|
|
<scope>test</scope>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>cglib</groupId>
|
|
<artifactId>cglib</artifactId>
|
|
<version>3.3.0</version>
|
|
<scope>test</scope>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.assertj</groupId>
|
|
<artifactId>assertj-core</artifactId>
|
|
<version>2.9.0</version>
|
|
<scope>test</scope>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.mockito</groupId>
|
|
<artifactId>mockito-all</artifactId>
|
|
<version>1.10.19</version>
|
|
<scope>test</scope>
|
|
</dependency>
|
|
</dependencies>
|
|
</project>
|