Browse Source

Add redkale-vertx db test (#8434)

Redkale 1 year ago
parent
commit
270ca5e6f9

+ 21 - 0
frameworks/Java/redkale/benchmark_config.json

@@ -94,6 +94,27 @@
                 "display_name": "redkale-jdbc",
                 "notes": "",
                 "versus": "Redkale"
+            },
+            "vertx": {
+                "db_url": "/db",
+                "query_url": "/queries?q=", 
+                "fortune_url": "/fortunes",
+                "update_url": "/updates?q=",
+                "port": 8080,
+                "approach": "Realistic",
+                "classification": "Fullstack",
+                "database": "Postgres",
+                "framework": "Redkale",
+                "language": "Java",
+                "flavor": "None",
+                "orm": "Raw",
+                "platform": "Redkale",
+                "webserver": "Redkale",
+                "os": "Linux",
+                "database_os": "Linux",
+                "display_name": "redkale-vertx",
+                "notes": "",
+                "versus": "Redkale"
             }
         }
     ]

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

@@ -3,6 +3,8 @@
 <application port="8585">     
     
     <properties>    
+        <property name="system.property.redkale.trace.enable" value="false"/>  
+        <property name="system.property.redkale.trace.disable" value="true"/>
         <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"/>

+ 15 - 0
frameworks/Java/redkale/config.toml

@@ -68,4 +68,19 @@ os = "Linux"
 orm = "Raw"
 platform = "Redkale"
 webserver = "Redkale"
+versus = "Redkale"
+
+[vertx]
+urls.db = "/db"
+urls.fortune = "/fortunes"
+urls.query = "/queries?q="
+urls.update = "/updates?q="
+approach = "Realistic"
+classification = "Fullstack"
+database = "Postgres"
+database_os = "Linux"
+os = "Linux"
+orm = "Raw"
+platform = "Redkale"
+webserver = "Redkale"
 versus = "Redkale"

+ 1 - 1
frameworks/Java/redkale/pom-jdbc.xml

@@ -8,7 +8,7 @@
     <properties>
         <main.class>org.redkale.boot.Application</main.class>
         <redkale.version>2.8.0-SNAPSHOT</redkale.version>
-        <postgresql.version>42.5.4</postgresql.version>
+        <postgresql.version>42.6.0</postgresql.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <maven.compiler.source>18</maven.compiler.source>
         <maven.compiler.target>18</maven.compiler.target>

+ 136 - 0
frameworks/Java/redkale/pom-vertx.xml

@@ -0,0 +1,136 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.redkalex</groupId>
+    <artifactId>redkale-benchmark</artifactId>
+    <version>1.0.0</version>
+
+    <properties>
+        <main.class>org.redkale.boot.Application</main.class>
+        <redkale.version>2.8.0-SNAPSHOT</redkale.version>
+        <vertx.version>4.4.4</vertx.version>
+        <vertx-scram.version>2.1</vertx-scram.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>18</maven.compiler.source>
+        <maven.compiler.target>18</maven.compiler.target>
+    </properties> 
+
+    <dependencies>  
+        <dependency>
+            <groupId>org.redkale</groupId>
+            <artifactId>redkale</artifactId>
+            <version>${redkale.version}</version>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.redkalex</groupId>
+            <artifactId>redkale-plugins</artifactId>
+            <version>${redkale.version}</version>
+        </dependency>
+        
+        <dependency>
+            <groupId>io.vertx</groupId>
+            <artifactId>vertx-pg-client</artifactId>
+            <version>${vertx.version}</version>
+        </dependency>
+        
+        <dependency>
+            <groupId>com.ongres.scram</groupId>
+            <artifactId>client</artifactId>
+            <version>${vertx-scram.version}</version>
+        </dependency>
+    </dependencies>
+
+    <repositories>
+        <repository>
+            <id>central</id>
+            <name>Central Repository</name>
+            <url>https://repo.maven.apache.org/maven2</url>
+        </repository>
+        <repository>
+            <id>sonatype-nexus-snapshots</id>
+            <name>Sonatype Nexus Snapshots</name>
+            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
+        </repository>
+    </repositories>
+    
+    <pluginRepositories>
+        <pluginRepository>
+            <id>central</id>
+            <name>Central Repository</name>
+            <url>https://repo.maven.apache.org/maven2</url>
+        </pluginRepository>
+        <pluginRepository>
+            <id>sonatype-nexus-snapshots</id>
+            <name>Sonatype Nexus Snapshots</name>
+            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
+            <releases>
+                <enabled>false</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </pluginRepository> 
+    </pluginRepositories>
+    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.10.0</version>
+                <configuration>			
+                    <encoding>UTF-8</encoding>
+                    <compilerArgs>
+                        <arg>-parameters</arg>
+                        <arg>--enable-preview</arg>
+                    </compilerArgs>
+                    <showDeprecation>true</showDeprecation>
+                </configuration>
+            </plugin>
+                 
+            <plugin>
+                <groupId>org.redkale.maven.plugins</groupId>
+                <artifactId>redkale-maven-plugin</artifactId>
+                <version>1.2.0-SNAPSHOT</version>                                                
+                <configuration>		
+                    <nativeimageArgs>
+                        <arg>--no-fallback</arg>
+                    </nativeimageArgs>
+                </configuration>                                    
+                <executions>
+                    <execution>
+                        <id>redkale-compile</id> 
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>compile</goal>
+                        </goals>                   
+                    </execution>
+                </executions>    
+            </plugin>
+                 
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <version>3.3.0</version>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <transformers>
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                                    <mainClass>${main.class}</mainClass>
+                                </transformer>
+                            </transformers>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+
+    </build>
+
+</project>

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

