javascript
Spring Data对Cassandra 3的支持
名為Ingalls的新Spring Data發(fā)布火車的發(fā)布引起了我的關(guān)注,其中之一是Spring Data Cassandra最終支持Cassandra 3+。 因此,我回顧了我的一個舊樣本,并嘗試了較新版本的Cassandra。
安裝Cassandra
第一步是安裝本地版本的Cassandra,我繼續(xù)發(fā)現(xiàn)ccm工具在能夠啟動和拆除小型集群方面非常出色。 這是我正在運(yùn)行的命令,用于啟動一個基于3個節(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};接下來,我需要創(chuàng)建表來保存數(shù)據(jù)。 卡桑德拉(Cassandra)的一般建議是根據(jù)查詢模式對表進(jìn)行建模-鑒于此,我首先定義一個表來保存基本的“旅館”信息:
CREATE TABLE IF NOT EXISTS sample.hotels (id UUID,name varchar,address varchar,state varchar,zip varchar,primary key((id), name) );假設(shè)我必須支持兩種查詢模式–基于說第一個字母的酒店檢索和按州檢索酒店,我有一個“ hotels_by_letter”非規(guī)范化表來支持按“第一個字母”檢索:
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) );僅針對各種情況,就可以使用“ hotels_by_state”實(shí)例化視圖來支持按酒店所在的州進(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)編碼庫
在Java方面,由于我要持久存儲并查詢一個稱為“ Hotel”的簡單域類型,因此如下所示:
@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操作,所需的就是一個存儲庫接口 ,如以下代碼所示:
import cass.domain.Hotel; import org.springframework.data.repository.CrudRepository;import java.util.UUID;public interface HotelRepository extends CrudRepository<Hotel, UUID>, HotelRepositoryCustom {}此存儲庫還從HotelRepositoryCustom接口繼承,該接口將提供自定義查找器以支持按名字和狀態(tài)進(jìn)行檢索。
現(xiàn)在要保留一個酒店實(shí)體,我要做的就是調(diào)用存儲庫方法:
hotelRepository.save(hotel);實(shí)例化視圖中的數(shù)據(jù)由Cassandra自動同步和維護(hù),但是“ hotels_by_letter”表中的數(shù)據(jù)必須通過代碼進(jìn)行管理,因此我定義了另一個存儲庫來維護(hù)該表中的數(shù)據(jù):
public interface HotelByLetterRepository extends CrudRepository<HotelByLetter, HotelByLetterKey>, HotelByLetterRepositoryCustom {} 自定義界面及其實(shí)現(xiàn)是為了方便根據(jù)酒店名稱的首字母在查詢中搜索此表,并通過
Spring數(shù)據(jù)Cassandra的自定義存儲庫實(shí)現(xiàn)功能。
給定這些存儲庫類,提供查詢支持的自定義存儲庫,其余的代碼是將Spring Boot的Cassandra Auto Configuration所促進(jìn)的所有工作聯(lián)系在一起。
本質(zhì)上就是全部, Spring Data Cassandra使與Cassandra 3+的交互變得非常簡單。
我相信,一個完整的工作項目可以更好地熟悉這個出色的庫,并且我的github倉庫中也提供了這樣的示例– 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的支持的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 星际1虫族电脑6d(星际争霸1虫族兵种详
- 下一篇: 怎么使用电脑鼠标(怎么使用电脑鼠标控制)