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