Как стать автором
Обновить

Комментарии 16

С похожестью на SQL у авторов языка как-то не задалось.

Может вкусовщина, но в 2019 году это:
OPTIONAL MATCH ans = (:Person {name: «Pam»})-[:PARENT]->(:Person {name: «Liz»})

выглядит отвратительно! 3 вида скобочек и рандомно рассыпанные двоеточия.
На самом деле, двоеточия не так уж рандомны («имя: тип», имя можно не давать если не требуется, тогда перед двоеточием ничего не стоит), скобки разные потому что сущности разные (узел, связь и дополнительные параметры). Если чуть-чуть вникнуть, синтаксис довольно нагляден.
В наше время аппаратных ограничений не так много и должно присутствовать какое-то представление о читаемости, удобстве, красоте языка.

Знаю язык, в котором отказались от скобок вида <> потому что это заставляет лишний раз shift нажимать довольно часто.

Жаль, что Sparql толком не развивается, да и по Cypher всего одна реализация.

Недавно появилась dgraph.io с открытыми исходниками и graphql из коробки.

Внезапно, 12 тыс. звёзд на GitHub, что всего на тысячу меньше чем у самой "звёздной" Cayley https://github.com/cayleygraph/cayley

А был ли у вас опыт использования Drgaph в продакшене? Или, хотя бы, в учебном проекте, демке? Поделитесь?
Я пытался применить neo4j, но сталкнулся с очень медленной вставкой — порядка 10 в секунду при 100% загрузки 6 ядер. Хотя даже очень сложные запросы на выборку в этих условиях работали очень шустро.

У меня пакетная вставка большого числа узлов с установлением связей с уже существующими работала плохо. Что именно происходило, не помню: то ли сервер Neo4j зависал, то ли падал, то ли памяти не хватало. Т.е. приходилось эту загрузку прерывать.

На московском митапе рассказывали, как решали похожую на мою задачу — выходили из положения как раз пакетной вставкой через CSV-файлы. Но они использовали коммерческую кластерную версию на мощном железе.

Спасибо! Печаль, что так это решается: кластером на мощном железе.

Проблема с медленной вставкой решается заданием ограничений (документация Neo4j).
Например, если для узлов типа :Person указать, что поле name является ключевым, то запросы на запись будут выполняться быстрее на несколько порядков. У меня при добавлении ограничений скорость записи увеличивалась более чем в 200 раз.

Например, можно задавать такие ограничения:
1) если единственное свойство (name) определяет уникальность узлов, то:
CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE

2) если таких свойств несколько (name и fam), то:
CREATE CONSTRAINT ON (n:Person) ASSERT (n.name, n.fam) IS NODE KEY
Индексы все у меня были построены. Без них вообще не справлялось.
Проблема была в том, что при вставке все связи надо было ресолвить, в отличие от реляционной базы, а их получалось много.

Дописал раздел "Заключение" (добавил ссылки на другие графовые СУБД) и улучшил форматирование некоторых примеров запросов, чтобы помещались на экране смартфона.

Евгений, очень было бы интересно прочитать статью по Dgraph (практические аспекты). Возможно у вас был соответствующий опыт?

Нет, с Dgraph ещё не разбирался.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации