首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当添加两个或更多权限条件时,Hasura查询变得指数级地变慢

。Hasura是一个开源的GraphQL引擎,用于构建实时应用程序。它提供了强大的权限系统,可以通过定义权限条件来限制对数据的访问。

当我们在Hasura中添加多个权限条件时,每个条件都需要进行计算和验证。这意味着每个权限条件都会增加查询的复杂性和执行时间。当权限条件增加到两个或更多时,查询的执行时间会呈指数级增长,导致查询变得非常缓慢。

为了解决这个问题,我们可以考虑以下几点:

  1. 优化权限条件:仔细审查每个权限条件,确保它们是必要的。如果可能的话,尽量减少权限条件的数量,以减少查询的复杂性。
  2. 使用索引:在数据库中创建适当的索引,以加快查询的执行速度。索引可以帮助数据库快速定位符合权限条件的数据。
  3. 缓存查询结果:如果查询的结果不经常变化,可以考虑使用缓存来存储查询结果。这样可以避免每次查询都重新计算权限条件。
  4. 分批处理数据:如果查询的数据量非常大,可以考虑将数据分批处理,以减少每次查询的负载。可以使用分页或者其他分割数据的方法来实现。
  5. 使用Hasura性能优化工具:Hasura提供了一些性能优化工具,可以帮助我们分析和优化查询的性能。可以使用这些工具来定位性能瓶颈,并采取相应的优化措施。

总结起来,当添加两个或更多权限条件时,Hasura查询变得指数级地变慢。为了解决这个问题,我们可以优化权限条件、使用索引、缓存查询结果、分批处理数据,并使用Hasura性能优化工具来提升查询的执行速度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

用Go重写Node.js服务:项目性能提升5倍,内存减少40%

其目的是能够利用云存储服务,同时也利用 hasura 的功能,如它的 graphql API、权限、行动、预设等。...使用了 k6 并设计了以下测试: 当测试开始时,它会在前 10 秒内将 workers 的数量从 1 增加到 TARGET 然后再运行 60 秒才结束。...图片 另一个重要的指标是响应时间,Hasura Storage 提供了两个数据:最小响应时间,开源告诉我们系统未承受压力时的响应时间;以及 P95,开源告诉我们大多数用户的响应时间最多是多少...(包括当系统处于压力之下)。...图片 Hasura Storage 方面表示,他们决定重写服务是为了提高性能指标;而在对两个服务进行并列基准测试后,他们也可以有底气的宣称成功地显着改善了所有指标。

4.1K10

用Go重写:项目性能提升5倍,内存减少40%

