Tradurre una dati MySQL / query impostato nella rappresentazione equivalente Cassandra

StackOverflow https://stackoverflow.com/questions/2413466

  •  19-09-2019
  •  | 
  •  

Domanda

Si consideri una tabella di MySQL 500 milioni di fila con la seguente struttura della tabella ...

CREATE TABLE foo_objects (
  id int NOT NULL AUTO_INCREMENT,
  foo_string varchar(32),
  metadata_string varchar(128),
  lookup_id int,
  PRIMARY KEY (id),
  UNIQUE KEY (foo_string),
  KEY (lookup_id),
);

... che viene interrogato utilizzando solo i seguenti due query ...

# lookup by unique string key, maximum of one row returned
SELECT * FROM foo_objects WHERE foo_string = ?;
# lookup by numeric lookup key, may return multiple rows
SELECT * FROM foo_objects WHERE lookup_id = ?;

A fronte di tali richieste, come è possibile rappresentare la data set di dati utilizzando Cassandra?

È stato utile?

Soluzione

ci sono due opzioni:

(1) è una specie di tradizione: avere uno CF (columnfamily) con gli oggetti foo, una riga per foo, una colonna per campo. quindi creare due CF indice, in cui la chiave riga in uno è i valori di stringa, e la chiave riga dell'altra è lookup_id. Colonne nelle righe dell'indice sono ids foo. Così si fa un GET sulla CF indice, poi un MULTIGET sugli ID restituito.

Si noti che se si può fare lo stesso ID come lookup_id allora avete un indice meno da mantenere.

clienti di alto livello come Lazyboy di Digg ( http://github.com/digg/lazyboy ) automatizzerà mantenendo CFS indice per voi. Cassandra in sé non lo fa automaticamente (ancora).

(2) è come (1), ma si duplicare interi oggetti foo in sottocolonne delle righe di indice (cioè, le colonne l'indice di alto livello sono supercolumns). Se non si è in realtà l'interrogazione da parte del foo id in sé, non è necessario memorizzarlo nella propria CF a tutti.

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