@dba_ru

Страница 488 из 718
Roman
24.04.2018
17:23:57
Я же описал как.
ну ты описал если, т.е. conditional, я не понимаю как этот кондижнл задеклерить)

мне нужно чтоб cypher вернул ошибку если один из узлов не существует

Al
24.04.2018
17:26:42
мне нужно чтоб cypher вернул ошибку если один из узлов не существует
Таки он ее вернет. Ты же хочешь создать релейшен

Google
Al
24.04.2018
17:27:20
Ну так тупо сделай создать релейшен между 2 нодами если одной нет то будет тебе ошибкп

Al
24.04.2018
17:29:19
аа, пфф, я думал он её создаст если её нет...
Как он ее создаст если ее нет? Он может конечно. Но это другое

Roman
24.04.2018
17:29:31
понял, сейчас попробую, в нео второй день))

Таки он ее вернет. Ты же хочешь создать релейшен
ну он возвращает (no changes, no records), никакой ошибки нет

можно по сути вернуть какоe поле одного из созданых элементов, если оно null тогда мол "ошибка"

но было бы неплохо сделать нечто похожее на ASSUME

MATCH (f:First),(s:Second) WHERE f.id = "1" AND s.id = "2" CREATE (f)-[:CONNECTED]->(s) RETURN CASE WHEN f = null THEN "First not found" WHEN s = null THEN "Second not found" END AS error

тоже не работает ? возвращает (no changes, no records)

что-ж я делаю не так?

Al
24.04.2018
18:20:42
тоже не работает ? возвращает (no changes, no records)
А чем тебя не устравает ответ no changes?

что-ж я делаю не так?
Ты излагаешь оконечную задачу. А не описываешь нафига это все нужно. Ну из серии "взял шуруп и пытаюсь забивать его молотком, и шляпкой вниз. Отбил себе пальцы. Что я делаю не так"

Roman
24.04.2018
18:25:31
А чем тебя не устравает ответ no changes?
тем что нет ошибки, не могу определить в коде который этот query вызывает успешно ли была выполнена операция, или один из параметров был неверным

Google
Roman
24.04.2018
18:26:47
Ты излагаешь оконечную задачу. А не описываешь нафига это все нужно. Ну из серии "взял шуруп и пытаюсь забивать его молотком, и шляпкой вниз. Отбил себе пальцы. Что я делаю не так"
да всё просто, есть мутация, её надо выполнить если все затронутые сущности существуют. Если одна из сущностей не существует то об этом нужно сообщить вызывающему коду

чтоб понимать какие из параметров были неверными, а не вслепую гадать почему не выполнилась мутация

сейчас добавил OPTIONAL перед MATCH и уже лучше, теперь валится с ошибкой: Expected to find a node at f but found nothing Some(NO_VALUE)

но это тоже не особо устраивает, ибо невозможно понять какая именно из сущностей не была найдена, парсить текстовые ошибки же не будешь..

Roman
24.04.2018
18:30:47
В чем проблема парсить?
Вы серьёзно предлагаете текстовые ошибки парсить? чтоб если в Neo4j они изменились весь сервер полетел? И сложный regexp или парсер? ну нахер..

лучше просто вернуть поле notFound со значением мол second или first или null если всё окей

Al
24.04.2018
18:31:42
Нео и так еле шевелится. А тут еще и логику ей подсунуть

Да она в нее могет. Только толку от этого нуль.

Roman
24.04.2018
18:32:41
А вы серьезно предлагаете переносить часть задачи на сервер бд?
а как вы предлагаете решить задачу иначе? при получении пустого результата просто гадать что было не так? может для кого-то и вариант, но из меня экстрасенс херовый ?

Al
24.04.2018
18:33:13
А не заниматся извращениями

Roman
24.04.2018
18:33:43
дак это 3 round-trip'а к бд туда сюда плюс транзакция..

это же дороже выйдет чем 1 query с небольшой совсем логикой, я же не Pi в 100500 степени на cypher высчитываю

Al
24.04.2018
18:35:36
это же дороже выйдет чем 1 query с небольшой совсем логикой, я же не Pi в 100500 степени на cypher высчитываю
2 простых селекта и одна простая запись это дешевле. Особенно для нео.

