Browse Source

Remove vertx-pg-client (#6805)

* Update vertx-pg-client

* add mongodb
Redkale 3 years ago
parent
commit
e7a0f3487f

+ 26 - 5
frameworks/Java/redkale/benchmark_config.json

@@ -25,9 +25,9 @@
                 "plaintext_url": "/plaintext",
                 "json_url": "/json",
                 "db_url": "/db",
-                "query_url": "/queries?q=", 
-                "fortune_url": "/fortunes",
-                "update_url": "/updates?q=",
+                "query_url2": "/queries?q=", 
+                "fortune_url2": "/fortunes",
+                "update_url2": "/updates?q=",
                 "cached_query_url": "/cached-worlds?q=",
                 "port": 8080,
                 "approach": "Realistic",
@@ -50,7 +50,7 @@
                 "json_url": "/json",
                 "db_url": "/db",
                 "query_url": "/queries?q=", 
-                "update_url": "/updates?q=",
+                "update_url2": "/updates?q=",
                 "cached_query_url": "/cached-worlds?q=",
                 "port": 8080,
                 "approach": "Realistic",
@@ -90,7 +90,7 @@
                 "db_url": "/db",
                 "query_url": "/queries?q=", 
                 "fortune_url": "/fortunes",
-                "update_url": "/updates?q=",
+                "update_url2": "/updates?q=",
                 "port": 8080,
                 "approach": "Realistic",
                 "classification": "Fullstack",
@@ -106,6 +106,27 @@
                 "display_name": "redkale-postgres",
                 "notes": "",
                 "versus": "Redkale"
+            },
+            "mongodb": {
+                "db_url": "/db",
+                "query_url": "/queries?q=", 
+                "fortune_url": "/fortunes",
+                "update_url": "/updates?q=",
+                "port": 8080,
+                "approach": "Realistic",
+                "classification": "Fullstack",
+                "database": "Mongodb",
+                "framework": "Redkale",
+                "language": "Java",
+                "flavor": "None",
+                "orm": "Raw",
+                "platform": "Redkale",
+                "webserver": "Redkale",
+                "os": "Linux",
+                "database_os": "Linux",
+                "display_name": "redkale-mongodb",
+                "notes": "",
+                "versus": "Redkale"
             }
         }
     ]

+ 2 - 8
frameworks/Java/redkale/conf/application.xml

@@ -5,13 +5,7 @@
     <resources>
         <executor threads="0"/>
         <properties>    
-            <property name="system.property.vertx.threadChecks" value="false"/> 
-            <property name="system.property.vertx.disableTCCL" value="true"/> 
-            <property name="system.property.vertx.disableMetrics" value="true"/> 
-            <property name="system.property.vertx.disableContextTimings" value="true"/> 
-            
-            <property name="system.property.redkale.convert.tiny" value="false"/>      
-            <property name="system.property.redkale.skip.counter" value="true"/>  
+            <property name="system.property.redkale.convert.tiny" value="false"/>    
             <property name="system.property.redkale.http.request.pipeline.sameheaders" value="true"/>  
             <property name="system.property.redkale.http.response.header.server" value="redkale"/>
             <property name="system.property.redkale.http.response.header.connection" value="none"/>
@@ -20,7 +14,7 @@
         
     <server protocol="HTTP" lazy="true" port="8080">      
         <response>
-            <contenttype plain="text/plain" json="application/json"/>  
+            <content-type plain="text/plain" json="application/json"/>  
             <date period="1000"/>
         </response>
         <services autoload="true"/>        

+ 21 - 0
frameworks/Java/redkale/conf/persistence-mongodb.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="2.0">
+    
+    <persistence-unit name=".read" transaction-type="RESOURCE_LOCAL">
+        <properties>
+            <property name="javax.persistence.jdbc.url" value="mongodb://tfb-database/hello_world"/>
+            <property name="javax.persistence.connections.limit" value="512"/>
+            <property name="javax.persistence.jdbc.user" value="benchmarkdbuser"/>
+            <property name="javax.persistence.jdbc.password" value="benchmarkdbpass"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name=".write" transaction-type="RESOURCE_LOCAL">
+        <properties>
+            <property name="javax.persistence.jdbc.url" value="mongodb://tfb-database/hello_world"/>
+            <property name="javax.persistence.jdbc.user" value="benchmarkdbuser"/>
+            <property name="javax.persistence.jdbc.password" value="benchmarkdbpass"/>
+        </properties>
+    </persistence-unit>
+   
+</persistence>

