Scegli il tipo di database NoSQL

-3

Ho un'app e un elenco di tutte le azioni eseguite dall'utente durante l'utilizzo.

Per fare un esempio, per ogni utente ho dati come questo:

  • "start"
  • "paese": "aa"
  • "sessione": "0"
  • "menu": "principale"
  • "menu": "giocare"
  • "play_level": "1"
  • "play_during": "70 secondi"
  • "purchase": "metal hammer"
  • "play_level": "2"

Devo scegliere un database in cui inserire questo tipo di dati e, ad esempio, interrogare "tutti i giocatori che hanno acquistato il martello di metallo prima del livello 2".

Questo ovviamente non è uno scenario SQL e non ho esperienza in NoSQL. Ho esaminato i tipi di database NoSQL (colonna, documento, valore-chiave, grafico, ...) e suppongo che un tipo di DB valore-chiave sia quello che dovrei usare, ma non sono in grado di trovare se posso avere chiavi duplicate e se posso richiedere che le voci vengano visualizzate prima di altre voci (acquisto xyz prima play_level 2)

I database NoSQL di valore-chiave sono in grado di gestire questo tipo di dati e query o devo scegliere un altro tipo di database NoSQL?

    
posta KakCAT 07.06.2017 - 10:36
fonte

1 risposta

0

Si può risolvere questo problema con SQL come detto da @Vincent, ad es. avendo una tabella con i seguenti campi:

  • userId: qualunque sia
  • data / ora: data
  • eventName: string
  • param: stringa o numero, forse più campi. NoSQL diventa rilevante a questo punto.

Ecco alcuni esempi fittizi per iniziare, dovresti perfezionarlo però.

SELECT u, e1, e2
FROM users u, events e1, events e2
WHERE e1.userId = u.userId
AND e1.eventName = 'play_level'
AND e1.paramsNumber = 2
AND e2.userId = u.userId
AND e2.eventName = 'purchase'
AND e2.params = 'metal hammer'
AND e2.timestamp < e1.timestamp

Forse meglio se si utilizza LEFT JOIN , qualche GROUP BY sarebbe necessario per evitare duplicazioni (ad esempio, ha giocato il livello 2 due volte). L'indicizzazione appropriata ( userId , eventName ) può ottenere prestazioni migliori.

BTW Sto usando MongoDB in molti progetti, puoi provarlo, non è così difficile. Ma nota che NoSQL potrebbe essere la tua decisione , non un requisito funzionale.

    
risposta data 07.06.2017 - 14:28
fonte

Leggi altre domande sui tag