首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GraphQL、卡桑德拉和反规范化策略

问GraphQL、卡桑德拉和反规范化策略
EN

Stack Overflow用户
提问于 2017-02-20 13:01:35
回答 1查看 1.7K关注 0票数 11

像Cassandra这样的数据库和像GraphQL这样的方案能很好地协同工作吗?

Cassandra的思想是基于优化查询和非规范化数据的思想。这似乎不太符合GraphQL的思想,在这种思想中,数据似乎可以在每个级别的查询中访问。

示例:假设我像这样设计我的Cassandra表:

代码语言:javascript
复制
User:
    name
    address
    etc... (many properties)

Group:
    id
    name
    user_name  (denormalized user, where we generally just need the name of a user)

但是有了GraphQL,就不会有一个非规范化的用户了。

代码语言:javascript
复制
query getGroup {
   group(id: 1) {
     name
     users {
         name
     }
   }
}

所以有几件事: 1.)这个GraphQL查询可能会多次命中我们的Cassandra数据库(假设没有缓存)。获取组名,对于每个用户,我们甚至可以为每个用户命中它。但是假设我们的解决方案使用一个cassandra调用创建了多个用户对象。

2.)我们不能真的在考虑反规范化和graphql的情况下构建cassandra惯用数据库,不是吗?否则,我们应该期望用户的某些属性不会通过查询返回给我们。

总结这个问题,使用非规范化数据的graphql策略是什么?省略客户端认为可以访问的某些属性可以接受吗?例如,客户端试图访问用户的地址,但我们目前没有该地址,因为我们的数据是反规范化的。或者人们甚至不应该担心反规范化,而只是让graphql在db和graphQL之间使用缓存机制进行调用。例如,graphql首先获取组,然后获取组id的用户数据。

EN

回答 1

Stack Overflow用户

发布于 2018-07-12 00:15:32

这是GraphQL的一个副作用,查询在检索数据时会变得非常复杂。但是,只要用户确实在请求他们需要的数据,如果您对解析器很聪明,那么最终结果实际上会更快。

在解析查询时,可以考虑使用像dataloader这样的工具进行缓存。

就忽略某些属性而言,graphql会验证响应并抛出一个错误,尽管它也会返回您给出的数据。如果在检索数据时出现问题,最好实现某种超时并抛出更具描述性的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42336833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档