+ 0 - 2
frameworks/Java/redkale/conf/persistence.xml

@@ -5,7 +5,6 @@
         <shared-cache-mode>ALL</shared-cache-mode>
         <properties>
             <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://tfb-database:5432/hello_world"/>
-            <property name="javax.persistence.jdbc.preparecache" value="true"/>
             <property name="javax.persistence.jdbc.user" value="benchmarkdbuser"/>
             <property name="javax.persistence.jdbc.password" value="benchmarkdbpass"/>
         </properties>
@@ -15,7 +14,6 @@
         <shared-cache-mode>ALL</shared-cache-mode>
         <properties>
             <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://tfb-database:5432/hello_world"/>
-            <property name="javax.persistence.jdbc.preparecache" value="true"/>
             <property name="javax.persistence.jdbc.user" value="benchmarkdbuser"/>
             <property name="javax.persistence.jdbc.password" value="benchmarkdbpass"/>
         </properties>

+ 20 - 5
frameworks/Java/redkale/config.toml

@@ -18,9 +18,9 @@ versus = "Redkale"
 urls.plaintext = "/plaintext"
 urls.json = "/json"
 urls.db = "/db"
-urls.fortune = "/fortunes"
-urls.query = "/queries?q="
-urls.update = "/updates?q="
+urls.fortune2 = "/fortunes"
+urls.query2 = "/queries?q="
+urls.update2 = "/updates?q="
 urls.cached_query = "/cached-worlds?q="
 approach = "Realistic"
 classification = "Fullstack"
@@ -37,7 +37,7 @@ urls.plaintext = "/plaintext"
 urls.json = "/json"
 urls.db = "/db"
 urls.query = "/queries?q="
-urls.update = "/updates?q="
+urls.update2 = "/updates?q="
 urls.cached_query = "/cached-worlds?q="
 approach = "Realistic"
 classification = "Fullstack"
@@ -65,7 +65,7 @@ versus = "Redkale"
 urls.db = "/db"
 urls.fortune = "/fortunes"
 urls.query = "/queries?q="
-urls.update = "/updates?q="
+urls.update2 = "/updates?q="
 approach = "Realistic"
 classification = "Fullstack"
 database = "Postgres"
@@ -75,3 +75,18 @@ orm = "Raw"
 platform = "Redkale"
 webserver = "Redkale"
 versus = "Redkale"
+
+[mongodb]
+urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.query = "/queries?q="
+urls.update = "/updates?q="
+approach = "Realistic"
+classification = "Fullstack"
+database = "Mongodb"
+database_os = "Linux"
+os = "Linux"
+orm = "Raw"
+platform = "Redkale"
+webserver = "Redkale"
+versus = "Redkale"

+ 6 - 7
frameworks/Java/redkale/pom-native.xml → frameworks/Java/redkale/pom-mongodb.xml

@@ -32,13 +32,12 @@
             <artifactId>rocker-compiler</artifactId>
             <version>1.3.0</version>
         </dependency> 
-        <!--
-        <dependency> 
-            <groupId>io.vertx</groupId>
-            <artifactId>vertx-pg-client</artifactId>
-            <version>4.1.2</version>
-        </dependency> 
-        -->
+         
+        <dependency>
+            <groupId>org.mongodb</groupId>
+            <artifactId>mongodb-driver-reactivestreams</artifactId>
+            <version>4.3.1</version>
+        </dependency>
     </dependencies>
 
     <repositories>

+ 0 - 31
frameworks/Java/redkale/pom.xml

@@ -33,37 +33,6 @@
             <version>1.3.0</version>
         </dependency> 
         
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-all</artifactId>
-            <version>4.1.65.Final</version>
-        </dependency>
-        <!--
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-transport-native-epoll</artifactId>
-            <version>4.1.65.Final</version>
-            <classifier>linux-x86_64</classifier>
-        </dependency>
-        
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-transport-native-kqueue</artifactId>
-            <version>4.1.65.Final</version>
-            <classifier>osx-x86_64</classifier>
-        </dependency>
-        -->
-        <dependency> 
-            <groupId>io.vertx</groupId>
-            <artifactId>vertx-pg-client</artifactId>
-            <version>3.9.2</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>io.netty</groupId>
-                    <artifactId>*</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency> 
     </dependencies>
 
     <repositories>

+ 25 - 0
frameworks/Java/redkale/redkale-mongodb.dockerfile

@@ -0,0 +1,25 @@
+FROM openjdk:17-jdk-slim
+ARG DEBIAN_FRONTEND=noninteractive
+ARG MAVEN_VERSION=3.8.1
+
+WORKDIR /redkale
+RUN apt-get update -yqq
+RUN apt-get install -yqq wget
+
+RUN wget --no-verbose https://ftp.wayne.edu/apache/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz
+RUN tar -xzf apache-maven-${MAVEN_VERSION}-bin.tar.gz
+ENV MAVEN_HOME /redkale/apache-maven-${MAVEN_VERSION}
+ENV PATH $MAVEN_HOME/bin:$PATH
+
+COPY src src
+COPY conf conf
+COPY pom-mongodb.xml pom.xml
+RUN rm conf/persistence.xml
+RUN mv conf/persistence-mongodb.xml  conf/persistence.xml
+RUN mvn package -q
+
+RUN cp /redkale/target/redkale-benchmark-1.0.0.jar redkale-benchmark.jar
+
+EXPOSE 8080
+
+CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-XX:AutoBoxCacheMax=80000", "-Dbenchmarks.db=true", "-DAPP_HOME=./", "-jar", "redkale-benchmark.jar"]

+ 1 - 1
frameworks/Java/redkale/redkale-native.dockerfile

@@ -2,7 +2,7 @@ FROM maven:3.6.3-openjdk-16-slim as maven
 WORKDIR /redkale
 COPY src src
 COPY conf conf
-COPY pom-native.xml pom.xml
+COPY pom.xml pom.xml
 RUN mvn package -q
 
 

+ 31 - 22
frameworks/Java/redkale/src/main/java/org/redkalex/benchmark/Service.java → frameworks/Java/redkale/src/main/java/org/redkalex/benchmark/BenchmarkService.java

@@ -10,7 +10,6 @@ import com.fizzed.rocker.runtime.ArrayOfByteArraysOutput;
 import java.util.Random;
 import java.util.concurrent.*;
 import javax.annotation.Resource;
-import org.redkale.net.ChannelContext;
 import org.redkale.net.http.*;
 import org.redkale.service.AbstractService;
 import org.redkale.source.*;
@@ -21,17 +20,15 @@ import org.redkalex.benchmark.CachedWorld.WorldEntityCache;
  * @author zhangjx
  */
 @RestService(name = " ", repair = false)
