im8*_*bit 22 java elasticsearch
对于其他弹性搜索开发者来说可能是一个非常容易(和愚蠢)的问题,这两者之间有什么区别?
我正在从Java webapp连接到远程elasticsearch服务器,到目前为止我一直在使用TransportClient,但我想知道是否可以使用NodeBuilder,或者NodeBuilder应该只用于嵌入式客户端?
如果两者中的任何一个都可用于连接远程ES服务器,哪个应该在内存和性能方面更好?
如果有人能指出我连接到远程ES服务器的NodeBuilder示例会很棒,因为我没有任何幸运的发现.
谢谢.
dad*_*net 28
NodeBuilder还可用于连接群集.
Node node = nodeBuilder().clusterName("yourcluster").client(true).node();
Client client = node.client();
Run Code Online (Sandbox Code Playgroud)
它将作为另一个节点加入集群,并将了解整个拓扑.使用节点,您可以使用多播来发现其他正在运行的节点.
我的意见是我更喜欢使用,而TransportClient不是NodeClient因为其他集群节点在TransportClient停止时不会收到无用的信息.当NodeClient停止时,每个节点必须知道即使他们不必管理它,因为它不包含任何数据.另外,我在调试模式中看到NodeClient启动的次数Threads超过了TransportCLient.所以我认为TransportClient的内存占用较少.
顺便说一句,如果你使用Spring,你可以使用spring-elasticsearch工厂.如果没有,您可以随时查看源代码,了解我如何管理NodeClient与TransportClient.
希望这可以帮助.
编辑2016-03-09:NodeClient不应该使用.如果需要,人们应该创建一个客户端节点(使用node.data: false和启动elasticsearch节点node.master: false)并使用a TransportClient在本地连接到它.
Bri*_*edt 18
如果我正确理解文档,那么使用节点客户端是有益的,至少如果你有分片:
使用[Node]客户端的好处是,操作自动路由到需要执行操作的节点,而不执行"双跳".例如,索引操作将自动在最终存在的分片上执行.
VS
它[传输客户端]不加入集群,而只是获取一个或多个初始传输地址,并在每个操作上以循环方式与它们通信(尽管大多数操作可能是"两跳"操作).
在我解释这一点时,使用加入集群然后使用该节点上的客户端的节点(最好将客户端设置为true),您将直接将请求发送到集群中的正确节点.
使用TransportClient,您将连接到任何节点,然后该节点将请求重定向(或可能转发请求,不确定)到正确的节点("两跳")
在网络流量和节点负载方面,使用Node Client应该更有效.
| 归档时间: |
|
| 查看次数: |
13108 次 |
| 最近记录: |