Oggetto JSON e archiviazione di nosql

1

Ho letto Un DB NoSQL sarebbe più efficiente di un DB relazionale per la memorizzazione di oggetti JSON? e sto costruendo un piccolo progetto di test in Asp.Net. Ho un webapi in Azure. Restituisce un List<Company> e Company è il mio oggetto che ha diverse proprietà e un elenco figlio e un valore lat / long.

//id, name etc.
public List<Certification> Certifications { get; set; }
public float Latitude { get; set; }
public float Longitude { get; set; }
public GeoCoordinate Cordinate // etc. GeoCoordinate is from System.Device reference

Ritorna questo Elenco di aziende e utilizzo l'output JSON. Ora internamente, caricando questo elenco carico l'elenco completo delle aziende da un file JSON. e se non ci sono file, verrà creato un file. Va tutto bene. Ma Latitudine e Longitudine sono vuote sulla base iniziale. Quindi lo riempio usando il geocodice inverso di googles. Funziona, ma ha un limite di richieste. Quindi mi piacerebbe caricare la lista e se lat / long è vuoto, recuperare i valori dal servizio di google e memorizzarlo. Ma sto cercando una soluzione per non salvare di nuovo l'elenco json completo in un file. E non sto cercando una soluzione di database relazionale, perché è qualcosa che ho fatto abbastanza. Ora ho letto su mongoDB. Ma è un po 'difficile da configurare su Azure. Ho avuto Redis su Azure. Quale soluzione facile e veloce mi consigli di memorizzare la mia lista di oggetti? Lo raccomandi addirittura di archiviarlo come JSON? o qualcos'altro? come XML? e usa xpath per aggiornare i valori? Quindi sto cercando un'architettura / design per aggiornare tutti i lat / longs fino a quando google fornisce l'errore del limite di quota e provatelo dopo il prossimo tentativo accedo all'elenco delle società.

ps. Non voglio memorizzare un elenco di Certification . Sono curioso di poterlo conservare come proprietà dell'azienda e archiviare il progetto completo dell'azienda.

    
posta JP Hellemons 01.08.2013 - 10:23
fonte

1 risposta

1

Mostrerò come risolverei questo utilizzando il database Starcounter per memorizzare i dati e utilizzare il suo web server interno per recuperare i dati come modelli JSON. Il modello dell'applicazione è automaticamente il database se è impostato l'attributo [Database].

Il database

[Database]
public class Company{
   public String Name; 
   public String RegistrationNumber;
   ... and so on
   public IEnumerable<Certificate> Certificates{
         get{
            return Db.SQL("SELECT c FROM Certificate where c.Position=?",this);
         }
   }

   private Coordinate Coordinate;
   public double Latitude{
        get{
            if(Coordinate == null){
                 AssureCoordinates();
            }
            return Coordinate.Latitude;
         }
   }
   public double Longitute
        get{
            if(Coordinate == null){
                 AssureCoordinates();
            }
            return Coordinate.Longitute;
         }
   }

   private void AssureCoordinates(){
          ... fetch from whatever source and set to Coordinate
   }

E poi nel server web integrato definirei un modello JSON per la società:

{
     Name:"ACME Ltd",
     RegistrationNumber:"555-5555",
     Longitude:"123.4",
     Latitude:"123.4",
     Certificates:[
        {
            ... certifcates properties
        }],
     $:{DataType:"Company"},
     $Certificates:{DataType:"Certificate"
 }

Questo modello JSON verrà automaticamente associato ai dati persistenti nel database su richiesta.

E infine registra il verbo REST + URI per rispondere a:

Handle.GET("/company/?", (String registrationNumber) =>
{
    CompanyModel cModel = new CompanyModel();
    Company comp = ... find company in DB using SQL
    cModel.Data = comp;
return cModel;
});

Ora un modello JSON della società richiesta verrebbe restituito e tutti i dati vengono compilati automaticamente dal database. Il Coordinate verrà recuperato se non impostato sulla prima chiamata a Long / Lat. Ovviamente potresti anche restituire un elenco di queste società.

Questa configurazione farà sì che il tuo normale database agisca come un sorgente JSON, e puoi anche saltare il normale server web.

Spero che questo ti abbia aiutato a risolvere questo problema usando un database NoSQL!

    
risposta data 01.08.2013 - 13:17
fonte

Leggi altre domande sui tag