gpt4 book ai didi

janusgraph - 已超过最大帧长 65536

转载 作者:行者123 更新时间:2023-12-04 00:51:20 24 4
gpt4 key购买 nike

我有一个设置,我使用 gremlin-core 库来查询远程 Janusgraph 服务器。数据大小目前适中,但将来会增加。

几天前,我在我的客户端上看到“已超出最大帧长度 65536”错误。我的服务器 yaml 文件中 maxContentLength 参数的值设置为默认值 (65536)。我挖掘了代码并意识到我正在发送大量顶点 id 作为查询参数来获取顶点。我将一个批次应用于每个批次 100 个顶点 id 的数组,它解决了这个问题。

一段时间后,我开始在客户端日志中再次看到此错误。这一次,没有向服务器发送大量参数的查询。我看到了一个关于这个主题的建议解决方案,它说我还需要在客户端设置 maxContentLength 参数。我这样做了,问题得到了解决。但是,它提出了一些关于配置参数、它们的值以及它们对查询请求/响应大小的影响的问题。

  • maxContentLength 参数是否与查询的响应大小有关?如果是,我如何根据我的数据库大小计算此参数的值?
  • 是否有任何其他参数指示请求中查询参数的最大大小?如果是,它们是哪些以及它们与查询参数的大小有何关系?
  • 是否有任何参数决定查询响应的大小?如果是,它们是哪些以及它们与查询响应的大小有何关系?

  • 这些问题的答案对于我制作一个不会在数据冲击下崩溃的强大服务器至关重要。

    提前致谢

    安雅

    最佳答案

    maxContentLength是单个“消息”作为请求或响应可以包含的字节数。它提供与 Web 服务器中类似设置相同的功能,以允许过滤明显无效的请求。该设置与数据库大小无关,而与您发出的请求类型和结果的性质有关。对于请求,我倾向于认为在大多数情况下请求超过 65k 是不典型的。超过这个大小的人通常会尝试进行批量加载或使用代码生成的脚本(后者通常有问题,但我不会详细介绍)。对于回复,根据查询的性质,65k 可能不够。例如,查询:

    g.V().valueMap(true)

    将以 Iterator<Map> 的形式返回数据库中的所有顶点并且 Gremlin 服务器将这些结果以由 resultIterationBatchSize 控制的批次流回(默认值为 64)。因此,如果您的数据库中有 128 个顶点,那么 Gremlin 服务器将在后台回传两批结果。如果这两个批次均低于 maxContentLength在大小然后没有问题。如果您的批次比这更大(因为您说每个顶点有 1000 个属性),那么您要么需要
  • 限制您返回的数据 - 例如返回较少的属性
  • 增加maxContentLength
  • 降低resultIterationBatchSize

  • 另请注意,先前的查询与以下内容非常不同:
    g.V().valueMap(true).fold()

    因为 fold()将在内存中将所有顶点实现为一个列表,然后该列表必须作为一个整体进行序列化。只有 1 个结果(即 List<Map> 有 128 个顶点),因此不需要批处理,因此您更有可能超过 maxContentLength在这里并降低 resultIterationBatchSize甚至没有帮助。你唯一的办法就是增加 maxContentLength或更改查询以允许批处理启动以希望分解大块数据以适应 maxContentLength .

    设置您的 maxContentLength到 2mb 或更大应该没什么大不了的。如果您需要更高的请求,那么我很好奇这是什么原因。如果您需要更高的响应,那么也许我会看看我的查询,看看是否有更好的方法来限制我返回的数据,或者看看是否有更好的方法让 Gremlin Server 流式传输到为我工作。

    关于janusgraph - 已超过最大帧长 65536,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57771803/

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