Neo4j

2011-04-16 18 views
13

में बाइनरी ऑब्जेक्ट्स संग्रहीत करना Neo4j मुझे बाइनरी ऑब्जेक्ट्स स्टोर करने की अनुमति नहीं देता है। क्या इसका मतलब है कि मुझे फाइल सिस्टम जैसे अन्य डेटा स्टोर के साथ Neo4j का उपयोग करना होगा। ओरेकल, आदि?Neo4j

उत्तर

35

डैनियल पहले से ही उत्तर दिया है कि नियो 4 जे में बाइनरी ऑब्जेक्ट्स स्टोर करना संभव है।

लेकिन मैं आपको सुझाव दूंगा कि ऐसा न करें। आप डेटाबेस में बाइनरी ऑब्जेक्ट्स के साथ कुछ भी दिलचस्प नहीं कर सकते हैं। आप उन्हें खोज नहीं सकते हैं। द्विआधारी वस्तुओं को संग्रहीत करके आप एकमात्र चीज हासिल करेंगे - अपने डेटाबेस का फ़ाइल आकार बढ़ाएं। आपको याद है, नियो 4 जे क्षैतिज स्केलेबल नहीं है। इसमें स्वचालित शेडिंग नहीं है। तो यदि आपका डीबी बहुत बड़ा हो जाता है, तो आप परेशानी में हैं। फाइल सिस्टम या बाहरी वितरित की-वैल्यू स्टोर जैसे दानाक, कैसंड्रा, हडूप इत्यादि में बाइनरी स्टोर करके, आप अपना डेटाबेस छोटा रखते हैं, जो प्रदर्शन, बैकअप और क्षैतिज स्केलिंग समस्याओं से बचने के लिए अच्छा है।

+0

अच्छा अंतर्दृष्टि। चेतावनी के लिए धन्यवाद। –

9

यदि आप यहां एपीआई देखते हैं: http://api.neo4j.org/1.2/org/neo4j/graphdb/PropertyContainer.html#setProperty(java.lang.String, java.lang.Object), आप देखते हैं कि बाइट एरे की अनुमति है।

बाइट-एरे का उपयोग करके आप अपनी बाइनरी ऑब्जेक्ट्स स्टोर कर सकते हैं। जब आप ओरेकल में बाइनरी ऑब्जेक्ट्स (जावा का उपयोग करके) स्टोर करते हैं, तो आप डेटा को बाइट [] के रूप में भी लोड करते हैं।

6

आप द्विआधारी वस्तुओं को बाइट [] के रूप में स्टोर कर सकते हैं या स्ट्रिंग में एन्कोड किया जा सकता है, लेकिन मैं अलग-अलग फ़ाइलों के रूप में बड़े (उदा।> 1,000 बाइट्स) ब्लॉब्स स्टोर करने की सलाह दूंगा, और केवल आपके डेटाबेस में फ़ाइल का संदर्भ रखूंगा।

हम इसे स्ट्रक्चर (http://structr.org) में भी करते हैं।

1

जैसा कि उल्लेख किया गया है यह बेहद हानिकारक है।

लेकिन यदि आप ऐसा करने के लिए तय है, तो आप इसे इस तरह सी # में कर सकता है:

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; 
      } 
     } 
    }  
} 
संबंधित मुद्दे

 संबंधित मुद्दे