Cassandra / Scylla в качестве базы данных графов для JanusGraph и API, представленных с помощью GraphQl

Я ищу базу данных Graph с использованием Scylla или Cassandra в качестве бэкэнда, а затем выставляю веб-API как GraphQl.

Можете ли вы помочь мне убедиться, что я правильно понял следующий стек:

  1. GraphQl или TinkerPop // Схема API, предоставляющая API
  2. JanusGraph (Privious Titan) // Уровень базы данных, облегчающий структуру графика
  3. Кассасндра или Сцилла

person Chris G.    schedule 18.12.2017    source источник


Ответы (2)


Вы в значительной степени поняли это, чтобы прояснить:

GraphQL - это абстракция, призванная помочь разработчикам упростить разработку / доступ к данным. Вам нужно будет создать сервис, который переводит GraphQL в Gremlin.

Стек, который вы себе представляете, выглядит так:

GraphQL -> Gremlin / TinkerPop -> JanusGraph -> DataStore (Cassandra, Scylla и т. Д.).

Что касается хранилища данных, JanusGraph совместим как с Apache Cassandra, так и с Scylla.

person MarcintheCloud    schedule 18.12.2017
comment
К вашему сведению, IBM выбрала JanusGraph и Scylla для своей Compose DBaaS. Подробности об этом выборе обсуждались на конференции: scylladb.com/tech-talk/ - person TomerSan; 19.12.2017

Мне нравится ответ @MarcintheCloud, просто хотел перефразировать и дать свое решение проблемы.

GraphQL не заботится о каком-либо конкретном типе базы данных, KV, Graph, Document и т. Д. И не зависит от него, и фактически позиционирует себя как способный извлекать данные из разных источников. Таким образом, вы можете создать пользовательский интерфейс для получения последних цен на акции из 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 и получение полей идентификатора, имени пользователя и биографии. Существуют образцы гораздо более сложных примеров GraphQL to Gremlin, и они идеально подходят для моего случая использования.

Обход гремлина может выглядеть так

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

Я также открываю исходный код образца Twitter Graph на PHP, если вы хотите поэкспериментировать с ним https://github.com/The-Don-Himself/gremlin-ogm.

person Don Omondi    schedule 04.01.2018