Какой тип данных требуется для хранения байтового массива в JanusGraph? - PullRequest
1 голос
/ 09 ноября 2019

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

byte[] myArray = new byte[10];
vertex.property("blob", myArray);
myArray = vertex.value("blob");

Однако я не вижу правильного определения свойства, когда автоматическое отключено,Я уже пробовал Byte.class с Cardinality.LIST, он предлагает:

org.janusgraph.core.SchemaViolationException: Value [[B@a9153e9] is not an instance of the expected data type for property key [payload] and cannot be converted. Expected: class java.lang.Byte, found: class [B

Также Byte[].class не поддерживается.

Caused by: java.lang.IllegalArgumentException: Not a supported data type: class [Ljava.lang.Byte;

1 Ответ

1 голос
/ 14 ноября 2019

Это явно не упоминается в документации JanusGraph, но вы можете просто определить тип данных как byte[] следующим образом:

gremlin> mgmt = graph.openManagement()
==>org.janusgraph.graphdb.database.management.ManagementSystem@6cae2e4d
gremlin> mgmt.makePropertyKey('blob').dataType(byte[].class).cardinality(Cardinality.SINGLE).make()
==>blob
gremlin> mgmt.commit()
==>null

Теперь вы можете использовать его в своих обходах Gremlin:

gremlin> g = graph.traversal()
==>graphtraversalsource[standardjanusgraph[berkeleyje:/opt/janusgraph/conf/../db/berkeley], standard]
gremlin> g.addV().property('blob', new byte[10])
==>v[4272]
gremlin> g.V(4272).values('blob').next()
==>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Обратите внимание, что массивы в настоящее время, к сожалению, не поддерживаются через GraphSON в JanusGraph. Таким образом, вы можете в основном использовать их только из Java с Gryo в качестве сериализатора прямо сейчас. См. JanusGraph / janusgraph # 1295 для получения дополнительной информации.

Cardinality.LIST не предназначен для хранения массива значений, но для случаев, когда вы просто хотите иметь несколько значений для одного и того жесвойство, например, несколько разных адресов для пользователя.

...