Для справки. Нео считает достижением 1700 запросов в секунду на кластере из 3 серверов!!!

Roman
24.04.2018
18:37:10
мдауж

я просто из SQL привык выполнять всё что можно выполнить в SQL - там, нежели создавать лишние round-trip'ы и транзакции

Neo настолько плохо оптимизирован?

Google
Al
24.04.2018
18:38:14
мдауж
Дык прежде чем вестись на их маркетинг нужно смотреть самому

На стороне приложения любая логика решается НА ПОРЯДКИ быстрее

Да начнется говсрач :)

Roman
24.04.2018
18:41:19
round-trip по идее должен быть дороже чем жалкий if-else в cypher

Al
24.04.2018
18:43:33
да тут логика то... пара строк, если-то
У меня вся логика была найти общую ноду для двух других нод в релейшенах что бы было в одной Х а в другой Х+1... Нео помер

round-trip по идее должен быть дороже чем жалкий if-else в cypher
Не. По сути он все равно делает эту кучу запросов сам к себе. Только еще парсит твои запросы. Разбирает на шаги и жрет процесор

Так что простые селекты всегда будут дешевле

Roman
24.04.2018
18:46:12
короче ещё недостаточно оптимизирован

блљtß... но вот если делать тогда первый query аля MATCH (f:First),(s:Second),(t:Third) WHERE f.id="1" AND s.id="2" AND t.id="3" AND "banana" in t.roles RETURN f.id, s.id, t.id тогда опять вернёт (no changed, no records) в случае если один из параметров был неверен..

ну не делать жи 3 round-trip'а для каждого entity....?!

Al
24.04.2018
19:00:48
ну не делать жи 3 round-trip'а для каждого entity....?!
Я не понимаю что ты делаешь. Если ты попросишь его вернуть пропертись для этих трех то он вернет тебе только те которые есть

ну не делать жи 3 round-trip'а для каждого entity....?!
Следи за руками. Нужно было находить общюю ноду для двух при соблюдении 1 условия в релейшенах Было нео4жыы. И запрос в 1 строчку. Обработка 7 тысяч обьектов занимала 3 суток... 3 суток Карл. Переделал. Стал запрашивать список исходящих релейшенов для каждой ноды и сравнивать в приложении списки.. и потом дополнительно еще запрашивать уточнения. Количество запросов заместо одного стало в среднем 10 000.. Обработка тех же 7к обьектов стала около 8 часов!!! Перетащил все в janusgraph. Обработка тех же 7к обьектов стала около часа!!! Переколбасил всю структуру хранения. Но оставил всю логику в приложении. Обработка тех же 7к обьектов занимает около 20 секунд!!!

Roman
24.04.2018
20:10:44
@AlexCAD если одним round-trip'ом попытаться запросить нужные узлы: MATCH (f:First),(s:Second) WHERE f.id = "1" AND s.id = "2" RETURN f.id, s.id тогда если один из id'шников окажется неверным - оба поля будут null

т.е. опять не понятно какая из сущностей не существует

Al
24.04.2018
20:14:22
т.е. опять не понятно какая из сущностей не существует
Вот из примеров MATCH (n) RETURN CASE WHEN n.eyes = 'blue' THEN 1 WHEN n.age < 40 THEN 2 ELSE 3 END AS result

Roman
24.04.2018
20:15:07
Вот из примеров MATCH (n) RETURN CASE WHEN n.eyes = 'blue' THEN 1 WHEN n.age < 40 THEN 2 ELSE 3 END AS result
match (n) ? это ли не ударит по производительности?

это же типа "возьми всё и отфильтруй 99%"

Al
24.04.2018
20:15:30
match (n) ? это ли не ударит по производительности?
Адаптируй под свое. Мне с мобилы как то лень

Google
Al
24.04.2018
20:17:18
Блин вставь свой match и через case верни цифру например. По ней будешь знать чего нет. Вообще дурацкий запрос. Зачем знать что нет одной из нод

