本文源碼:GitHub·點這裏 || GitEE·點這裏java
1、Cassandra簡介
一、基礎描述
Cassandra是一套開源分佈式NoSQL數據庫系統。它最初由Facebook開發,用於儲存收件箱等簡單格式數據,此後,因爲Cassandra良好的可擴展性,逐漸發展成爲了一種流行的分佈式結構化數據存儲方案。node
二、特色分析
彈性可擴展性git
Cassandra是高度可擴展的;它容許添加更多的硬件以適應更多的客戶和更多的數據根據要求,能夠根據業務的數據流量輕鬆擴展集羣規模。github
架構特色web
Cassandra能夠基於分佈式運行,並採用了許多容錯機制。因爲去中心化無主的策略,因此沒有單點故障。能夠作到不停服滾動升級。這是由於Cassandra能夠支持多個節點的臨時失效(取決於羣集大小),對羣集的總體性能影響能夠忽略不計。而且Cassandra提供多地域容災。Cassandra容許將數據複製到其餘數據中心,並在多個地域保留多副本,十分適用於不能承擔故障的關鍵業務,必須持續提供服務的應用程序。spring
數據存儲機制數據庫
Cassandra適應全部可能的數據格式,包括:結構化,半結構化和非結構化。能夠根據業務的須要動態地適應變化的數據結構,而且經過在多個數據中心之間複製數據,能夠靈活地在須要時分發數據。有許多案例證實Cassandra能夠在金融,醫療,物聯網等領域使用。apache
資源整合能力vim
Cassandra能夠很容易的跟其餘開源組件作集成,其中包括Hadoop,Spark,Kafka,Solr等系列組件,成爲大數據業務處理裏面重要的一個角色。centos
2、集羣環境搭建
一、環境概覽
- jdk1.8
- apache-cassandra-3.11.7-bin.tar.gz
- centos7
- 三臺服務:hop0一、hop0二、hop03節點
二、安裝包處理
tar -zxvf apache-cassandra-3.11.7-bin.tar.gz mv apache-cassandra-3.11.7 cassandra3.11
三、環境變量
[root@hop01 opt]# vim /etc/profile export CASSANDRA_HOME=/opt/cassandra3.11 export PATH=$PATH:$CASSANDRA_HOME/bin [root@hop01 opt]# source /etc/profile
四、建立目錄
# 數據目錄 mkdir -p /data/cassandra/data # 日誌目錄 mkdir -p /data/cassandra/log
五、集羣配置
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地址便可。
六、啓動集羣
# 集羣下節點依次執行啓動命令 cassandra -R # 查看節點狀態 nodetool status
七、基礎操做
進入命令行
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 ;
基於其餘服務查看數據,能夠看到數據已經在集羣間作了同步過程:
3、集成SpringBoot框架
一、核心依賴
<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依賴。
二、核心配置
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:上述配置的集羣名稱;
三、基於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) ; } }
四、基於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); } }
五、實體表結構
注意這裏的註解是基於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 = "user_name") private String userName ; }
4、源代碼地址
GitHub·地址 https://github.com/cicadasmile/data-manage-parent GitEE·地址 https://gitee.com/cicadasmile/data-manage-parent
推薦閱讀:數據源管理系列