È necessaria la consulenza di esperti per un database NoSql

1

Nella nostra azienda, mi è stato affidato il compito di sviluppare un'applicazione mobile (iOS, Android e in futuro, forse Windows). Con questi dispositivi, è probabile che avremo un numero elevato di installazioni distribuite su tutti questi dispositivi.

Certamente, per un'applicazione mobile è molto importante essere reattivi, quindi abbiamo deciso di passare da un ambiente SQL classico (SQL Server) a una soluzione No-Sql (MongoDB).

Abbiamo scelto questo approccio perché la piattaforma è altamente scalabile e può tornarti utile in futuro.

Devi sapere che sono totalmente nuovo alla storia No-Sql, quindi non dare la colpa a eventuali domande stupide, sono qui per imparare le migliori pratiche.

Iniziamo esaminando i dati che devo importare.

L'applicazione che la nostra azienda sta sviluppando è un'applicazione per sfogliare un catalogo di articoli potenzialmente acquistabili. Esiste una gerarchia specifica di quegli articoli che cercherò di spiegare nell'immagine seguente:

Perspiegarel'immaginesopraunpo'inparole:

1hannounaclassificazionealivellodiroot(peresempio-articolidacucina),inbaseallaqualepossoavere(nonobbligatorio)un'altraclassificazione(adesempiocoltelli).Questovaleper4livellidiprofondità.

Sottoogniclassificazionepossoavereungruppodiarticoli,(adesempio:coltello,acciaio,nero),epoisottoognigruppodiarticoli,hosemprealcuniarticoli(peresempio:lama:20cm,lama:22cm,lama24cm).

Perdartiun'ideadelcoltello,vediilseguenteJson(cercheròdispiegarlonelmodomigliorepossibile):

{"Name":"Kitchen",
   "Classifications":[
      {
         "Name":"Knives",
         "Article Groups":[
            {
               "Name":"Knive Steel Black",
               "Articles":[
                  {
                     "ArticleGTIN":"684351654984"
                  }
               ]
            }
         ]
      }
   ]
}

Questo è approssimativamente il modo in cui i dati sono strutturati. Un'altra cosa che è molto importante è che gli articoli possono avere più proprietà.

Di seguito è riportato un frammento di un solo articolo con alcune proprietà su di esso:

{
   "ArticleGTIN":"984651164",
   "Properties":[
      {
         "Name":"Length",
         "Value":"20cm",
      },
      {
         "Name":"Hardness",
         "Value":"1",
      }
   ]
}

Ora, per l'applicazione, ho bisogno di essere in grado attraverso il catalogo, quindi:

  • Visualizzazione di tutte le classificazioni a livello di root.
  • Se è selezionata una classificazione, guarda tutte le classificazioni dei bambini.
  • Per ogni una classificazione, ho bisogno di poter visualizzare i gruppi di articoli.
  • Per ciascun gruppo di articoli, devo essere in grado di visualizzare gli articoli.
  • Più importante: devo essere in grado di filtrare tutte le proprietà date per un esempio. Con questo voglio dire che devo essere in grado di dire: trovami tutti i coltelli con una durezza > = 2 e dove la lunghezza è di almeno 10 cm (penso che tu abbia capito il punto). È una specie di filtro come la ricerca su Amazon:

Ilproblemachestoaffrontandoèchenonsoesattamentecomedovreimemorizzareimieidatipermantenerelamiaapplicazioneilpiùperformantepossibile.Hoinmenteunpaiodiopzioni:

  • Unagranderaccoltadenominata"Classificazioni" in cui tutto è archiviato. Quindi, un nodo 'genitore' e tutti i nodi figli sotto di esso (vedi diagramma sopra).

  • Molte piccole raccolte con ogni voce in una raccolta che fa riferimento a un'altra collezione, ad esempio una raccolta con classificazioni e quindi un'altra raccolta con gruppi di articoli. Ogni gruppo di articoli contiene un riferimento (basato su un campo "Id" con la classificazione corretta).

  • Crea raccolte che corrispondono ai dati esposti sull'applicazione. Ad esempio la ricerca, posso creare una collezione con solo articoli e le loro proprietà specificate.

  • ...

Spero che qualcuno possa dare una risposta su ciò che è più adatto qui.

Un'altra cosa su cui sto cercando una risposta. Per utilizzare l'applicazione, è necessario essere autenticati. Per questo stavo usando Microsoft Authentication Framework (Entity Framework, SQL Server). È meglio mantenere questo, e quindi mescolare SQL Server e MongoDB o è meglio memorizzare tutto in un'unica tecnologia di database?

Nota: sto cercando fatti e best practice. Per favore includi un perché o perché no nella tua risposta in modo che io possa fare la migliore decodifica in base alle risposte date.

    
posta Complexity 01.08.2015 - 09:15
fonte

1 risposta

-1
article: {
    articleGTIN: value,
    properties: [
        { name: value, value: value }, 
        { name: value, value: value }
    ],
    articleGroups: value,
    classification: value
}

I database NoSQL sono anche chiamati database di documenti, il che significa che l'entità del database dovrebbe essere una struttura simile al documento.

Pensa ai tuoi articoli come a un documento, a un documento che hai di fronte e tutto il resto sono dati META.

Utilizza l'elemento di commercio globale come chiave univoca e se hai bisogno di più classificazioni multiple o articleGroupd per articolo, inseriscili, ad es. trattali come suggerisco di usare le proprietà, come una matrice di oggetti.

    
risposta data 09.08.2015 - 23:14
fonte

Leggi altre domande sui tag