4

我正在寻找一个使用 Scylla 或 Cassandra 作为后端的图形数据库,然后将 web api 公开为 GraphQl。

你能帮我验证一下我是否正确地得到了以下堆栈:

  1. GraphQl 或 TinkerPop // Api 模式,暴露 api
  2. JanusGraph(privious Titan) // 促进图结构的数据库层
  3. Cassasndra 或 Scylla
4

2 回答 2

12

尽管只是为了帮助澄清,但您几乎做对了:

GraphQL 是一种抽象,旨在帮助开发人员简化开发/数据访问。您必须创建一个将 GraphQL 转换为 Gremlin 的服务。

您设想的堆栈如下所示:

GraphQL -> Gremlin/TinkerPop -> JanusGraph -> DataStore(Cassandra、Scylla 等)。

就数据存储而言,JanusGraph 与 Apache Cassandra 和 Scylla 兼容。

于 2017-12-18T22:21:15.533 回答
1

我喜欢@MarcintheCloud 的回答,只是想解释一下并给出我对问题的解决方案。

GraphQL 不关心或不依赖于任何特定的数据库类型、KV、Graph、Document 等,实际上它把自己推销为能够从不同来源获取数据。因此,您可以创建一个 UI 来从 redis 中获取最新的股票价格、从 Mongo 中获取股票历史记录以及从 Elasticsearch 中按名称获取类似股票。GraphQL 将让您从 API 中抽象出这种复杂性(但它仍然存在于其他地方),允许您一次性获取所有数据。GraphQL 和 Graph 数据库之间没有关系。

简而言之,Gremlin 是一种强大的图遍历,可与 SQL 用于某些关系数据库相媲美。

抛开定义不谈,我使用它们的方式是将 GraphQL 映射到 Gremlin。我试图围绕它创建一个标准https://github.com/The-Don-Himself/graphql2gremlin。基本上,它通过在顶点和边之间交换 GraphQL 参数来工作,所以像这样的 GraphQL 查询

{
  users(
    following: {
      users: {
        user_id: "eq(5)"
      }
    }
  ) {
    user_id
    username
    bio
  }
}

意味着获取 user_id 5 的用户关注者并获取 id、username 和 bio 字段。Gremlin 示例中有更复杂的 GraphQL 示例,它非常适合我的用例。

gremlin 遍历可能看起来像这样

g.V().hasLabel('users').has('user_id', eq(5)).in('following').hasLabel('users').values('user_id', 'username', 'bio')

如果您想使用它,我还开源了一个 PHP 中的示例 Twitter Graph https://github.com/The-Don-Himself/gremlin-ogm

于 2018-01-04T01:37:35.403 回答