阅读:5317回复:0
Cassandra介绍
Apache Cassandra是一套开源分布式Key-Value存储系统。Cassandra不是一个传统的关系型数据库,它是一个混合型的非关系的数据库它以完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。
Cassandra特点:
Cassandra存储信息分类:Memtable、Commit Log、SSTable Memtable在内存中记录着最近所做的修改,而SSTable则在磁盘上记录着Cassandra所承载的绝大部分数据。在SSTable内部记录着一系列根据键排列的一系列键值对。通常情况下,一个Cassandra表会对应着一个Memtable和多个SSTable。除此之外,为了提高对数据进行搜索和访问的速度,Cassandra还允许软件开发人员在特定的列上创建索引。 鉴于数据可能存储于Memtable,也可能已经被持久化到SSTable中,因此Cassandra在读取数据时需要合并从Memtable和SSTable所取得的数据。同时为了提高运行速度,减少不必要的对SSTable的访问,Cassandra提供了一种被称为是Bloom Filter的组成:每个SSTable都有一个Bloom Filter,以用来判断与其关联的SSTable是否包含当前查询所请求的一条或多条数据。如果是,Cassandra将尝试从该SSTable中取出数据;如果不是,Cassandra则会忽略该SSTable,以减少不必要的磁盘访问。在经由Bloom Filter判断出与其关联的SSTable包含了请求所需要的数据之后,Cassandra就会开始尝试从该SSTable中取出数据了。首先,Cassandra会检查PartitionKey Cache是否缓存了所要求数据的索引项Index Entry。如果存在,那么Cassandra会直接从Compression Offset Map中查询该数据所在的地址,并从该地址取回所需要的数据;如果Partition Key Cache并没有缓存该Index Entry,那么Cassandra首先会从Partition Summary中找到Index Entry所在的大致位置,并进而从该位置开始搜索Partition Index,以找到该数据的Index Entry。 在写入时,Cassandra会首先将数据写入到Memtable中,同时在Commit Log的末尾添加该写入所对应的记录。这样在机器断电等异常情况下,Cassandra仍能通过Commit Log来恢复Memtable中的数据。在持续地写入后,Memtable的大小将逐渐增长。在其大小到达某个阈值时,Cassandra的数据迁移流程就将被触发。该流程一方面会将Memtable中的数据添加到相应的SSTable的末尾,另一方面则会将Commit Log中的写入记录移除。 Cassandra集群机制:
|
|
最新喜欢:何光强 |