В Gremlin такого API просто нет.У него нет шага, который может принять GraphSON или Dictionary
(Map
в Java), чтобы преобразовать его в property()
шаги.В течение многих лет в сообществе TinkerPop велась значительная дискуссия на эту тему, поскольку удобство такого шага для пользователя, пожалуй, высоко, особенно в контексте, который вы описываете.К сожалению, введение Map
не очень хорошо вписывается в API, так как это первоначально выглядело бы, поскольку оно не позволяет должным образом устанавливать мульти-свойства, если подпись шага не приняла Map<Object,List<Object>>
(то есть в Python, где Dictionary
, гдеключ - String
или T
, а значение - List
произвольных объектов), который сложнее построить и обдумать.Более того, этот API плохо учитывает мета-свойства, если рассматривать их в общем контексте их установки.Есть и другие аргументы против этого, но те, которые имеют тенденцию торчать в моей голове.
Что касается шага, принимающего сам GraphSON (который, я полагаю, ослабит некоторые из упомянутых выше проблем с multi / meta-свойствами), я не думаю, что это когда-либо предлагалось.Я не уверен, как это будет работать, поскольку GraphSON является функцией операций ввода-вывода, а сам язык Gremlin просто никогда не знал об этом.IO - абстракция далеко от Гремлин, и я не знаю, хорошо ли она там подходила.Я также думаю, что большинство пользователей жаловались на сложность GraphSON (словари со встроенными списками или списками и т. Д.) И что создание GraphSON вручную нетривиально, и поэтому я сомневаюсь, что многие найдут такой API привлекательным для них.Мульти / мета-свойства снова бьют!:)
Я бы также сказал, что TinkerPop очень против создания строк Gremlin.Вы вынуждены сделать это сейчас в CosmosDB, поскольку они еще не поддерживают API байт-кода.С этой поддержкой (над чем они работают) вы больше не будете отправлять Gremlin в качестве значения String
, а вместо этого напишите Gremlin на вашем любимом родном языке (в вашем случае Python ).Таким образом, разработка путей, которые еще больше побуждают пользователей «создавать строки» любого типа, GraphSON или Gremlin, вероятно, будет препятствовать.
Теперь в Python вы можете создать этот метод самостоятельно как часть пользовательского Gremlin.DSL, который обычно принимает Dictionary
и преобразует его в property()
вызовы.Поскольку логика будет специфичной для вашего приложения, вы можете учитывать любые проблемы с мета / множественными свойствами, которые у вас могут быть или не быть.Вы можете прочитать больше о том, как создавать DSL здесь и узнать больше о шаблонах для реализации в этой серии постов в блоге: Часть I , Часть II и Часть III .
Я думаю, что мы могли бы увидеть этот вид API, родной для Gremlin, в 4.x, когда растет популярность отказа от поддержки мульти / мета-свойств, но до тех пор нетбыло много хороших идей.