2010-03-19 13 views
10

Spero che qualcuno possa aiutarmi a suggerire un modello di dati adatto da implementare utilizzando il database nosql Apache Cassandra. Più di quanto ne ho bisogno per lavorare con carichi elevati e grandi quantità di dati.Suggerisci un modello dati Cassandra per uno schema esistente

semplificato Ho 3 tipi di oggetti:

  • prodotto
  • Tag
  • ProductTag

prodotto:

key - string key 
name - string 
.... - some other fields 

Tag:

key - string key 
name - unique tag words 

ProductTag:

product_key - foreign key referring to product 
tag_key - foreign key referring to tag 
rating - this is rating of tag for this product 

Ogni prodotto può avere 0 o più tag. Il tag può essere assegnato a 1 o più prodotti. La relazione tra prodotti e tag è molti-a-molti in termini di database relazionali.

Il valore di "classificazione" viene aggiornato "molto" spesso.

ho bisogno di essere eseguire le seguenti query

  • Selezionare gli oggetti di chiavi
  • Seleziona tag per il prodotto in ordine di voto
  • selezionare i prodotti attraverso l'ordine dei contrassegni per voto
  • Aggiornamento rating da PRODUCT_KEY e tag_key

Il più importante è rendere queste query davvero veloci su grandi quantità di dati, considerando che la valutazione è costantemente aggiornata.

risposta

2

Qualcosa di simile a questo:

Products : { // Column Family 
    productA : { //Row key 
     name: 'The name of the product' // column 
     price: 33.55 // column 
     tags : 'fun, toy' // column 
    } 
} 

ProductTag : { // Column Family 
    fun : { //Row key 
     timeuuid_1 : productA // column 
     timeuuid_2 : productB // column 
    }, 
    toy : { //Row key 
     timeuuid_3 : productA // column 
    } 
} 

UPDATE
Scegli questa Model to store biggest score

+0

Che dire messa in vendita di etichette di prodotti in ordine di voto? O elencando i prodotti con un'etichetta ordinata per valutazione? Tale query richiederebbe l'uso di 2 indici allo stesso tempo per essere efficace –

+0

Ha senso. Grazie per il link! Un'altra idea che sto considerando è quella di utilizzare strumenti esterni come la ricerca di sfinge o forse lucandra per selezionare oggetti ordinati per valutazione. La ricerca di testo completo della Sfinge funziona bene per tali compiti, ma non supporta gli aggiornamenti "in tempo reale" dell'indice. –

Problemi correlati