实现graphqlapi的高性能库

graphlayer的Python项目详细描述


为什么是Graphlayer?

是什么导致graphqlapi运行缓慢? 在graphql的大多数实现中, 对响应中的每个节点运行解析函数。 这可能导致性能不佳,主要有两个原因。 第一个是n+1问题。 第二个是为响应中的每个节点调用潜在的异步解析函数的开销。 尽管每次调用的开销很小, 对于大型数据集,这些开销的总和可能是响应的绝大多数时间。

graphlayer建议可以根据请求的形状而不是响应来调用resolve函数。 这样就避免了n+1问题而不引入额外的复杂性, 例如以dataloader和类似库的方式对请求进行批处理, 并允许以更自然地映射到数据存储(如SQL数据库)的样式编写解析函数。 其次,尽管调用resolve函数仍然有开销, 此开销乘以请求中的节点数而不是响应: 对于大型数据集,这是相当大的节省。

作为一个具体的例子,考虑查询:

query {
    books {
        title
        author {
            name
        }
    }
}

天真的graphql实现会发出一个sql查询来获取所有书籍的列表, 然后查询每本书的作者。 使用dataloader,获取每本书作者的n个查询将组合成一个查询。 使用GraphLayer,只需一个查询即可获得作者,而无需任何批处理。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在java中查找特定命名方案的所有文件   java需要帮助在这个程序中查找错误,编译但不是计算机所必需的数字   java Androidsocket连接被拒绝   java在单元测试中使用Intent类   sql server 2008换行转义序列在Java中没有以正确的方式回避   嵌入十六进制编码的unicode Java字符串   java无法为类实现tester程序   为json字符串创建通用java映射器   java如何将2个TextView与Android中的if-else条件放在同一位置   java如何初始化锁?   为什么我的多项式类加法函数不起作用?   java Intellij不使用库构建JavaFX   java为什么在EJB类上同时使用@LocalBean和接口?   java无法在Spring Security中登录   Java中的文件创建   运行servlet需要哪个JRE。。服务器JRE还是客户端JRE?   来自Windows命令行的SOAP Web服务中的java SSL证书问题   java JPA如何为实体实施OneOnOne关系?