2021-03-13 10:46
在项目 Askent 开发中,需要同步管理后台、客户端、演示大屏,三端上的消息显示,继之前使用 Apollo Subscription 基于 Pub/Sub 开发遇到问题,然后参照 DeepStream 的 Realtime Search 思路实现一版后,仍有一个严重的性能问题无法解决——每个客户端会话权限、查询变量各不同,因此一个提问的 Pub 事件需要为每个客户端执行一次(实际是两次,见下文流程图)查询,再计算 diff 后向对应客户端推送增量数据。虽未进行压力测试,但可以预见这是个严重耗费性能的不好的设计。
该实时搜索实现的流程如下图:
它总体分为两步:
偶然看到文章 GraphQL tools & libraries 中介绍 Hasura - instant realtime GraphQL APIs on any Postgres database。
看了文档 Scaling to 1 million active GraphQL subscriptions (live queries)(中文),发现它正是我需要的。
目前替换提问列表的实时查询,包含用户权限的请求待验证。
其他可用的实时查询、实时数据库工具: