📜  Cassandra中的读写路径(1)

📅  最后修改于: 2023-12-03 14:40:01.990000             🧑  作者: Mango

Cassandra中的读写路径

Cassandra是一个分布式、高可用、高扩展性的NoSQL数据库,它的读写路径也具有分布式、高可用、高扩展性的特点。

写路径

当我们向Cassandra写入数据时,写路径主要分为以下几个步骤:

  1. 客户端向Coordinator节点发送写请求;
  2. Coordinator节点根据写请求中的Partition Key(分区键)确定数据应该存储在哪些节点上;
  3. Coordinator节点将写请求转发给相应的节点;
  4. 相应的节点将数据写入内存中的Memtable中;
  5. 当Memtable达到一定大小或者一定时间后,会将其中的数据写入SSTable(不可变的、有序的数据文件)中;
  6. SSTable中的数据会定期合并,生成新的SSTable。

写路径的流程如下图所示:

写路径

代码实现:

// 向Cassandra写入数据
const query = 'INSERT INTO myTable (column1, column2, column3) VALUES (?, ?, ?)';
const params = [value1, value2, value3];
client.execute(query, params, { prepare: true }, (err, result) => {
    console.log('写操作:', result);
});
读路径

当我们从Cassandra读取数据时,读路径主要分为以下几个步骤:

  1. 客户端向Coordinator节点发送读请求;
  2. Coordinator节点根据读请求中的Partition Key和Clustering Key(聚簇键)确定数据应该从哪个节点读取;
  3. Coordinator节点将读请求转发给相应的节点;
  4. 相应的节点从SSTable中读取数据,并缓存到内存中的Key Cache和Row Cache中;
  5. 如果数据没有被缓存,则从磁盘中读取数据并放入Cache中;
  6. 如果数据不存在,则返回空结果。

读路径的流程如下图所示:

读路径

代码实现:

// 从Cassandra读取数据
const query = 'SELECT column1, column2, column3 FROM myTable WHERE partitionKey = ? AND clusteringKey = ?';
const params = [partitionKey, clusteringKey];
client.execute(query, params, { prepare: true }, (err, result) => {
    console.log('读操作:', result.rows);
});
总结

Cassandra的读写路径是基于分布式、高可用、高扩展性的架构设计的,写路径的数据存储在内存中的Memtable中,最终存储在SSTable中,而读路径会先从内存缓存中读取数据,如果没有则从磁盘中读取数据。程序员在使用Cassandra时,需要了解Cassandra的读写路径,以便于构建高性能、可靠的应用程序。