commitLog et SSTables dans la base de données Cassandra
J'ai récemment commencé à travailler avec Cassandra base de données. J'ai installé single node cluster
dans ma boîte locale. Et je suis en train de travailler avec Cassandra 1.2.3
.
J'ai lu l'article sur internet et j'ai trouvé cette ligne-
Cassandra écrit sont d'abord écrites dans un journal de validation (pour la solidité),
et puis à une table en mémoire structure appelée memtable. Une écriture
réussi une fois qu'il est écrit dans le journal de validation et de la mémoire, donc il y
est très minime disk I/O au moment de l'écriture. Les écritures sont regroupées dans
mémoire et périodiquement écrit sur le disque à une persistance de la table
structure appelée un SSTable (triés chaîne de table).
Afin de comprendre les lignes ci-dessus, j'ai écrit un programme simple qui va écrire à Cassandra de Base de données à l'aide de Pelops client
. Et j'ai pu insérer les données dans la base de données Cassandra.
Et maintenant je suis en train de voir comment mes données a été écrit en commit log
et où que commit log file
est? Et aussi comment SSTables
est généré et où je peux trouver bien dans ma boîte locale et ce qu'il contient.
Je voulais voir ces deux fichiers afin que je puisse comprendre comment Cassandra fonctionne en arrière-plan.
Dans ma cassandra.fichier yaml, j'ai quelque chose comme ce
# 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
Mais quand j'ai ouvert commitLog, tout d'abord, il a beaucoup de données, de sorte que mon notepad++ n'est pas en mesure de l'ouvrir correctement et si c'est ouvert, je ne vois pas correctement à cause de certains de codage ou quoi. Et dans mon dossier de données, je ne peux pas trouver quoi que ce soit?
Ce qui signifie que ce dossier est vide pour moi-
S:\Apache Cassandra\apache-cassandra-1.2.3\storage\data\my_keyspace\users
Est-ce que je suis en manque ici? Quelqu'un peut-il m'expliquer comment lire commitLog et SSTables fichiers et où je peux trouver ces deux fichiers? Et aussi exactement ce qui se passe derrière les scènes à chaque fois que je suis en train d'écrire à Cassandra de base de données.
Mise à jour:-
Code que j'utilise les insérer dans la Base de données Cassandra-
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);
}
}
Espace et de la Colonne de la famille que j'ai créé-
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';
source d'informationauteur arsenal
Vous devez vous connecter pour publier un commentaire.
Vous y êtes presque dans votre compréhension. Cependant, le manque quelques détails les plus infimes.
Donc expliquer les choses de façon structurée, cassandra opération d'écriture, cycle de vie est divisée en trois étapes
Cassandra écrit sont d'abord écrites dans un journal de validation (pour la solidité), puis à une table en mémoire structure appelée memtable. Une écriture dit à réussi une fois qu'il est écrit dans le journal de validation et de la mémoire, donc il y a très peu d'I/O disque au moment de l'écriture. Quand jamais le memtable manque d'espace, j'.e lorsque le nombre de touches de dépasser certaine limite (128) est par défaut) ou lorsqu'il atteint la durée (cluster de l'horloge), il est stocké dans sstable, immuables de l'espace (Ce mécanisme est appelé Rinçage). Une fois que les écritures sont fait sur SSTable, alors vous pouvez voir les données correspondant dans le dossier de données, dans votre cas son
S:\Apache Cassandra\apache-cassandra-1.2.3\storage\data
. Chaque SSTable compose principalement de 2 fichiers - fichier d'Index et le fichier de DonnéesFichier d'Index contient la Floraison filtre et-Clés Offset paires
Fichier de données contient les données de la colonne
Et concernant commitlog fichiers, ces fichiers cryptés maintenu intrinsèquement par Cassandra, pour lequel vous n'êtes pas en mesure de voir quelque chose correctement.
Mise à JOUR:
Memtable est un cache en mémoire avec le contenu stocké en tant que clé/colonne (les données sont triées par clé). Chaque colonne de la famille a une Memtable et de récupérer les données de la colonne de la clé. Alors maintenant, j'espère que vous êtes dans l'état d'esprit clair pour comprendre le fait, pourquoi on ne peut pas les localiser dans notre disque.
Dans votre cas, votre memtable n'est pas plein comme memtable les seuils ne sont pas blanchis encore résultant pas de rinçage. Vous pouvez en savoir plus sur MemtableThresholds ici mais il est recommandé de ne pas toucher que le Cadran.
SSTableStructure:
Pour plus d'informations, reportez-vous sstable