Domanda

Voglio fare una domanda per due famiglie di colonne contemporaneamente ... Sto usando la gemma Cassandra-CQL per i binari e le mie famiglie di colonne sono:

utenti
seguente
seguaci
user_count
Message_Count
messaggi

Ora voglio ricevere tutti i messaggi dalle persone che un utente sta seguendo. Esiste una sorta di multigietta con Cassandra-CQL o c'è qualche altra possibilità modificando DataModel per ottenere questo tipo di dati?

È stato utile?

Soluzione

Chiamerei il tuo attuale modello di dati un design tradizionale di entità/relazionale. Ciò avrebbe senso utilizzare con un database SQL. Quando si dispone di un database relazionale, ti basi sui join per costruire le tue opinioni che abbracciano più entità.

Cassandra non ha alcuna capacità di eseguire join. Quindi, invece di modellare i tuoi dati in base alle tue entità e relazioni, dovresti modellarli in base a come intendi interrogarli. Per il tuo esempio di "tutti i messaggi delle persone che un utente sta seguendo" potresti avere una famiglia di colonne in cui il rowkey è l'Userid e le colonne sono tutti i messaggi delle persone che l'utente segue (dove il nome della colonna è un timestamp+userid e il valore è il messaggio):

RowKey                              Columns
-------------------------------------------------------------------
|        | TimeStamp0:UserA | TimeStamp1:UserB | TimeStamp2:UserA |
| UserID |------------------|------------------|------------------|
|        | Message          | Message          | Message          |
-------------------------------------------------------------------

Probabilmente vorresti anche una famiglia di colonne con tutti i messaggi che un utente specifico ha scritto (suppongo che il messaggio sia trasmesso a tutti gli utenti invece di essere indirizzato a un determinato utente):

RowKey                   Columns
--------------------------------------------------------
|        | TimeStamp0 | TimeStamp1 | TimeStamp2        |
| UserID |------------|------------|-------------------|
|        | Message    | Message    | Message           |
--------------------------------------------------------

Ora, quando crei un nuovo messaggio, dovrai inserirlo più posti. Ma quando è necessario elencare tutti i messaggi delle persone che un utente sta seguendo, devi solo recuperare da una riga (che è veloce).

Ovviamente se supporti l'aggiornamento o l'eliminazione dei messaggi, dovrai farlo ovunque ci sia una copia del messaggio. Dovrai anche considerare cosa dovrebbe accadere quando un utente segue o non seguisce qualcuno. Esistono più soluzioni a questo problema e la tua soluzione dipenderà da come si desidera che la tua applicazione si comporti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top