gpt4 book ai didi

java - elasticsearch NodeBuilder vs TranportClient

转载 作者:IT老高 更新时间:2023-10-28 20:38:56 25 4
gpt4 key购买 nike

对于其他 Elasticsearch 开发人员来说,这可能是一个非常简单(且愚蠢)的问题,这两者之间有什么区别?

我正在从 Java webapp 连接到远程 Elasticsearch 服务器,到目前为止我一直在使用 TransportClient,但我想知道 NodeBuilder 是否可以用于,或者 NodeBuilder 是否应该仅用于嵌入式客户端?

如果两者中的任何一个都可以用来连接远程ES服务器,那么在内存和性能方面应该哪个更好?

如果有人能指出一个连接到远程 ES 服务器的 NodeBuilder 示例,那就太好了,因为我没有幸运找到一个。

谢谢。

最佳答案

NodeBuilder 也可以用来连接集群。

Node node = nodeBuilder().clusterName("yourcluster").client(true).node();
Client client = node.client();

它将作为另一个节点加入集群,并了解整个拓扑。使用节点,您可以使用多播来发现其他正在运行的节点。

我的看法是,我更喜欢使用TransportClient 而不是NodeClient,因为当TransportClient 停止时,其他集群节点不会收到无用的信息。当 NodeClient 停止时,每个节点都必须知道这一点,即使他们不必管理它,因为它不保存任何数据。此外,我在 Debug模式下看到 NodeClient 启动的 Threads 比 TransportCLient 多。所以我认为 TransportClient 的内存占用更少。

顺便说一下,如果你使用的是 Spring,你可以使用 spring-elasticsearch工厂。如果没有,您可以随时查看源代码,了解我如何管理 NodeClient 与 TransportClient。

希望这会有所帮助。

EDIT 2016-03-09:不应使用 NodeClient。如果需要,人们应该创建一个客户端节点(使用 node.data: falsenode.master: false 启动一个 elasticsearch 节点)并使用 TransportClient 在本地连接它。

关于java - elasticsearch NodeBuilder vs TranportClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15398861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com