Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带图像、图形、sql和ORecordBytes的orientdb_Sql_Image_Graph_Binary Data_Orientdb - Fatal编程技术网

带图像、图形、sql和ORecordBytes的orientdb

带图像、图形、sql和ORecordBytes的orientdb,sql,image,graph,binary-data,orientdb,Sql,Image,Graph,Binary Data,Orientdb,我一直在研究如何将图像保存在orientdb(作为图形数据库)中,并发现: 请注意,我只讨论涉及ORecordBytes的技术 但是,有几个问题: (1) sql命令“createcluster”似乎缺少许多可以通过JavaAPI提供的参数。默认设置是什么?有可能吗 (2) 到目前为止,我一直在使用SQL(脚本)创建实体。 为了与ORecordBytes一起工作,我尝试了以下方法: ORecordBytes record = new ORecordBytes("Binary data".ge

我一直在研究如何将图像保存在orientdb(作为图形数据库)中,并发现:

请注意,我只讨论涉及ORecordBytes的技术

但是,有几个问题:

(1) sql命令“createcluster”似乎缺少许多可以通过JavaAPI提供的参数。默认设置是什么?有可能吗

(2) 到目前为止,我一直在使用SQL(脚本)创建实体。 为了与ORecordBytes一起工作,我尝试了以下方法:

ORecordBytes record = new ORecordBytes("Binary data".getBytes());
record.save();
String cmd = String.format(originalQuery, record.getIdentity().toString());
打印查询时,它看起来很好(部分): 创建顶点。。。设置my_id=$some_id_new[0]。值,name=“Cool name”,image=#3:-2

当然,图像属性是获得rid的对象。 然而,我不认为#3:-2真的存在。 我试图查询它,尽管我没有输入,但无法。 此外,当使用控制台对顶点执行查询时,没有图像属性

那我怎么做呢

p、 美国。 我使用SQL脚本是因为我需要一个本机不支持的自动增量字段。脚本正在更新计数器表,获取新值,并创建新顶点(包括一些边)。这似乎更容易

编辑(1) (1) Lvca指出,负RID是暂时的。 我有点困惑,为什么调用save()会是临时的。 否则,save()做什么

不过,我将尝试在它之后运行commit

(2) 不知道为什么脚本很重要,因为它显然得到了一个错误的记录id RID,但是Lvca问了,我答应了^^

BEGIN\n\
LET user_id_new = UPDATE CCounter INCREMENT value = 1 RETURN BEFORE $current.value WHERE name='user'
LET cuser = CREATE VERTEX CUser SET user_id=$user_id_new[0].value,\
  name="%s", create_date=%s, rooms=(SELECT FROM CRooms WHERE room_id IN %s),\
  image=%s\n\
COMMIT\n\
RETURN $user_id_new[0].value\n
注: *最后的换行是因为orientdb sql脚本在每行之后都需要它们 *每行额外的反斜杠是因为我使用的是一个属性文件,它要求将其作为单个变量的一部分(第一行实际上是“my\u query=\”,但它不是脚本的一部分) 请注意,在打印时,它看起来很好(末尾没有反斜杠,每行都有自己的内容) *不是,返回值只是一个长(id)。不需要更多了

(3) 我不得不说,我希望我能在一次交易中同时插入实体的属性和图像,我开始觉得这不会发生。没有办法吗

(4) 同时,我尝试了其他的方法,但也不起作用。也请随意评论:

  • 首先,我运行上面的脚本,稍作修改:

    • 已从脚本中删除“图像”字段
    • 返回的整个数据速率大于id(返回$cuser)
  • 其次,我使用以下(java)创建初始实体(没有图像):

    OCommandRequest req=graph.command(新的OCommandScript(“sql”,cmd)); vertex=req.execute(); graph.commit()

  • 第三,我创建了一个ORecordBytes变量,并保存(和提交)

    ORecordBytes imgRec=新的ORecordBytes(graph.getRawGraph(),imgBytes); imgRec.save(); graph.commit()

  • 第四,我将图像记录放入先前获得的顶点的“image”属性中,并提交

    setProperty(“图像”,imgRec); vertex.save(); graph.commit()

这个,也不行。出于某种原因,它似乎将“image”属性设置为字符串。控制台上的查询返回如下内容(被控制台截断):

打印imgRec.toString()时,字符串很长(控制台无法全部显示)。然而,它似乎包含许多值(也包含许多否定项,至少在接近结尾处)。结果就是这样(没有换行,我看不到)

此外,我还尝试将“setProperty”替换为 ODocument doc=vertex.getRecord(); 文档字段(“图像”,imgRec); doc.save()

我尝试用Vertex替换OrientVertex(还更改了类型,以前未显示) 顶点=空; ... vertex=req.execute()

我尝试将属性设置为getIdentity而不是记录: setProperty(“image”,imgRec.getIdentity())

所有的结果都是一样的,字段“image”中有一个字符串,而不是一个链接

同时,我将尝试返回到我的第一次尝试,并在创建imgRec之后使用commit。完成后,我将再次编辑。 无论哪种方式,我都看到了许多实现这一目标的方法,我认为许多方法都应该有效,并在一些问题上提出了建议。如果我错了,请纠正我,这样我就知道如何在orientdb github中打开一个问题

附言。 *字段为字符串的问题很好。。它正在嵌入内容。但同时,我试图忽略它并查询数据s或字节。很明显,这不起作用。(无法将字符串强制转换为ORecordBytes) *群集id 3至少在我的数据库上是“默认值”

第2页 您从未问过,但我目前使用的是v2.0-M2版本

抱歉发了这么长的帖子,谢谢

编辑(2):解决方案(?) 所以,它终于起作用了

据我所知,问题是:

(1) 我试图将ORecordBytes变量设置为字段。尽管我在网上看到一些地方这样做,但它似乎不起作用。您需要插入它的标识(getIdentity())。如果是通过sql,您可以在getIdentity()上使用toString(),但仍然可以

(2) 虽然我更喜欢提前创建我的属性,但我不知道它的类型,所以这次我不知道。因此,当尝试插入ORecordBytes.toString()时,结果是一个奇怪的字符串,orientdb也会自动为字段分配字符串类型。 任何进一步的尝试都是好的,只是遵循指定的数据类型

请注意,“删除属性CUser.image”不起作用。一直说财产不存在。 然而,通过控制台我输入了'info class CUser',您可以清楚地看到带有字符串数据类型的'image'属性。 目前,我只是使用了一个不同的字段(不知道如何解决这个问题)

如果有人感兴趣,我确实找到了一种预定义数据类型的方法,但它有缺点:

CREATE PROPERTY CUser.img LINK
注意我不是spe
, 69, 78, 68, -82, 66, 96, -126] v1
CREATE PROPERTY CUser.img LINK