我正在使用ZooKeeper来存储分层数据。在一项测试中,我为一个节点存储了超过300K的子代。当我尝试检索所有子项时,ZK客户端由于ConnectionLossException而崩溃。

数据重塑可能会解决问题(例如,通过分批存储,因为它减少了每个节点的子代数量)。

但是,我很好奇知道以下问题的答案:

  • ZK对可以存储在一个节点上的数据有一个限制(不超过1MB),每个节点的子代数量是否有类似的限制?
  • 增加Java堆大小是否可以使ZK扩展每个节点的子代数?
  • 是否可以控制将这些子级发送回客户端的方式?如果将 child 分批发送,则网络“打ic”可能会破坏消息并导致失败。

  • 谢谢!

    最佳答案

    子女人数没有明确限制。

    但是,有一个
    限制了可以从服务器发回的数据包的大小
    getChildren的响应实际上是极限。这是
    由系统属性jute.maxbuffer控制,默认为4MB(
    认为您可以在其中获得约200,000个znode,尽管这还取决于
    在znode名称的长度上)。

    查看this link以获取完整的讨论。

    关于java - ZooKeeper每个节点的最大子代数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29791134/

    10-10 18:27