Cassandra/Scylla作为JanusGraph的图形数据库后端,并通过GraphQl公开API。

6
我正在寻找一种使用Scylla或Cassandra作为后端的图形数据库,然后将其暴露为GraphQl Web API。
您能帮我验证一下我是否正确地使用以下技术栈:
1. GraphQl或TinkerPop // Api架构,公开api 2. JanusGraph(之前是Titan)// 数据库层,促进图形结构 3. Cassasndra或Scylla
2个回答

13

你已经基本理解了,但是为了更清晰地帮助解释:

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

你设想的技术栈如下:

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

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


1
IBM选择了JanusGraph和Scylla作为他们的Compose DBaaS。关于这个选择的细节在一次会议上得到了讨论: http://www.scylladb.com/tech-talk/performance-evaluation-scylla-database-backend-janusgraph-scylla-summit-2017/ - TomerSan

2
我喜欢@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
  }
}

获取用户id为5的粉丝,包括id、用户名和简介字段。还有更复杂的GraphQL到Gremlin示例代码,对于我的用例非常完美。
Gremlin遍历可能是这样的:
g.V().hasLabel('users').has('user_id', eq(5)).in('following').hasLabel('users').values('user_id', 'username', 'bio')
如果您想尝试玩一下,我还在PHP中开源了一个Twitter图https://github.com/The-Don-Himself/gremlin-ogm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接