提高EventstoreDB的性能



我使用的是ESDB v 20.10.2.0。它部署在Kubernetes集群的docker容器中;数据和日志存放在同一安装目录下。我们使用Java客户端从esdb服务器读取流,pfb代码片段。

ReadStreamOptions readStreamOptions = ReadStreamOptions.get().fromStart().notResolveLinkTos();
DomainEventDeserializer deSerializer = new DomainEventDeserializer();
try {
List<ResolvedEvent> resolvedEvents =
client.readStream(addPrefix(aggregateId), readStreamOptions).get().getEvents();
return resolvedEvents
.stream()
.map(
resolvedEvent -> {
byte[] eventData = resolvedEvent.getOriginalEvent().getEventData();
return deSerializer.deserialize(null, eventData);
})
.filter(data -> data != null)
.collect(Collectors.toCollection(LinkedHashSet::new));

从esdb读取事件花费的时间是从sql db读取时间的3倍。我想知道什么是最佳配置,以及如何提高读取性能。

.EventStore.ClusterNode.exe——db .db——log .logs——insecure启用直方图——reader-threads-count 8——worker-threads 10——log-http-requests

这是用于在我的本地系统中运行esdb的命令,kubernetes集群也启用了相同的选项。

我不能解释为什么你会根据你分享的内容得出这些结果,但是关于这件事有一些注意事项:

  • Kubernetes不推荐用于数据库,更不推荐用于性能测试。
  • 看来你正在使用一个过时的版本的Java gRPC客户端,当然是一个0。x版本。
  • 当前Java gRPC客户端的一个关键限制是它不支持大型事件流。返回的列表在向用户返回任何内容之前被完全构造。根据您设置测试的方式,它可能会影响您的结果。有一个公开的公关来解决这个问题:https://github.com/EventStore/EventStoreDB-Client-Java/pull/79。这是其他官方客户端(c#、Rust、NodeJS、Go等)没有的限制。Java中没有异步流类型。我们希望保持Java 8的兼容性,同时保持依赖关系图尽可能小。

相关内容

  • 没有找到相关文章

最新更新