其目的是能够利用云存储服务,同时也利用 hasura 的功能,如它的 graphql API、权限、行动、预设等。...使用了 k6 并设计了以下测试: 当测试开始时,它会在前 10 秒内将 workers 的数量从 1 增加到 TARGET 然后再运行 60 秒才结束。...另一个重要的指标是响应时间,Hasura Storage 提供了两个数据:最小响应时间,开源告诉我们系统未承受压力时的响应时间;以及 P95,开源告诉我们大多数用户的响应时间最多是多少(包括当系统处于压力之下...“这是一项重大改进,可以让我们在不增加整体基础设施费用的情况下为更多用户和流量提供服务。”...Hasura Storage 方面表示,他们决定重写服务是为了提高性能指标;而在对两个服务进行并列基准测试后,他们也可以有底气的宣称成功地显着改善了所有指标。

34530
  • 我们在未来会怎样构建Web应用程序?

    不管怎样,它们通常是与客户端非常紧密地耦合的。为什么我们不能直接将数据库暴露给客户端呢?  F. 权限 好吧,我们不这样做的原因是我们需要确保权限正确设置。例如,你应该只能看到你好友的帖子。...理想情况下,我们应该有一些非常接近数据库的东西,确保任何数据访问都通过权限检查。像 Postgres 这样的数据库有行级安全性,但这很快就会变得很麻烦。...它提供了对权限的支持,从而消除了对端点的需求。 K 问题也可以从中大大获益:我认为它的原型制作速度表现还是市面上最出色的。你只需从index.html开始就行了! 但它也有两个问题: 第一,查询能力。...虽然你可以做查询,但你要自己负责正则化并处理数据。这意味着它不能自动进行乐观更新,不能做响应式查询等。他们的权限模型也很像 Firebase,因为它遵循了 Postgres 的行级安全性。...Supabase 以牺牲更多客户端支持为代价为你提供了更好的查询能力。Hasura 以牺牲原型制作速度为代价,为你提供了更强大的订阅和更强大的本地状态。

    10K30

    设计数据网格以控制数据蔓延

    服务 提供数据通常使用查询语言或 API 进行。 查询语言是一种通用的、高度灵活的、高表达性的语言,它在一个操作中表示临时数据请求的全部意图。...细心的读者会注意到这两个列表中都出现了 GraphQL;稍后会对此进行更多说明。 将数据网格变为现实 三种技术应运而生,使数据网格成为现实:数据目录、API 网关和分布式查询引擎。...它们以更复杂的执行模型为基础,在 Atlan 和 OpenMetadata 等数据目录的简单直通 SQL 之上添加了跨数据库连接、谓词下推和相对高效的查询处理。...两个领先的选择,Hasura 和 Apollo Router,可以很好地协同工作,但是只有 Hasura 才能真正为使用 GraphQL 调整现有数据源做好准备。...许多人正在认识到它在机器学习、分析或数据密集型应用中的效用,所有这些都成为当今数据生态系统中竞争的必备条件。

    12010

    激荡二十年:HTTP API 的变迁

    GraphQL 的理想情况一直没有很好地达成,因为服务端不可能为一个多层随意嵌套的查询去准备数据。...同时 GraphQL 还有其他很多设计上考虑不周的问题,其中最让人诟病的是,对 HTTP 协议的无视,也就导致整个 HTTP 生态和 GraphQL 工作地很别扭,还有查询时 n+1 的问题(data...2020:我的第三次 API 工具的探索 如果说 goldrin 是一个被外部环境倒逼出来的急中生智,quenya,则更多像是我在无拘无束的条件下,把我之前做过的诸多系统回溯一下,集大成的找乐子项目。...前面提到的 GraphQL 令人诟病的 n+1 的问题,在 Hasura 面前都不是是个事,因为引发 n+1 问题的嵌套查询,翻译成 SQL 就是一个 INNER JOIN,于是 n+1 问题就这么被悄无声息地解决了...我们欣喜地看到,postgREST 和 Hasura 这样的项目,在努力往这个方向发展。

    1.8K30

    join查询可以⽆限叠加吗?MySQL对join查询有什么限制吗?

    比如,当同时对 10 张以上的大表进行 JOIN 查询时,可能会导致内存不足,使得查询时间从原本的秒级延长到分钟级甚至更长。磁盘 I/O 资源:在处理 JOIN 查询时,数据库需要从磁盘读取表的数据。...如果 JOIN 的表数量过多,磁盘 I/O 操作会变得频繁,成为查询性能的瓶颈。特别是对于存储在机械硬盘上的数据库,过多的 JOIN 查询会使磁盘寻道时间增加,导致查询速度变慢。...性能限制查询复杂度:JOIN 查询的复杂度会随着表数量的增加呈指数级增长。即使每个表的数据量不大,过多的 JOIN 操作也会使查询计划变得非常复杂,优化器可能难以找到最优的执行计划。...不同版本的 MySQL 对表数量的实际承受能力不同,一般来说,当 JOIN 的表数量超过 10 张时,就可能会出现性能问题或语法解析错误。...当被驱动表上有适合连接条件的索引时,MySQL 会使用索引来加速内层循环的查找过程。

    5010

    日活3kw下,如何应对实际业务场景中SQL过慢的优化挑战?

    在执行计划中,当看到key字段有值且type为index时,很多人错误地认为这表示查询已经利用了索引。...通过优化查询条件、添加索引、限制返回字段等方式,可以改善这个查询的性能,使其执行更加高效。 为什么互联网公司都不建议使用多表join?...在实际应用中,如果有两个表进行JOIN操作,复杂度最高可以达到O(n^2),而对于三个表则是O(n^3),随着表的数量和数据量的增加,JOIN操作的效率会呈指数级下降。...情况五:表中数据量太大 当单个表中的数据量超过1000万条时,通常会导致查询效率下降,即使使用了索引也可能变得比较缓慢。在这种情况下,单纯建立索引并不能完全解决问题。...当多个并发请求争夺共享资源时,会导致锁等待,进而增加执行时间,使SQL变慢。这种情况也会类似于CPU被打满的问题。

    15210

    MySQL深分页,limit 100000,10 优化

    文章目录一、limit深分页为什么会变慢二、优化方案2.1 通过子查询优化(覆盖索引)回顾B+树结构覆盖索引把条件转移到主键索引树2.2 INNER JOIN 延迟关联2.3 标签记录法(要求id是有序的...)2.4 使用between...and...我们日常做分页需求时,一般会用limit实现,但是当偏移量特别大的时候,查询效率就变得低下。...(每一条select语句都会从1遍历至当前位置,若跳转到第10000页,则会遍历100000条记录)执行计划如下:SQL变慢原因有两个:limit语句会先扫描offset+n行,然后再丢弃掉前offset...limit 100000,10 扫描更多的行数,也意味着回表更多的次数。...—— 当发起一个索引覆盖查询时,在explain的extra列可以看到using index的信息 可以看到Extra中的Using index,表明我们成功使用了覆盖索引 把条件转移到主键索引树如果我们把查询条件

    76410

    别让 If-Else ,变成 “懒婆娘的裹脚布”

    当需要对功能进行修改或添加新功能时,牵一发而动全身,很容易引入新的错误,极大地增加了软件开发与维护的成本。可以说臃肿的 if-else判断,像极了懒婆娘的裹脚布。...特别是当if-else语句用于处理多种不同类型的业务逻辑时,代码所表达的意图会变得模糊不清,甚至可能对开发者产生误导。举例来说,在实现一个用户权限管理功能时,往往需要对多个权限进行判断。...以之前提到的用户权限管理代码为例,如果后续需要为不同的用户角色添加更多的权限判断逻辑,开发者就必须逐个对现有的if-else语句进行修改,增加新的条件分支。...这就要求开发者必须编写大量的测试用例,以涵盖各种可能的条件组合。尤其是在处理复杂的业务逻辑时,测试用例的数量会呈指数级增长。当存在多种不同的输入组合时,测试工作的难度更是急剧上升。...当需要新增或修改权限策略时,只需要在工厂类中进行相应的调整,而不会对权限检查的核心逻辑造成影响,大大提高了代码的扩展性和可维护性。

    31320

    2020年AWS,Microsoft和Google应进行的云收购

    通过适当的添加,这些提供商可以为他们的客户增加可观的利益,并使自己能够更有利地衡量其竞争对手。此外,有成长中的高科技公司具有出色的领导才能,可以做出这些改进。...而且,由于构建这些服务的团队都是相对独立的,因此即使他们已经精通该平台的另一部分,当他们使用新的AWS工具时,用户通常也面临着重大的学习曲线。 亚马逊已经做出了一些努力来解决这个问题。...这包括使其用户数据库更多地成为真实的数据存储,功能齐全的Web控制台,该控制台支持编辑以及简单,全面的社交登录以及安全性声明标记语言集成。...IT团队不可避免地必须在其前面运行本地代理,并且他们需要在数据进入Elasticsearch时对数据进行处理-更不用说围绕水平扩展的麻烦了。...Google在添加服务时在竞争中拥有巨大的早期优势,但是在2014年使用Firebase的人今天可能不会注意到除了增加功能之外的很大差异。

    6.6K20

    业界时评 | Twitter如何使用Redis提高可伸缩性

    针对度量值与灵活样式这两种场景,都需要更多空间。为提高空间的有效性,就需要具有分层的键空间。 根据业务需要,Twitter为Redis增加了两种数据结构:Hybrid List与BTree。...例如当数据量巨大时,ziplist在添加或删除元素的性能方面表现得不如人意;而linklist由于为每个key提供了两个指针,就可以更加高效地添加或删除元素,遗憾的是,多余的指针又会带来空间的浪费。...在Redis中,处理二级键(Secondary Key)或二级域(Secondary Field)的方式是使用hash map。之所以要存储排序后的数据,就是为了更好地执行区间查询。...如果二级键或名称无法排序,且数据量较大时,查询就变成了线性的,效率较低。BTree正是为了解决此问题,它借鉴了BTree的伯克利算法,在分级key的区间查询方面具有更好的性能。...如果存在多个分区,当其中一个变慢,则整个查询也会变慢。 明确的配置对于运维非常重要。Twitter使用Mesos作为Job Scheduler,对CPU、内存等资源的管理与监控有助于更好的运维。

    1.1K60

    使用数据库编程在PostgreSQL上构建石头剪刀布游戏

    一旦您的应用程序被拆分为两个通过网络通信的组件(例如服务器和数据库),您就必须处理在分布式系统中维护正确性的挑战,从而有效地放弃了现代关系数据库免费提供的许多功能。...这种趋势最明显的例子是两个广受欢迎的开源项目的成功:Hasura 和 Supabase。...Hasura 是一款实时 GraphQL 引擎,它可以立即在新的或现有的 Postgres 数据库上为您提供 GraphQL API。...利用触发器、函数和 RLS(行级安全),Hasura 使开发人员能够构建高性能、可扩展且安全的应用程序,而无需编写样板后端代码。...通过将逻辑推送到数据库,Supabase 使开发人员能够轻松地创建功能强大的应用程序,而无需付出太多努力。PostgreSQL 的复杂查询、数据转换和访问控制功能确保了性能和安全性。

    13410

    P问题、NP问题、NPC问题

    也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。...不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n...总结来说,多项式复杂度的比指数级复杂度的算法要好很多。...到这里我们注意到NPC问题是有两个条件的:      →首先,它得是一个NP问题;      →然后,所有的NP问题都可以约化到它。      证明一个问题是 NPC问题也很简单。...我们可以就此直观地理解,NPC问题目前没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的搜索。

    1.9K60

    实战!聊聊如何解决MySQL深分页问题

    我们日常做分页需求时,一般会用limit实现,但是当偏移量特别大的时候,查询效率就变得低下。本文将分4个方案,讨论如何优化MySQL百万数据的深分页问题,并附上最近优化生产慢SQL的实战案例。...SQL的执行流程 执行计划如下: SQL变慢原因有两个: limit语句会先扫描offset+n行,然后再丢弃掉前offset行,返回后n行数据。...limit 100000,10 扫描更多的行数,也意味着回表更多的次数。 通过子查询优化 因为以上的SQL,回表了100010次,实际上,我们只需要10条数据,也就是我们只需要10次回表其实就够了。...因为二级索引叶子节点是有主键ID的,所以我们直接根据update_time来查主键ID即可,同时我们把 limit 100000的条件,也转移到子查询,完整SQL如下: select id,name,balance...,只需要0.034秒 执行计划如下: 查询思路就是,先通过idx_update_time二级索引树查询到满足条件的主键ID,再与原表通过主键ID内连接,这样后面直接走了主键索引了,同时也减少了回表。

    1.7K20

    精选MySQL面试题(附刷题小程序)

    table_priv权限表: 记录数据表级的操作权限。 columns_priv权限表: 记录数据列级的操作权限。 host权限表: 配合db权限表对给定主机上数据库级操作权限作更细致的控制。...对视图内容的更新(添加,删除和修改)直接影响基本表。 当视图来自多个基本表时,不允许添加和删除数据。 7.5 视图的优点有那些? 查询简单化。视图能简化用户的操作 数据安全性。...因为当一个表的数据量很大时,会由于使用频率低的字段的存在而变慢。 增加中间表对于需要经常联合查询的表,可以建立中间表以提高查询效率。...水平拆分是指数据表行的拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。...当排序字段就是分片字段的时候,我们通过分片规则可以比较容易定位到指定的分片,而当排序字段非分片字段的时候,情况就会变得比较复杂了。

    75230

    MySQL 中最容易踩的 15 个坑 !

    但随着用户量越来越多,表中数据在呈指数级的增加。 突然有一天发现,查询数据变慢了。...这样就可以不用查询前面的数据,提升不少的查询效率。 但这套方案有两个需要注意的地方: 需要记录上一次的查询出的id,适合上一页或下一页的场景,不适合随机查询到某一页。需要id字段是自增的。...5.2 使用子查询 先用子查询查询出符合条件的主键,再用主键id做条件查出所有字段。...13 频繁修改表或数据 在高并发场景下,频繁添加、修改字段,或者批量更新数据,导致系统性能下降。...我们在使用alter添加或者修改表字段,或者使用update批量更新,或者使用delete批量删除数据时,都可能会锁表。 如果此时正好有大量的用户请求过来了,会导致系统响应变慢。

    14710

    大表优化的常见手段

    当 MySQL 单表记录数过大时,数据库的 CRUD 性能会明显下降,一些常见的优化措施如下: 限定范围: 务必禁止不带任何限制数据范围条件的查询语句,比如:当用户在查询订单历史的时候,可以控制在一个月的范围内...例如,用户表中既有用户的登录信息,又有用户的基本信息,可以将用户表拆分成两个单独的表,甚至放到单独的库做分库。简单来说,垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表。 如下图所示: ?...垂直分区 垂直拆分的优点: 可以使行数据变小,在查询时减少读取的 Block 数,减少 I/O 次数。此外,垂直分区可以简化表的结构,易于维护。...此外,垂直分区会让事务变得更加复杂; 水平分区: 保持数据表结构不变,通过某种策略存储数据分片。这样每一片数据就分散到不同的表或者库中,达到了分布式的目的。 水平拆分可以支撑非常大的数据量。...水平拆分是指数据表行的拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。

    71800

    关于 MySQL 的知识点与面试常见问题都在这里

    这里的查询条件包括查询本身、当前要查询的数据库、客户端协议版本号等一些可能影响结果的信息。因此任何两个查询在任何字符上的不同都会导致缓存不命中。...next-key lock Next-locking keying为了解决Phantom Problem幻读问题 当查询的索引含有唯一属性时,将next-key lock降级为record key Gap...将参数innodb_locks_unsafe_for_binlog设置为1 ⑦大表优化 当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下: 限定数据的范围: 务必禁止不带任何限制数据范围条件的查询语句...例如,用户表中既有用户的登录信息又有用户的基本信息,可以将用户表拆分成两个单独的表,甚至放到单独的库做分库。 简单来说垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表。...水平拆分是指数据表行的拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。

    63230

    Java中集合的的多字段排序(链式排序)详解

    后续排序条件:当元素的第一个排序条件相等时,thenComparing() 会根据第二个排序条件对这些相等的元素进行排序。...继续添加排序条件:可以链式地添加多个 thenComparing(),每个排序条件依次作用,直到所有排序条件都被应用。...4.2 链式排序的性能 链式排序的性能基本上是线性的,即对于 n 个元素,排序的时间复杂度是 O(n log n),每添加一个排序条件时,会增加一次比较操作,导致时间复杂度保持在 O(n log n)...因此,链式排序相对高效,不会因为排序条件的增加而导致指数级的性能下降。 4.3 自定义排序条件 有时我们需要更灵活的排序条件,可以使用自定义的比较器。...:当排序条件过多时,链式排序的表达式可能变得非常长,导致代码难以阅读和维护。

    17010

    团队交付的速度变慢了,我该怎么办?

    是什么导致团队在发展过程中放慢脚步 通常情况下,当团队迅速扩大规模时,例如随着对公司投资和技术团队的增长,交付速度通常会开始变慢。我相信有很多原因导致团队在快速发展的环境中慢下来。...最后,有时候这只是一个感知或优先级问题。快速扩张的公司的管理者通常习惯于事无巨细地了解正在发生的事情,因为在这些公司规模还很小的时候,这很容易做到。...我们相信 8 个人的团队既具备取得成功所需的技能,同时又不会让人感觉团队变得迟钝。当一个团队让人感觉到迟钝时,你就会发现,每天的站会变得无聊,参与度下降,保持沟通也变得困难。...我所看到的是,当需要考虑技术债务或战略性技术工作优先级但却不清楚这些工作的价值时,会出现更多一致性方面的问题。...这也是当人们加入或离开团队以及团队动态发生变化时应该重新审视的东西。我介绍了更多关于 定义和使用团队章程) 的方法,如果你想了解更多,可以了解一下它们。

    43220
    领券