Cassandra 原理理解以及安装文档解释

datacenter 和 rack

  • 1.datacenter 数据中心 和 rack 机架。一般一个 机房设置一个 datacenter,不同机架 设置不同的rack

Cassandra primary key composite key

create table sample {
    key_one text,
    key_two text,
    data text,
    PRIMARY KEY(key_one, key_two)
};
  • 在上面的示例中,我们所创建的Primary Key就是一个由两个列key_one和key_two组成的Composite Key。其中该Composite Key的第一个组成被称为是Partition Key,而后面的各组成则被称为是Clustering Key。Partition Key用来决定Cassandra会使用集群中的哪个结点来记录该数据,每个Partition Key对应着一个特定的Partition。而Clustering Key则用来在Partition内部排序。如果一个Primary Key只包含一个域,那么其将只拥有Partition Key而没有Clustering Key。

Cassandra 的commitlog、memtable、SStable

和关系数据库一样,Cassandra在写数据之前,也需要先记录日志,称之为 commitlog,然后数据才会写入到Column Family 对应的Memtable中,并且Memtable 中的内容是按照key排序好的。Memtable 是一种内存结构,满足一定条件后批量刷新到磁盘上,存储为SSTable。这种机制,相当于缓存写回机制(Write-back Cache),优势在于将随机IO写变成顺序IO写,降低大量的写操作对于存储系统的压力。SSTable一旦完成写入,就不可变更,只能读取。下一次Memtable 需要刷新到一个新的SSTable文件中。所以对于Cassandra来说,可以认为只有顺序写,没有随机写操作。
因为SSTable数据不可更新,可能导致同一个Column Family的数据存储在多个SSTable中,这时查询数据时,需要去合并读取Column Family 所有的SSTable和Memtable,这样到一个Column Family 的数量很大的时候,可能导致查询效率严重下降。因此需要有一种机制能快速定位查询的key落在那些SSTable中,而不需要去读取合并所有的SSTable。Cassandra采用的是Bloom Filter算法,通过多个hash函数将key映射到一个位图中,来快速判断这个key属于哪个SSTable。为了避免大量SSTable带来的性能影响,Cassandra 也提供一种定期将多个SSTable合并成一个新的SSTable的机制,因为每个SSTable中的key都是已经排序好的,因此只需要做一次合并排序就可以完成该任务,代价还是可以接受的

Cassandra 中的数据主要分为三种:

  • commitlog:cassandra 在写数据之前,也需要先记录日志,称之为commitlog,然后数据才会写入到
    Column Family 对应的Memtable中,并且Memtable中的内容是按照key排序好的。commitlog主要记录客户端提交过来的数据以及操作。这个数据将持久化到磁盘中,以便数据没有被持久化到磁盘时可以用来恢复。commitlog 是Server级别的,不是Column Family 级别的。每个commitlog文件的大小是固定的,称之为Commitlog Segment,当一个Commitlog文件写满以后,会新建一个的文件。当旧的commitlog文件不再需要时,会自动清除。每个commitlog文件(Segment)都有一个固定大小(大小根据column family的数目而定)的commitlogHeader结构,其中有两个重要的数组,每一个column Family在这两个数组中都存在一个对应的元素。其中一个是位图数据(BitSet dirty),如果column Family 对应的Memtable中有脏数据,则置为1,否则为0,这在恢复的时候可以指出哪些Column Family 是需要利用commitlog进行恢复的。另外一个是整数数组(int[] lastFlushedAt),保存的是Column Family 在上一次 Flush时日志的偏移位置,恢复时则可以从这个位置读取commitlog记录。通过这两个数组结构,Cassandra 可以在异常重启服务的时候根据持久化的SSTable和commitlog重构内存中的Memtable的内容,也就是类似Oracle等关系型数据库的实例恢复。当Memtable flush到磁盘的SSTable时,会将所有的commitlog文件的dirty数组对应的位清零,而在commitlog 达到大小限制创建新的文件时,dirty 数组会从上一个文件中继承过来。如果一个commitlog文件的dirty数组全部被清零,则表示这个commitlog 在回复的时候不再需要,可以被清除。因此,在恢复的时候,所有的磁盘上存在的commitlog文件都是需要的。
  • Memtable: 数据写入的第二个阶段,每一个columnfamily 对应一个memtable。也就是每一张表对应一个。用户写的数据在内存中的形式。
  • SSTable:这是磁盘存储数据的文件。每一个column family都会对应一个SSTable文件。这又分为Data、Index和Filter三种数据格式。其中Data.db文件是SSTable数据文件,SSTable是sorted strings table的缩写,按照key排序后存储key/value 键值字符串。index.db是索引文件,保存的是每个key在数据文件中的偏移位置,而Filter.db是Bloom Filter算法生产的映射文件。

Cassandra 数据库安装文档

  • 官网安装网址 https://cassandra.apache.org/doc/latest/getting_started/installing.html
  • 文件夹说明 conf configuration 配置文件
    bin binary file 二进制命令文件
    data cassandra data file
    logs 日志文件
    在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-56DnWDjH-1607669809686)(Img/TIM截图20200408161639.png)]

  • Cassandra configuring cassandra.yaml 中设置
    • cluster_name: the name of your cluster.
    • seeds: a comma separated list of the IP addresses of your cluster seeds.
    • storage_port: you don’t necessarily need to change this but make sure that there are no firewalls blocking this port.tcp port,for commands and data
    • listen_address: the IP address of your node, this is what allows other nodes to communicate with this node so it is important that you change it. Alternatively, you can set listen_interface to tell Cassandra which interface to use, and consecutively which address to use. Set only one, not both.
      Cassandra 数据库内,用于与其他节点进行通信
    • native_transport_port: as for storage_port, make sure this port is not blocked by firewalls as clients will communicate with Cassandra on this port.
      CQL本地传输客户端监听端口
  • Environment variables
    • JVM-level settings such as heap size can be set in **cassandra-env.sh **

Cassandra 数据库

  • Cassandra 数据库 列式存储型。
  • 弹性可扩展性 Cassandra 是高度可扩展的;它容许添加更多的硬件以适应更多的客户和更多的数据要求
  • 数据存储灵活 Cassandra通过在多个数据中心之间复制数据,可以灵活地在需要时分发数据。
  • 便捷的数据分发 Cassandra 通过在多个数据中心之间复制数据,可以灵活地在需要时分发数据
  • 快速写入 Cassandra 被设计为在廉价的商品硬件上运行。它执行快熟写入,并可以存储百TB的数据,而不牺牲读取效率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值