Recentemente ho iniziato a lavorare con il database Cassandra. Ho installato single node cluster
nella mia casella locale. E sto lavorando con Cassandra 1.2.3
.commitLog e SSTables nel database Cassandra
stavo leggendo l'articolo su internet e ho trovato questo line-
Cassandra scrive vengono prima scritti in un registro commit (per durata), e quindi ad una struttura tabella in memoria chiamato memtable. Una scrittura è riuscita dopo essere stata scritta nel registro di commit e nella memoria, pertanto è un I/O disco molto minimale al momento della scrittura. Le scritture vengono raggruppate nella memoria e periodicamente scritte su disco in una tabella persistente. struttura denominata SSTable (tabella di stringhe ordinate).
Quindi, per comprendere le righe precedenti, ho scritto un semplice programma che scriverà nel database Cassandra utilizzando Pelops client
. E sono stato in grado di inserire i dati nel database di Cassandra.
E ora sto cercando di vedere come sono stati scritti i miei dati in commit log
e dove è lo commit log file
? E anche come viene generato SSTables
e dove posso trovarlo anche nella mia casella locale e cosa contiene anche.
Volevo vedere questi due file in modo da capire meglio come funziona Cassandra dietro le quinte.
Nel mio file cassandra.yaml, ho qualcosa di simile
# directories where Cassandra should store data on disk.
data_file_directories:
- S:\Apache Cassandra\apache-cassandra-1.2.3\storage\data
# commit log
commitlog_directory: S:\Apache Cassandra\apache-cassandra-1.2.3\storage\commitlog
# saved caches
saved_caches_directory: S:\Apache Cassandra\apache-cassandra-1.2.3\storage\savedcaches
Ma quando ho aperto commitLog, prima di tutto ha molti dati quindi il mio Notepad ++ non è in grado di aprire correttamente e se si apre, non riesco a vedere correttamente a causa di qualche codifica o cosa. E nella mia cartella di dati, non riesco a scoprire nulla?
Significato questa cartella è vuota per me-
S:\Apache Cassandra\apache-cassandra-1.2.3\storage\data\my_keyspace\users
C'è qualcosa che mi manca qui? Qualcuno può spiegarmi come leggere i file commitLog e SSTables e dove posso trovare questi due file? E anche cosa succede esattamente dietro le quinte ogni volta che scrivo al database di Cassandra.
Aggiornato: -
codice che sto usando per inserire in Cassandra Database-
public class MyPelops {
private static final Logger log = Logger.getLogger(MyPelops.class);
public static void main(String[] args) throws Exception {
// -------------------------------------------------------------
// -- Nodes, Pool, Keyspace, Column Family ---------------------
// -------------------------------------------------------------
// A comma separated List of Nodes
String NODES = "localhost";
// Thrift Connection Pool
String THRIFT_CONNECTION_POOL = "Test Cluster";
// Keyspace
String KEYSPACE = "my_keyspace";
// Column Family
String COLUMN_FAMILY = "users";
// -------------------------------------------------------------
// -- Cluster --------------------------------------------------
// -------------------------------------------------------------
Cluster cluster = new Cluster(NODES, 9160);
Pelops.addPool(THRIFT_CONNECTION_POOL, cluster, KEYSPACE);
// -------------------------------------------------------------
// -- Mutator --------------------------------------------------
// -------------------------------------------------------------
Mutator mutator = Pelops.createMutator(THRIFT_CONNECTION_POOL);
log.info("- Write Column -");
mutator.writeColumn(
COLUMN_FAMILY,
"Row1",
new Column().setName(" Name ".getBytes()).setValue(" Test One ".getBytes()).setTimestamp(new Date().getTime()));
mutator.writeColumn(
COLUMN_FAMILY,
"Row1",
new Column().setName(" Work ".getBytes()).setValue(" Engineer ".getBytes()).setTimestamp(new Date().getTime()));
log.info("- Execute -");
mutator.execute(ConsistencyLevel.ONE);
// -------------------------------------------------------------
// -- Selector -------------------------------------------------
// -------------------------------------------------------------
Selector selector = Pelops.createSelector(THRIFT_CONNECTION_POOL);
int columnCount = selector.getColumnCount(COLUMN_FAMILY, "Row1",
ConsistencyLevel.ONE);
System.out.println("- Column Count = " + columnCount);
List<Column> columnList = selector
.getColumnsFromRow(COLUMN_FAMILY, "Row1",
Selector.newColumnsPredicateAll(true, 10),
ConsistencyLevel.ONE);
System.out.println("- Size of Column List = " + columnList.size());
for (Column column : columnList) {
System.out.println("- Column: (" + new String(column.getName()) + ","
+ new String(column.getValue()) + ")");
}
System.out.println("- All Done. Exit -");
System.exit(0);
}
}
spazio delle chiavi e la Colonna di famiglia che ho created-
create keyspace my_keyspace with placement_strategy = 'org.apache.cassandra.locator.SimpleStrategy' and strategy_options = {replication_factor:1};
use my_keyspace;
create column family users with column_type = 'Standard' and comparator = 'UTF8Type';
Grazie mille per la spiegazione dettagliata. Questo chiarisce la maggior parte dei miei dubbi, ma ho trovato qualche altra domanda. :). Spero non ti dispiaccia rispondere anche a quelli. In primo luogo, hai detto che va a "una struttura di tabella in memoria chiamata memétable". C'è qualche posizione in questa 'struttura del tavolo? Dove posso vedere come appare? E cosa contiene in realtà? In secondo luogo, hai detto che viene scritto su sstable solo quando il memtable esaurisce lo spazio. Quindi, nel mio caso, non riesco a vedere l'articolo che viene creato nella cartella dei dati. Ho creato 'users' come famiglia di colonne e ho inserito due righe in quella. – ferhan
Continuazione, da sopra. Potrebbe essere possibile che il memtable non sia pieno nel mio caso in quanto ho inserito due righe ed è per questo che non è svuotato su SSTable giusto? E ho aggiornato la mia domanda con il codice con cui sto lavorando per inserirla nel database di Cassandra. In terzo luogo, nel mio caso, se ho bisogno di vedere 'SSTable' e come appare e cosa contiene? allora ho bisogno di assicurarmi che 'memtable' sia pieno, solo che verrà svuotato verso SSTable a destra e poi verrà creato all'interno della cartella dei dati? Se sì, come posso assicurarmi che il memble sia pieno dal mio programma? – ferhan
@TechGeeky vedere la sezione di aggiornamento – abhi