实现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第三方库


热门话题
orm如何在Java中实现规范化映射?   java以编程方式修改Xtext生成的Mwe2工作流   java正在覆盖外部文件中的现有数据,如何停止?   java在ANTLR BNF语法符号中epsilon的等价物是什么?   java如何使用Hibernate@Anyrelated注释?   代码生成生成java类并在运行时加载它   java Maven无法在本地jar文件中收集依赖项   java NetBeans IDE 8.2不显示错误消息   java Selenium web驱动程序找不到元素   java如何修复“拒绝访问属性”invoke“”的权限?   JavaApacheJClouds,从比日期更早的blob中删除blob的最佳方法   java如何比较和排序树集中的项目?   使用JavaSpring和无头/解耦CMS   java使用swagercodegen在不同的类中生成端点   Java外部Keylistener没有响应