繁体   English   中英

Hazelcast谓词在重载期间被卡住

[英]Hazelcast Predicate gets stuck during Heavy Load

我有一个两个节点的Hazelcast群集,每个群集具有6 GB的堆大小。 我有一个在四个字段上运行的谓词,因此例如,让我们考虑一个类Employee

  public class Employee {
  String id,
  String name,
  String surname,
  String timestamp
  .....
  }

这门课总共有13个领域左右。 我正在时间戳上运行范围查询,并与其他3个字段(id,name和surname)进行绝对匹配。 对于序列化,我正在使用IdentifiedDataSerializable,因为那是hazelcast必须提供的最有效的序列化形式。 我有一个tomcat servlet容器设置,因此每个传入的请求都会在集群上触发一个谓词。 我当前面临的问题是,当集群中大约有100,000条记录并且我对tomcat容器进行性能测试时,由于谓词查询永不返回,因此大多数tomcat线程都卡住了。 我已经看过由hazelcast提供的线程模型- https://docs.hazelcast.org/docs/latest-dev/manual/html-single/index.html#threading-model 我已经使用文档中的属性修改了不同类型的线程,它改进了一些功能,但是基本上是在黑暗中触发的。 我已经在字段ID上添加了一个索引,但这实际上并没有改善。

如果有人为我指出如何解决此问题的正确方向,我将不胜感激。 先感谢您!

编辑-

用于群集和客户端的Hazelcast版本是3.9。 另外,我正在将hazelcast嵌入到Spring Boot应用程序中。 不要以为会有所效果,但想让大家知道。

@ Indraneel-Bende,一些建议:

  1. Hazelcast查询引擎评估所有谓词并组合结果。 如果它是AND谓词,则在检索全部4个谓词结果之后,将选择所有4个结果中的公共谓词。 因此,如果这些字段中的任何一个具有低基数并返回太多结果,这将减慢谓词的速度。 因此,我建议仅在基数最高的1个字段或最多2个字段上定义索引。
  2. 由于并非所有字段都将被索引,因此需要对从索引存储返回的条目进行反序列化以应用未索引的谓词。 即使使用IdentifiedDataSerializable ,如果您有太多字段,您每次都将支付全部反序列化费用。 相反,您可以实现Portable序列化。 尽管存储的条目大小会更大,但是Hazelcast成员可以通过这种方式仅反序列化您在这些谓词中使用的字段,从而可以加快查询速度。
  3. 如此处所述, https://docs.hazelcast.org/docs/3.9/manual/html-single/index.html#copying-indexes ,将复制索引结果以确保结果正确,特别是新节点加入/离开簇。 如果您确定成员身份不会更改,可以将hazelcast.index.copy.behavior设置为NEVER 这也将加快查询速度。

我个人建议一个接一个地测试它们。 我的第一个建议肯定会提高查​​询速度。 如果需要进一步的性能,请尝试第二种方法并查看区别。 由于如果您的成员资格在查询时发生更改,最后一个会导致错误或重复的结果,因此请谨慎使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM