我尝试使用Java通过CYPHER在Neo4j中创建一些节点,更具体地说是使用JSON和http://hostname:7474/db/data/transaction/commit
。
我的测试应该使用以下CYPHER语句创建一些节点:
MERGE (a:LABEL1 { name: 'nameNNN', version: 1001 })
SET a.PROP1='<data>'
RETURN id(a)
只要很小,例如一个或多个属性&lt;总和1kB,一切正常。如果尝试写入具有更大属性的节点(10MB二进制数据base64编码为 例如),测试创建了9个或10个节点:
{errors=[], results=[{"data":[{"row":[10009]}],"columns":["id(a)"]}]}
{errors=[], results=[{"data":[{"row":[10010]}],"columns":["id(a)"]}]}
...
{errors=[], results=[{"data":[{"row":[10011]}],"columns":["id(a)"]}]}
然后开始返回:
{errors=[], results=[]}
如果我重新开始测试,我会立即得到空的结果。如果我重新启动Neo4j服务器, 我可以更新这9或10个节点,也可以创建9个或10个不同名称的节点 然后我再次得到空的结果。
据我所知,每个语句都是一个事务(我为每个服务器请求执行一次合并)。
这是一个错误,还是社区版的限制(2.1.6)还是我做错了什么?
答案 0 :(得分:1)
它是Neo4j在房产中存储大块blob数据的极少数反模式之一。建议的方法是将它们移动到适合大blob的数据存储区(例如Amazon S3和其他),并在Neo4j中保留对它们的URI引用。
因此,表示blob内容的节点具有指向外部blob存储的uri
属性。
答案 1 :(得分:0)
如果我在查询中使用参数而不是数据,则不会出现问题。谢谢你的提示!