javascript
Spring Data对Cassandra 3的支持
名為Ingalls的新Spring Data發(fā)布火車的發(fā)布引起了我的關(guān)注,其中之一是Spring Data Cassandra最終支持Cassandra 3+。 因此,我回顧了我的一個(gè)舊樣本,并嘗試了較新版本的Cassandra。
安裝Cassandra
第一步是安裝本地版本的Cassandra,我繼續(xù)發(fā)現(xiàn)ccm工具在能夠啟動(dòng)和拆除小型集群方面非常出色。 這是我正在運(yùn)行的命令,用于啟動(dòng)一個(gè)基于3個(gè)節(jié)點(diǎn)的Apache Cassandra 3.9集群。
ccm create test -v 3.9 -n 3 -s --vnodes創(chuàng)建模式
連接到集群中的節(jié)點(diǎn):
ccm node1 cqlshCREATE KEYSPACE IF NOT EXISTS sample WITH replication = {'class':'SimpleStrategy', 'replication_factor':1};接下來(lái),我需要?jiǎng)?chuàng)建表來(lái)保存數(shù)據(jù)。 卡桑德拉(Cassandra)的一般建議是根據(jù)查詢模式對(duì)表進(jìn)行建模-鑒于此,我首先定義一個(gè)表來(lái)保存基本的“旅館”信息:
CREATE TABLE IF NOT EXISTS sample.hotels (id UUID,name varchar,address varchar,state varchar,zip varchar,primary key((id), name) );假設(shè)我必須支持兩種查詢模式–基于說(shuō)第一個(gè)字母的酒店檢索和按州檢索酒店,我有一個(gè)“ hotels_by_letter”非規(guī)范化表來(lái)支持按“第一個(gè)字母”檢索:
CREATE TABLE IF NOT EXISTS sample.hotels_by_letter (first_letter varchar,hotel_name varchar,hotel_id UUID,address varchar,state varchar,zip varchar,primary key((first_letter), hotel_name, hotel_id) );僅針對(duì)各種情況,就可以使用“ hotels_by_state”實(shí)例化視圖來(lái)支持按酒店所在的州進(jìn)行檢索:
CREATE MATERIALIZED VIEW sample.hotels_by_state ASSELECT id, name, address, state, zip FROM hotelsWHERE state IS NOT NULL AND id IS NOT NULL AND name IS NOT NULLPRIMARY KEY ((state), name, id)WITH CLUSTERING ORDER BY (name DESC)編碼庫(kù)
在Java方面,由于我要持久存儲(chǔ)并查詢一個(gè)稱為“ Hotel”的簡(jiǎn)單域類型,因此如下所示:
@Table("hotels") public class Hotel implements Serializable {@PrimaryKeyprivate UUID id;private String name;private String address;private String state;private String zip;... }現(xiàn)在,要能夠?qū)υ搶?shí)體執(zhí)行基本的CRUD操作,所需的就是一個(gè)存儲(chǔ)庫(kù)接口 ,如以下代碼所示:
import cass.domain.Hotel; import org.springframework.data.repository.CrudRepository;import java.util.UUID;public interface HotelRepository extends CrudRepository<Hotel, UUID>, HotelRepositoryCustom {}此存儲(chǔ)庫(kù)還從HotelRepositoryCustom接口繼承,該接口將提供自定義查找器以支持按名字和狀態(tài)進(jìn)行檢索。
現(xiàn)在要保留一個(gè)酒店實(shí)體,我要做的就是調(diào)用存儲(chǔ)庫(kù)方法:
hotelRepository.save(hotel);實(shí)例化視圖中的數(shù)據(jù)由Cassandra自動(dòng)同步和維護(hù),但是“ hotels_by_letter”表中的數(shù)據(jù)必須通過(guò)代碼進(jìn)行管理,因此我定義了另一個(gè)存儲(chǔ)庫(kù)來(lái)維護(hù)該表中的數(shù)據(jù):
public interface HotelByLetterRepository extends CrudRepository<HotelByLetter, HotelByLetterKey>, HotelByLetterRepositoryCustom {} 自定義界面及其實(shí)現(xiàn)是為了方便根據(jù)酒店名稱的首字母在查詢中搜索此表,并通過(guò)
Spring數(shù)據(jù)Cassandra的自定義存儲(chǔ)庫(kù)實(shí)現(xiàn)功能。
給定這些存儲(chǔ)庫(kù)類,提供查詢支持的自定義存儲(chǔ)庫(kù),其余的代碼是將Spring Boot的Cassandra Auto Configuration所促進(jìn)的所有工作聯(lián)系在一起。
本質(zhì)上就是全部, Spring Data Cassandra使與Cassandra 3+的交互變得非常簡(jiǎn)單。
我相信,一個(gè)完整的工作項(xiàng)目可以更好地熟悉這個(gè)出色的庫(kù),并且我的github倉(cāng)庫(kù)中也提供了這樣的示例– https://github.com/bijukunjummen/sample-boot-with-cassandra
翻譯自: https://www.javacodegeeks.com/2017/01/spring-data-support-cassandra-3.html
總結(jié)
以上是生活随笔為你收集整理的Spring Data对Cassandra 3的支持的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 星际1虫族电脑6d(星际争霸1虫族兵种详
- 下一篇: jsf标签p:ajax_JSF AJAX