Roman
24.04.2018
20:18:07
Блин вставь свой match и через case верни цифру например. По ней будешь знать чего нет. Вообще дурацкий запрос. Зачем знать что нет одной из нод
error handling, нежели гадать почему мутация не выполнилась, лучше знать, какой из указанных объектов не существует

Roman
24.04.2018
20:19:01
Admin
ERROR: S client not available

Roman
24.04.2018
20:19:27
функция будет проходить без ошибки, а мутация будет не выполнена

якобы всё окей)

Al
24.04.2018
20:19:44
ну тогда-же гадать придётся)))
Это все зависит от задачи в целом. Пока я знаю что в нео должна случатся какая то мутация

Roman
24.04.2018
20:22:09
Это все зависит от задачи в целом. Пока я знаю что в нео должна случатся какая то мутация
1. нужно выполнить мутацию на узлах A, B и C 2. каждый из узлов обладает свойством идентификатором UUIDv4 3. прежде чем выполнять мутацию, нужно проверить существование A, B и C. Иначе сервер не вернёт ошибки и все будут думать мол операция прошла успешно, хотя нан самом деле никакой мутации не произошло. 4. было бы полезно знать, какой объект из A, B или C не существовал, какой из идентификаторов был неверным

Roman
24.04.2018
20:33:44
Слушай сделай в несколько запросов. А оптимизацией потом будешь игратся
только-что подсказал сотрудник NeoTechnologies: OPTIONAL MATCH (f:First) WHERE f.id="1" OPTIONAL MATCH (s:Second) WHERE s.id="2" OPTIONAL MATCH (t:Third) WHERE t.id="3" RETURN f.id, s.id, t.id оказывается нужно было просто несколько match'ей использовать

этот query вернёт null только для конкретно несуществующих узлов

короче сделаю в 2 трипа через транзакцию 1. начать транзакцию 2. проверить существование узлов, вернуть ошибку если одна или несколько не существуют, указывая в ошибке на конкретные несуществущие id 3. провести мутацию 4. закомитить транзакцию

Al
24.04.2018
22:00:33
О парень транзакции в нео оооочень медленные
Он верит что все что можно нужно пхать в запрос базе... :) и пусть она сдохнет. Нужно к клавиатурам делать крышку как у роялей.. что бы хрясь по пальцам... и одним разрабом меньше. Гы

Philipp
25.04.2018
12:58:54
Добрый день. Ребятки, а можно в качестве Алиаса для колонки делать подвыборку? Например: SELECT p.id, p.title, p.value AS (SELECT title FROM attributes WHERE id = 1) FROM products p

Виктор
25.04.2018
12:59:31
Чего добиться хотите, это же маразм

lost
25.04.2018
12:59:59
Это не маразм, а иногда нормальное решение

Google
Philipp
25.04.2018
13:01:12
Будет работать если подзапрос возвращает 1 строку и 1 значение
хм, надо в мускуле попробовать, в SQLite3 не работает.

lost
25.04.2018
13:01:36
Только альяс после подзапроса должен быть

Vladislav
25.04.2018
13:01:42
что за бред написан?

зачем вам в названии колонки запрос?

Виктор
25.04.2018
13:02:17
Только альяс после подзапроса должен быть
именно. от обратного. Почему и назвал маразмом

lost
25.04.2018
13:02:41
что за бред написан?
заметь, я написал иногда, можешь зачехлить своё агро

Vladislav
25.04.2018
13:02:45
если хотите значение получить, то value надо поменять местами с запросом

Philipp
25.04.2018
13:02:55
Чего добиться хотите, это же маразм
Отнюдь. У меня конструктор для создания электронных компонентов, название свойств заранее не определены, а выбираются из базы и по EAV генерируется таблица.

Vladislav
25.04.2018
13:02:59
заметь, я написал иногда, можешь зачехлить своё агро
этот запрос даже близко не похож на реальность

lost
25.04.2018
13:03:21
ну синтаксически он написан неверно, я согласен

Vladislav
25.04.2018
13:03:26
вот поменяете местами, тогда ОК, вопросов нет, а сейчас какая-то херня

lost
25.04.2018
13:03:56
SELECT p.id, p.title, (SELECT title FROM attributes WHERE id = 1) AS value FROM products p вот так кошерно будет

Страница 488 из 718