-public class Service extends AbstractService {
+public class BenchmarkService extends AbstractService {
 
     private static final byte[] helloBytes = "Hello, world!".getBytes();
 
-    private final ThreadLocal<RedRandom> rands = ThreadLocal.withInitial(() -> new RedRandom());
+    private final ThreadLocal<RedRandom> rands = ThreadLocal.withInitial(RedRandom::new);
 
     @Resource
     private DataSource source;
 
-    private WorldEntityCache cache;
-
     @RestMapping(name = "plaintext")
     public byte[] getHelloBytes() {
         return helloBytes;
@@ -43,45 +40,57 @@ public class Service extends AbstractService {
     }
 
     @RestMapping(name = "db")
-    public CompletableFuture<World> findWorldAsync(ChannelContext context) {
-        return source.findAsync(World.class, context, randomId(rands.get()));
+    public CompletableFuture<World> findWorldAsync() {
+        return source.findAsync(World.class, randomId(rands.get()));
     }
 
     @RestMapping(name = "queries")
-    public CompletableFuture<World[]> queryWorldAsync(ChannelContext context, int q) {
+    public CompletableFuture<World[]> queryWorldAsync(int q) {
         final int size = Math.min(500, Math.max(1, q));
-        final World[] worlds = new World[size];
         final Random random = rands.get();
-        final CompletableFuture[] futures = new CompletableFuture[size];
+        final CompletableFuture<World>[] futures = new CompletableFuture[size];
         for (int i = 0; i < size; i++) {
-            final int index = i;
-            futures[index] = source.findAsync(World.class, context, randomId(random)).thenAccept(v -> worlds[index] = v);
+            futures[i] = source.findAsync(World.class, randomId(random));
         }
-        return CompletableFuture.allOf(futures).thenApply(v -> worlds);
+        return CompletableFuture.allOf(futures).thenApply(v -> {
+            World[] worlds = new World[size];
+            for (int i = 0; i < size; i++) {
+                worlds[i] = futures[i].join();
+            }
+            return worlds;
+        });
     }
 
     @RestMapping(name = "updates")
-    public CompletableFuture<World[]> updateWorldAsync(ChannelContext context, int q) {
+    public CompletableFuture<World[]> updateWorldAsync(int q) {
         final int size = Math.min(500, Math.max(1, q));
-        final World[] worlds = new World[size];
-        final Random random = ThreadLocalRandom.current();
-        final CompletableFuture[] futures = new CompletableFuture[size];
+        final Random random = rands.get();
+        final CompletableFuture<World>[] futures = new CompletableFuture[size];
         for (int i = 0; i < size; i++) {
-            final int index = i;
-            futures[index] = source.findAsync(World.class, context, randomId(random)).thenAccept(v -> worlds[index] = v.randomNumber(randomId(random)));
+            futures[i] = source.findAsync(World.class, randomId(random));
         }
-        return CompletableFuture.allOf(futures).thenCompose(v -> source.updateAsync(context, World.sort(worlds))).thenApply(v -> worlds);
+        return CompletableFuture.allOf(futures).thenCompose(v -> {
+            final Random r = rands.get();
+            final World[] worlds = new World[size];
+            for (int i = 0; i < size; i++) {
+                worlds[i] = futures[i].join().randomNumber(randomId(r));
+            }
+            return source.updateAsync(World.sort(worlds)).thenApply(u -> worlds);
+        });
     }
 
     @RestMapping(name = "fortunes")
     public CompletableFuture<HttpResult<byte[]>> queryFortunes() {
-        return source.queryListAsync(Fortune.class).thenApply((fortunes) -> {
+        return source.queryListAsync(Fortune.class).thenApply(fortunes -> {
             fortunes.add(new Fortune(0, "Additional fortune added at request time."));
             RockerOutput out = FortunesTemplate.template(Fortune.sort(fortunes)).render();
-            return new HttpResult("text/html; charset=utf-8", ((ArrayOfByteArraysOutput) out).toByteArray());
+            byte[] bs = ((ArrayOfByteArraysOutput) out).toByteArray();
+            return new HttpResult("text/html; charset=utf-8", bs);
         });
     }
 
+    private WorldEntityCache cache;
+
     @RestMapping(name = "cached-worlds")
     public CachedWorld[] cachedWorlds(int q) {
         if (cache == null) {

+ 7 - 7
frameworks/Java/redkale/src/main/java/org/redkalex/benchmark/CachedWorld.java

@@ -5,7 +5,7 @@
  */
 package org.redkalex.benchmark;
 
-import java.util.Random;
+import java.util.*;
 import javax.persistence.*;
 import org.redkale.convert.json.JsonConvert;
 import org.redkale.source.*;
@@ -57,10 +57,11 @@ public final class CachedWorld implements Comparable<CachedWorld> {
 
     public static class WorldEntityCache {
 
-        private Object[] array;
+        private CachedWorld[] array;
 
         public WorldEntityCache(DataSource source) {
-            this.array = source.queryList(CachedWorld.class).toArray();
+            List<CachedWorld> list = source.queryList(CachedWorld.class);
+            this.array = list.toArray(new CachedWorld[list.size()]);
         }
 
         public CachedWorld findAt(int index) {
@@ -68,12 +69,11 @@ public final class CachedWorld implements Comparable<CachedWorld> {
         }
 
         public CachedWorld[] random(Random random, int size) {
-            final CachedWorld[] worlds = new CachedWorld[size];
-            int count = size;
             Random rand = random;
-            for (int i = 0; i < count; i++) {
+            final CachedWorld[] worlds = new CachedWorld[size];
+            for (int i = 0; i < worlds.length; i++) {
                 long index = Math.abs(rand.nextLong()) % 10000;
-                worlds[i] = (CachedWorld) array[(int) index];
+                worlds[i] = array[(int) index];
             }
             return worlds;
         }