Skip to content

Commit 6a839e8

Browse files
authored
Merge pull request #37 from TechEmpower/master
aa
2 parents 7584429 + 9bf0339 commit 6a839e8

File tree

34 files changed

+432
-70
lines changed

34 files changed

+432
-70
lines changed

frameworks/Go/goravel/src/fiber/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ require (
6565
github.com/gofiber/template v1.8.3 // indirect
6666
github.com/gofiber/template/html/v2 v2.1.1 // indirect
6767
github.com/gofiber/utils v1.1.0 // indirect
68-
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
68+
github.com/golang-jwt/jwt/v4 v4.5.1 // indirect
6969
github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
7070
github.com/golang-migrate/migrate/v4 v4.17.1 // indirect
7171
github.com/golang-module/carbon/v2 v2.3.12 // indirect

frameworks/Go/goravel/src/fiber/go.sum

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,8 +285,9 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
285285
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
286286
github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
287287
github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
288-
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
289288
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
289+
github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo=
290+
github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
290291
github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
291292
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
292293
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=

frameworks/Java/redkale/redkale-pgclient.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ COPY --from=maven /redkale/target/redkale-benchmark-1.0.0.jar redkale-benchmark.
1212

1313
EXPOSE 8080
1414

15-
CMD ["java", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-DAPP_HOME=./", "-jar", "redkale-benchmark.jar"]
15+
CMD ["java", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Dio.netty.buffer.checkBounds=false", "-Dio.netty.buffer.checkAccessible=false", "-Dvertx.disableURIValidation=true", "-Dvertx.threadChecks=false", "-Dvertx.disableContextTimings=true", "-DAPP_HOME=./", "-jar", "redkale-benchmark.jar"]

frameworks/Java/spring-webflux/pom.xml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,12 @@
1313
<parent>
1414
<groupId>org.springframework.boot</groupId>
1515
<artifactId>spring-boot-starter-parent</artifactId>
16-
<version>3.3.4</version>
16+
<version>3.3.5</version>
1717
</parent>
1818

1919
<properties>
2020
<java.version>21</java.version>
2121
<jstachio.version>1.3.6</jstachio.version>
22-
<r2dbc-pool.version>1.0.2.RELEASE</r2dbc-pool.version>
23-
<r2dbc-postgresql.version>1.0.7.RELEASE</r2dbc-postgresql.version>
2422
</properties>
2523

2624
<dependencies>

frameworks/Java/spring-webflux/spring-webflux-mongo.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ COPY src src
44
COPY pom.xml pom.xml
55
RUN mvn package -q
66

7-
FROM bellsoft/liberica-openjre-debian:21
7+
FROM bellsoft/liberica-openjre-debian:23
88
WORKDIR /spring
99
COPY --from=maven /spring/target/spring-webflux-benchmark.jar app.jar
1010
# See https://docs.spring.io/spring-boot/reference/packaging/efficient.html

frameworks/Java/spring-webflux/spring-webflux.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ COPY src src
44
COPY pom.xml pom.xml
55
RUN mvn package -q
66

7-
FROM bellsoft/liberica-openjre-debian:21
7+
FROM bellsoft/liberica-openjre-debian:23
88
WORKDIR /spring
99
COPY --from=maven /spring/target/spring-webflux-benchmark.jar app.jar
1010
# See https://docs.spring.io/spring-boot/reference/packaging/efficient.html

frameworks/Java/spring-webflux/src/main/java/benchmark/repository/DbRepository.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package benchmark.repository;
22

3+
import java.util.List;
4+
35
import benchmark.model.Fortune;
46
import benchmark.model.World;
57
import reactor.core.publisher.Flux;
@@ -9,7 +11,7 @@ public interface DbRepository {
911

1012
Mono<World> getWorld(int id);
1113

12-
Mono<World> findAndUpdateWorld(int id, int randomNumber);
14+
Mono<Void> updateWorlds(List<World> worlds);
1315

1416
Flux<Fortune> fortunes();
1517
}

frameworks/Java/spring-webflux/src/main/java/benchmark/repository/MongoDbRepository.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
package benchmark.repository;
22

3+
import java.util.List;
4+
35
import benchmark.model.Fortune;
46
import benchmark.model.World;
5-
import org.slf4j.Logger;
6-
import org.slf4j.LoggerFactory;
7+
78
import org.springframework.context.annotation.Profile;
89
import org.springframework.data.mongodb.core.ReactiveMongoOperations;
910
import org.springframework.stereotype.Component;
1011
import reactor.core.publisher.Flux;
1112
import reactor.core.publisher.Mono;
1213

13-
import static org.springframework.data.mongodb.core.FindAndModifyOptions.options;
1414
import static org.springframework.data.mongodb.core.query.Criteria.where;
1515
import static org.springframework.data.mongodb.core.query.Query.query;
1616
import static org.springframework.data.mongodb.core.query.Update.update;
@@ -31,12 +31,11 @@ public Mono<World> getWorld(int id) {
3131
}
3232

3333
@Override
34-
public Mono<World> findAndUpdateWorld(int id, int randomNumber) {
35-
return operations.findAndModify(
36-
query(where("id").is(id)),
37-
update("randomNumber", randomNumber),
38-
options().returnNew(true),
39-
World.class);
34+
public Mono<Void> updateWorlds(List<World> worlds) {
35+
return Flux.fromIterable(worlds).flatMap(world -> operations.findAndModify(
36+
query(where("id").is(world.id)),
37+
update("randomNumber", world.randomnumber),
38+
World.class)).then();
4039
}
4140

4241
@Override

frameworks/Java/spring-webflux/src/main/java/benchmark/repository/R2dbcDbRepository.java

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
package benchmark.repository;
22

3+
import java.util.List;
4+
35
import org.springframework.context.annotation.Profile;
46
import org.springframework.r2dbc.core.DatabaseClient;
57
import org.springframework.stereotype.Component;
68

79
import benchmark.model.Fortune;
810
import benchmark.model.World;
11+
import io.r2dbc.spi.Connection;
12+
import io.r2dbc.spi.ConnectionFactory;
13+
import io.r2dbc.spi.Result;
14+
import io.r2dbc.spi.Statement;
915
import reactor.core.publisher.Flux;
1016
import reactor.core.publisher.Mono;
1117

@@ -23,28 +29,25 @@ public R2dbcDbRepository(DatabaseClient databaseClient) {
2329
public Mono<World> getWorld(int id) {
2430
return databaseClient
2531
.sql("SELECT id, randomnumber FROM world WHERE id = $1")
26-
.bind("$1", id)
32+
.bind(0, id)
2733
.mapProperties(World.class)
2834
.first();
2935
}
3036

31-
private Mono<World> updateWorld(World world) {
32-
return databaseClient
33-
.sql("UPDATE world SET randomnumber=$2 WHERE id = $1")
34-
.bind("$1", world.id)
35-
.bind("$2", world.randomnumber)
36-
.fetch()
37-
.rowsUpdated()
38-
.map(count -> world);
39-
}
40-
41-
4237
@Override
43-
public Mono<World> findAndUpdateWorld(int id, int randomNumber) {
44-
return getWorld(id).flatMap(world -> {
45-
world.randomnumber = randomNumber;
46-
return updateWorld(world);
47-
});
38+
public Mono<Void> updateWorlds(List<World> worlds) {
39+
return databaseClient.inConnectionMany(con -> {
40+
Statement statement = con.createStatement("UPDATE world SET randomnumber=$2 WHERE id = $1");
41+
for (int i = 0; i < worlds.size(); i++) {
42+
World world = worlds.get(i);
43+
statement.bind(0, world.randomnumber)
44+
.bind(1, world.id);
45+
if (i < worlds.size() - 1) {
46+
statement.add();
47+
}
48+
}
49+
return Flux.from(statement.execute());
50+
}).flatMap(Result::getRowsUpdated).then();
4851
}
4952

5053
@Override

frameworks/Java/spring-webflux/src/main/java/benchmark/web/DbHandler.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package benchmark.web;
22

3+
import java.util.Comparator;
34
import java.util.List;
45

56
import benchmark.Utils;
@@ -68,8 +69,16 @@ public Mono<ServerResponse> updates(ServerRequest request) {
6869
int queries = parseQueryCount(request.queryParams().getFirst("queries"));
6970

7071
Mono<List<World>> worlds = Flux.fromStream(Utils.randomWorldNumbers().limit(queries).boxed())
71-
.flatMap(i -> dbRepository.findAndUpdateWorld(i, Utils.randomWorldNumber()))
72-
.collectList();
72+
.flatMap(id -> dbRepository.getWorld(id).map(world -> {
73+
int randomNumber;
74+
do {
75+
randomNumber = Utils.randomWorldNumber();
76+
} while (randomNumber == world.randomnumber);
77+
world.randomnumber = randomNumber;
78+
return world;
79+
}))
80+
.collectSortedList(Comparator.comparingInt(w -> w.id))
81+
.flatMap(list -> dbRepository.updateWorlds(list).thenReturn(list));
7382

7483
return ServerResponse.ok()
7584
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)

0 commit comments

Comments
 (0)