Sto scrivendo un progetto per la scuola - App di tipo Tinder. Ho pensato di implementare il database interamente in RDBMS (PostgreSQL). Ma ora penso che sia una buona occasione per conoscere un po 'i sistemi NoSQL. Sono più vicino all'utilizzo di Redis (sembra veloce e amichevole), ma sto anche pensando a:
- MongoDB (molto popolare)
- ElasticSearch (sembra interessante, si dice che gestisca ricerche complesse)
- Neo4j (solo perché mi piacciono i grafici)
Il problema è che non so come passare dalle query che conosco, all'utilizzo di NoSQL-way.
Cosa ho pensato di fare Per avere un database "core" in Postgres - sono le informazioni sull'utente in più tabelle, magari altre informazioni strutturate. La parte in NoSQL dovrebbe memorizzare la posizione dell'utente corrente e la sua reazione alla raccomandazione del partner.
Location
memorizza gli ultimi dati di geolocalizzazione inviati dall'utente (aggiorna la posizione dell'utente o inserisce una nuova riga con posizione)
Suggestion
memorizza la reazione dell'utente alla visualizzazione di un altro profilo utente
Quindi, per preparare i suggerimenti dei partner, la query SQL andrebbe così (assumiamo che la query richieda input_user
, input_gender_preference
e input_location
come parametri di bind: è solo un prototipo).
SELECT l.userid
FROM location AS l
WHERE ST_distance(l.location, input_location) < 1000
AND l.gender = input_gender_preference
AND NOT EXISTS (SELECT 'x'
FROM suggestion s
WHERE (s.userid = l.userid
AND s.suggested_userid = input_userid)
OR (s.user_id = l.input_userid
AND s.suggested_userid = l.userid
AND s.approved = TRUE))
Ok, ma come farlo in uno dei sistemi che ho elencato?
Ad esempio
Dovrei:
- dividi
suggestion
inapproved_by
,rejected_by
, voci duplicate nel valore-chiave inverso:user_approved
,user_rejected
- ottieni un set di utenti visti dall'utente corrente, dall'unione di
user_approved
,user_rejected
- ottieni un set di utenti che hanno rifiutato il profilo utente corrente da
rejected_by
- unisci i set sopra
- ottieni un set di utenti nelle vicinanze da
location
- sottrarre (5) - (4)
- filtro (6) di
gender
Sembra che crei un sacco di traffico non necessario.
Cosa ti chiederei
Ti chiedo punti di partenza - come gestire queste situazioni. Vorrei provare alcuni approcci non SQL alla gestione dei dati.