@@ -6,7 +6,7 @@ COPY pom.xml pom.xml
 RUN mvn package -q
 
 
-FROM ghcr.io/graalvm/graalvm-ce:ol9-java17-22.3.1
+FROM ghcr.io/graalvm/jdk-community:21.0.0
 WORKDIR /redkale
 COPY conf conf
 COPY --from=maven /redkale/target/redkale-benchmark-1.0.0.jar redkale-benchmark.jar

+ 2 - 2
frameworks/Java/redkale/redkale-jdbc.dockerfile

@@ -5,11 +5,11 @@ COPY conf conf
 COPY pom-jdbc.xml pom.xml
 RUN mvn package -q
 
-FROM openjdk:20-jdk-slim
+FROM openjdk:21-jdk-slim
 WORKDIR /redkale
 COPY conf conf
 COPY --from=maven /redkale/target/redkale-benchmark-1.0.0.jar redkale-benchmark.jar
 
 EXPOSE 8080
 
-CMD ["java", "--enable-preview", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-DAPP_HOME=./", "-jar", "redkale-benchmark.jar"]
+CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-DAPP_HOME=./", "-jar", "redkale-benchmark.jar"]

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

@@ -6,7 +6,7 @@ COPY pom.xml pom.xml
 RUN mvn package -q
 
 
-FROM ghcr.io/graalvm/graalvm-ce:ol9-java17-22.3.1
+FROM ghcr.io/graalvm/graalvm-ce:ol9-java17-22.3.3
 RUN gu install native-image
 WORKDIR /redkale
 COPY conf conf

+ 15 - 0
frameworks/Java/redkale/redkale-vertx.dockerfile

@@ -0,0 +1,15 @@
+FROM maven:3.8.6-openjdk-18-slim as maven
+WORKDIR /redkale
+COPY src src
+COPY conf conf
+COPY pom-vertx.xml pom.xml
+RUN mvn package -q
+
+FROM openjdk:21-jdk-slim
+WORKDIR /redkale
+COPY conf conf
+COPY --from=maven /redkale/target/redkale-benchmark-1.0.0.jar redkale-benchmark.jar
+
+EXPOSE 8080
+
+CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-DAPP_HOME=./", "-jar", "redkale-benchmark.jar"]

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

@@ -5,6 +5,11 @@ COPY conf conf
 COPY pom.xml pom.xml
 RUN mvn package -q
 
+FROM openjdk:21-jdk-slim
+WORKDIR /redkale
+COPY conf conf
+COPY --from=maven /redkale/target/redkale-benchmark-1.0.0.jar redkale-benchmark.jar
+
 EXPOSE 8080
 
-CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-DAPP_HOME=./", "-jar", "/redkale/target/redkale-benchmark-1.0.0.jar"]
+CMD ["java", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-DAPP_HOME=./", "-jar", "redkale-benchmark.jar"]

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

@@ -12,7 +12,7 @@ import org.redkale.persistence.*;
  */
 @Entity
 @Table(name = "world")
-@Cacheable(direct = true, continuousid = true)
+@Cacheable(direct = true)
 public final class CachedWorld {
 
     @Id

+ 43 - 28
frameworks/Java/redkale/src/main/java/org/redkalex/benchmark/FortuneRender.java

@@ -29,51 +29,66 @@ public class FortuneRender implements org.redkale.net.http.HttpRender {
 
     private static final byte[] text5 = "</table></body></html>".getBytes(StandardCharsets.UTF_8);
 
-    private final ThreadLocal<ByteArray> localByteArray = ThreadLocal.withInitial(() -> new ByteArray(1200));
+    private final ThreadLocal<ByteArray> localByteArray = ThreadLocal.withInitial(() -> new ByteArray(1280));
+
+    private final ThreadLocal<ByteArray> localTmpArray = ThreadLocal.withInitial(() -> new ByteArray(128));
+
+    private byte[][] idBytesCache;
+
+    private byte[][] escapeCache;
 
     @Override
     public void init(HttpContext context, AnyValue config) {
+        escapeCache = new byte[100][];
+        escapeCache['<'] = "&lt;".getBytes();
+        escapeCache['>'] = "&gt;".getBytes();
+        escapeCache['"'] = "&quot;".getBytes();
+        escapeCache['\''] = "&#39;".getBytes();
+        escapeCache['&'] = "&amp;".getBytes();
+        idBytesCache = new byte[100][];
+        for (int i = 0; i < idBytesCache.length; i++) {
+            idBytesCache[i] = String.valueOf(i).getBytes(StandardCharsets.UTF_8);
+        }
     }
 
     @Override
     public void renderTo(HttpRequest request, HttpResponse response, Convert convert, HttpScope scope) {
         ByteArray array = localByteArray.get().clear();
         array.put(text1);
+        ByteArray tmp = localTmpArray.get();
         for (Fortune item : (List<Fortune>) scope.getReferObj()) {
-            array.put(text2).put(String.valueOf(item.getId()).getBytes(StandardCharsets.UTF_8))
-                .put(text3).put(escape(item.getMessage()).toString().getBytes(StandardCharsets.UTF_8)).put(text4);
+            array.put(text2).put(escapeId(item.getId()))
+                .put(text3).put(escapeMessage(tmp, item.getMessage())).put(text4);
         }
         array.put(text5);
         response.finish(contentType, array);
     }
 
-    private static CharSequence escape(CharSequence value) {
-        if (value == null || value.length() == 0) return "";
-        CharSequence cs = value;
-        StringBuilder sb = new StringBuilder(value.length() + 16);
+    private byte[] escapeId(int id) {
+        if (id >= 0 && id < idBytesCache.length) {
+            return idBytesCache[id];
+        } else {
+            return String.valueOf(id).getBytes(StandardCharsets.UTF_8);
+        }
+    }
+
+    private ByteArray escapeMessage(ByteArray tmp, String message) {
+        tmp.clear();
+        CharSequence cs = message;
         for (int i = 0; i < cs.length(); i++) {
-            char ch = cs.charAt(i);
-            switch (ch) {
-                case '<':
-                    sb.append("&lt;");
-                    break;
-                case '>':
-                    sb.append("&gt;");
-                    break;
-                case '"':
-                    sb.append("&quot;");
-                    break;
-                case '\'':
-                    sb.append("&#39;");
-                    break;
-                case '&':
-                    sb.append("&amp;");
-                    break;
-                default:
-                    sb.append(ch);
-                    break;
+            char c = cs.charAt(i);
+            byte[] bs = c < escapeCache.length ? escapeCache[c] : null;
+            if (bs != null) {
+                tmp.put(bs);
+            } else if (c < 0x80) {
+                tmp.put((byte) c);
+            } else if (c < 0x800) {
+                tmp.put((byte) (0xc0 | (c >> 6)), (byte) (0x80 | (c & 0x3f)));
+            } else {
+                tmp.put((byte) (0xe0 | ((c >> 12))), (byte) (0x80 | ((c >> 6) & 0x3f)), (byte) (0x80 | (c & 0x3f)));
             }
         }
-        return sb;
+        return tmp;
     }
+
 }