Graphql 使用RDBMS实现查询节点(id:id!)的最佳方式是什么

Graphql 使用RDBMS实现查询节点(id:id!)的最佳方式是什么,graphql,relay,graphql-java,Graphql,Relay,Graphql Java,GraphQL和Relay规范要求查询类型和节点(id:id!)字段的描述和实现如下: type Query { node(id: ID!): Node } 中继希望通过id重新蚀刻任何对象。这意味着服务器应该以某种方式了解它应该查找哪种类型的对象。要扫描的数据库中的哪个表。 很明显,id不能只是串行id或uuid,因为在本例中,它必须扫描所有表。这是一个糟糕的方法 我找到了将对象id及其类型编码的解决方案,以便能够理解要查询的表。base64中编码的类似“24|User”的代码将给出唯一

GraphQL和Relay规范要求查询类型和节点(id:id!)字段的描述和实现如下:

type Query {
  node(id: ID!): Node
}
中继希望通过id重新蚀刻任何对象。这意味着服务器应该以某种方式了解它应该查找哪种类型的对象。要扫描的数据库中的哪个表。 很明显,id不能只是串行id或uuid,因为在本例中,它必须扫描所有表。这是一个糟糕的方法

我找到了将对象id及其类型编码的解决方案,以便能够理解要查询的表。base64中编码的类似“24|User”的代码将给出唯一标识符“MjR8VXNlcg==”。我很肯定这种方法会奏效,但我想知道有没有更好的方法来处理这种情况?备选方案是什么?

给出了答案

没有全局唯一ID的系统通常可以通过将类型与特定于类型的ID相结合来合成它们


那么我在问题中做了什么。然而,他们使用了另一种格式:“TypeName:id”。

“24 | User”与“MjR8VXNlcg==”一样独特,我看不出进行Base64编码有什么意义,Base64用于将二进制数据编码成ASCII字符集,这里几乎所有系统都知道这一点。您没有处理二进制数据,因此此步骤完全没有必要。是的,您是对的。也可以这样做