像 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)
但是对于 GraphQL,它不会完全期望一个非规范化的用户。
query getGroup {
group(id: 1) {
name
users {
name
}
}
}
所以有几件事:1.)这个 GraphQL 查询最终可能会多次访问我们的 Cassandra 数据库(假设没有缓存)。获取组名和每个用户,我们甚至可以为每个用户点击它。但是假设我们的解决方案通过一个 cassandra 调用创建了多个用户对象。
2.) 我们不能真正构建一个考虑到非规范化和 graphql 的 cassandra 惯用数据库,可以吗?否则,我们应该期望用户的某些属性不会随查询返回给我们。
总结一下这个问题,处理非规范化数据的 graphql 策略是什么?忽略客户认为可以访问的某些属性是否可以接受?例如,客户端尝试访问用户的地址,但我们目前没有,因为我们的数据是非规范化的。或者甚至不应该担心非规范化,而只是让 graphQL 在 db 和 graphql 之间使用缓存机制进行调用。例如,graphql 首先获取组,然后获取组 id 的用户数据。