Neo4j似乎不允许我存储二进制对象。这是否意味着我必须将Neo4j与其他数据存储库(如文件系统,Oracle等)结合使用?在Neo4j中存储二进制对象
13
A
回答
35
丹尼尔已经回答了,这是可能的二进制对象存储在Neo4j的。
但我建议你不要这样做。您可以对数据库中的二进制对象做任何事情。你不能搜索它们。您将通过存储二进制对象来实现唯一的事情 - 增加数据库的文件大小。请注意,Neo4J不能水平扩展。它没有自动分片。所以如果你的分贝变得太大,你就有麻烦了。通过在文件系统或外部分布式键值存储(如riak,cassandra,hadoop等)中存储二进制文件,您可以保持数据库的小型化,这对性能,备份和避免水平扩展问题都很有帮助。
9
如果这里的API在看:http://api.neo4j.org/1.2/org/neo4j/graphdb/PropertyContainer.html#setProperty(java.lang.String,java.lang.Object中),你看到的字节数组是允许的。
使用字节数组,你可以存储你的二进制对象。当您在Oracle中存储二进制对象(使用Java)时,也可以将数据加载为byte []。
6
您可以存储二进制对象的字节[]或字符串编码,但我会建议存放较大(例如> 1000个字节)的斑点作为单独的文件,并只保留在你的数据库文件的引用。
我们Structr(http://structr.org)做到这一点。
1
如上所述,这样做是非常不利的。
但是,如果你决定这样做,你可以像下面这样做在C#:
using Neo4jClient;
using Neo4jClient.Cypher;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Neo4JBlob
{
class Program
{
static void Main(string[] args)
{
try
{
GraphClient client = new GraphClient(new Uri("http://localhost:7474/db/data"));
client.Connect();
byte[] image = File.ReadAllBytes("image.jpg");
BlobNode blob = new BlobNode(){Blob = image, name = "An image: " + DateTime.Now.ToShortDateString()};
client.Cypher.Create("(blob:Blob {category})").WithParam("category", blob).ExecuteWithoutResults();
var res = client.Cypher.Match("(b:Blob)").Return<BlobNode>(b => b.As<BlobNode>()).Limit(1).Results;
BlobNode BlobReturned = res.First();
File.WriteAllBytes("image_returned.jpg", BlobReturned.Blob);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
}
Console.ReadKey();
}
class BlobNode
{
public byte[] Blob
{
get;
set;
}
public string name
{
get;
set;
}
}
}
}
相关问题
- 1. 使用Ruby on Rails在Postgres中存储二进制对象
- 2. 如何使用节点在redis中存储二进制对象?
- 3. 用LINQ在SQL Server中存储二进制对象
- 4. 在mysql中存储二进制数据
- 5. 在MySQL中存储二进制数组
- 6. 如何在二进制堆中存储任何类型的可比对象
- 7. 如何在azure sql数据库中存储大型二进制对象?
- 8. 如何在Neo4j中存储对Java对象的引用?
- 9. 将二进制存储到BLOB中
- 10. 存储在应用程序二进制
- 11. 在进程中存储对象?
- 12. 将序列化数据存储在Neo4j中的对象中
- 13. 将对象保存为二进制文件到外部存储器? (Android)
- 14. 存储进程对象
- 15. Neo4j的对存储数据
- 16. 键 - >二进制附件存储值
- 17. 可以SimpleDB存储二进制属性?
- 18. SQL Server的二进制文件存储
- 19. Mysql二进制存储问题
- 20. TFS如何存储二进制文件
- 21. 在第二个对象的数组存储对象
- 22. 在cassandra上存储二进制数据就像MYSQL BLOB二进制
- 23. 在对象中存储对象
- 24. 在对象数组中存储对象
- 25. 如何使用mongodb与linq来存储大型二进制对象(文件)?
- 26. 序列化存储为字符串的二进制数据的对象
- 27. 将消息存储为BLOB(二进制大对象)或普通文本?
- 28. 了解Neo4j对象缓存
- 29. OpenCV:在二进制图像中绘制对象的轮廓
- 30. 在cassandra中存储对象
很好的启示。谢谢你的提醒。 – 2013-09-05 19:35:14