car*_*ted 10 facebook cassandra graphql graphene-python
像Cassandra这样的数据库和像GraphQL这样的方案能很好地协同工作吗?
Cassandra意识形态基于优化查询和非规范化数据的想法.这似乎与GraphQL意识形态没有很好的理解,在这种意识形态中,数据似乎可以在查询的每个级别中访问.
示例:假设我构建了我的Cassandra表,如下所示:
User:
name
address
etc... (many properties)
Group:
id
name
user_name (denormalized user, where we generally just need the name of a user)
Run Code Online (Sandbox Code Playgroud)
但是使用GraphQL,人们不会完全期望非规范化的用户.
query getGroup {
group(id: 1) {
name
users {
name
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以有两件事:1.)这个GraphQL查询最终会多次命中我们的Cassandra数据库(假设没有缓存).获取组名称和每个用户,我们甚至可以为每个用户点击它.但是,假设我们的解决方案使用一个cassandra调用创建多个User对象.
2.)我们无法真正构建一个带有非规范化和graphql的cassandra惯用数据库,我们可以吗?否则,我们应该期望用户的某些属性不会返回给我们查询.
总结一下这个问题,使用非规范化数据的graphql策略是什么?省略客户认为可以访问的某些属性是否可以接受?例如,客户端尝试访问用户的地址但我们目前没有,因为我们的数据是非规范化的.或者甚至不应该担心非规范化,只是让graphQL使用db和graphql之间的缓存机制进行调用.例如,graphql首先获取组,然后获取组ID的用户数据.
小智 1
这是 GraphQL 的副作用,查询在检索数据时可能会变得非常复杂。但是,只要用户实际请求他们需要的数据,如果您对解析器很聪明,最终结果实际上会更快。
在解析查询时考虑使用数据加载器等工具进行缓存。
至于省略某些属性,graphql 会验证响应并会抛出错误,尽管它也会返回您提供的数据。如果检索数据出现问题,最好实现某种超时并抛出更具描述性的错误。
| 归档时间: |
|
| 查看次数: |
1358 次 |
| 最近记录: |