本文原始碼:GitHub·點這里 || GitEE·點這里
一、Cassandra簡介
1、基礎描述
Cassandra是一套開源分布式NoSQL資料庫系統,它最初由Facebook開發,用于儲存收件箱等簡單格式資料,此后,由于Cassandra良好的可擴展性,逐漸發展成為了一種流行的分布式結構化資料存盤方案,
2、特點分析
彈性可擴展性
Cassandra是高度可擴展的;它允許添加更多的硬體以適應更多的客戶和更多的資料根據要求,可以根據業務的資料流量輕松擴展集群規模,
架構特點
Cassandra可以基于分布式運行,并采用了許多容錯機制,由于去中心化無主的策略,所以沒有單點故障,可以做到不停服滾動升級,這是因為Cassandra可以支持多個節點的臨時失效(取決于群集大小),對群集的整體性能影響可以忽略不計,并且Cassandra提供多地域容災,Cassandra允許將資料復制到其他資料中心,并在多個地域保留多副本,十分適用于不能承擔故障的關鍵業務,必須持續提供服務的應用程式,
資料存盤機制
Cassandra適應所有可能的資料格式,包括:結構化,半結構化和非結構化,可以根據業務的需要動態地適應變化的資料結構,并且通過在多個資料中心之間復制資料,可以靈活地在需要時分發資料,有許多案例證明Cassandra可以在金融,醫療,物聯網等領域使用,
資源整合能力
Cassandra可以很容易的跟其他開源組件做集成,其中包括Hadoop,Spark,Kafka,Solr等系列組件,成為大資料業務處理里面重要的一個角色,
二、集群環境搭建
1、環境概覽
- jdk1.8
- apache-cassandra-3.11.7-bin.tar.gz
- centos7
- 三臺服務:hop01、hop02、hop03節點
2、安裝包處理
tar -zxvf apache-cassandra-3.11.7-bin.tar.gz
mv apache-cassandra-3.11.7 cassandra3.11
3、環境變數
[root@hop01 opt]# vim /etc/profile
export CASSANDRA_HOME=/opt/cassandra3.11
export PATH=$PATH:$CASSANDRA_HOME/bin
[root@hop01 opt]# source /etc/profile
4、創建目錄
# 資料目錄
mkdir -p /data/cassandra/data
# 日志目錄
mkdir -p /data/cassandra/log
5、集群配置
vim /opt/cassandra3.11/conf/cassandra.yaml
# 配置集群名稱
cluster_name: 'CasCluster'
# 配置資料目錄
data_file_directories:
- /data/cassandra/data
# 配置日志目錄
commitlog_directory: /data/cassandra/log
# 設定監聽地址,當前服務IP
listen_address: 192.168.72.132
# 配置RPC服務
start_rpc: true
rpc_address: 192.168.72.132
# 配置集群節點
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "192.168.72.132,192.168.72.138,192.168.72.139"
將該配置分發到集群的每個節點,注意listen_address和rpc_address是節點自己的IP地址即可,
6、啟動集群
# 集群下節點依次執行啟動命令
cassandra -R
# 查看節點狀態
nodetool status
7、基礎操作
進入命令列
cqlsh hop01
創建keyspace,并選擇
CREATE KEYSPACE IF NOT EXISTS castest WITH REPLICATION = {'class': 'SimpleStrategy','replication_factor':3};
use castest ;
創建表,寫入資料
CREATE TABLE user_info (id int, user_name varchar, PRIMARY KEY (id) );
INSERT INTO user_info (id,user_name) VALUES (1,'user01');
查詢資料
select * from user_info ;
基于其他服務查看資料,可以看到資料已經在集群間做了同步程序:

三、集成SpringBoot框架
1、核心依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-cassandra</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>${spring.boot.version}</version>
</dependency>
這里核心需要cassandra依賴和操作的API依賴,
2、核心配置
spring:
data:
cassandra:
keyspace-name: castest
contact-points: 192.168.72.138,192.168.72.132,192.168.72.139
port: 9042
cluster-name: CasCluster
keyspace-name:類似關系型資料庫的名稱;
contact-points:集群下節點的IP地址;
port:默認埠;
cluster-name:上述配置的集群名稱;
3、基于Template命令
CassandraTemplate模板類,實作了一系列操作Cassandra資料庫的基本方法,直接注入即可使用,
@Repository
public class UserInfoTemplate {
@Resource
private CassandraTemplate cassandraTemplate ;
// 查詢全部資料
public List<UserInfo> getList (){
return cassandraTemplate.select("SELECT * FROM user_info",UserInfo.class) ;
}
// 添加資料
public UserInfo insert (UserInfo userInfo){
return cassandraTemplate.insert(userInfo) ;
}
// 根據主鍵查詢
public UserInfo selectOneById (Integer id){
return cassandraTemplate.selectOneById(id,UserInfo.class) ;
}
// 修改資料
public UserInfo update (UserInfo userInfo){
return cassandraTemplate.update(userInfo) ;
}
// 洗掉資料
public Boolean deleteById (Integer id){
return cassandraTemplate.deleteById(id,UserInfo.class) ;
}
}
4、基于Repository介面
SpringBoot框架中定義的資料庫訪問核心介面,
介面實作
import com.cassand.cluster.entity.UserInfo;
import org.springframework.data.repository.CrudRepository;
public interface UserInfoRepository extends CrudRepository<UserInfo,Integer> {
}
介面用法
@Service
public class RepositoryService {
@Resource
private UserInfoRepository userInfoRepository ;
// 保存
public UserInfo save (UserInfo userInfo){
return userInfoRepository.save(userInfo) ;
}
// 查詢
public UserInfo getById (Integer id){
return userInfoRepository.findById(id).get() ;
}
// 修改
public UserInfo update (UserInfo userInfo){
// 主鍵ID存在的情況即為修改
return userInfoRepository.save(userInfo);
}
// 洗掉
public void deleteById (Integer id){
userInfoRepository.deleteById(id);
}
}
5、物體表結構
注意這里的注解是基于cassandra特定的一套,
import org.springframework.data.cassandra.core.mapping.Column;
import org.springframework.data.cassandra.core.mapping.PrimaryKey;
import org.springframework.data.cassandra.core.mapping.Table;
@Table("user_info")
public class UserInfo {
public UserInfo(Integer id, String userName) {
this.id = id;
this.userName = userName;
}
@PrimaryKey
private Integer id ;
@Column(value = https://www.cnblogs.com/cicada-smile/p/"user_name")
private String userName ;
}
四、源代碼地址
GitHub·地址
https://github.com/cicadasmile/data-manage-parent
GitEE·地址
https://gitee.com/cicadasmile/data-manage-parent
推薦閱讀:資料源管理系列
| 序號 | 標題 |
|---|---|
| 01 | 資料源管理:主從庫動態路由,AOP模式讀寫分離 |
| 02 | 資料源管理:基于JDBC模式,適配和管理動態資料源 |
| 03 | 資料源管理:動態權限校驗,表結構和資料遷移流程 |
| 04 | 資料源管理:關系型分庫分表,列式庫分布式計算 |
| 05 | 資料源管理:PostGreSQL環境整合,JSON型別應用 |
| 06 | 資料源管理:基于DataX組件,同步資料和原始碼分析 |
| 07 | 資料源管理:OLAP查詢引擎,ClickHouse集群化管理 |
| 08 | 資料源管理:Kafka集群環境搭建,訊息存盤機制詳解 |
| 09 | 資料源管理:搜索引擎框架,ElasticSearch集群模式 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/83215.html
標籤:Java
