日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring Data对Cassandra 3的支持

發(fā)布時(shí)間:2023/12/3 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Data对Cassandra 3的支持 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

名為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)功能。

import com.datastax.driver.core.querybuilder.QueryBuilder; import com.datastax.driver.core.querybuilder.Select; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.cassandra.core.CassandraTemplate; import org.springframework.stereotype.Repository;import java.util.List;@Repository public class HotelRepositoryImpl implements HotelRepositoryCustom {private final CassandraTemplate cassandraTemplate;@Autowiredpublic HotelRepositoryImpl(CassandraTemplate cassandraTemplate) {this.cassandraTemplate = cassandraTemplate;}@Overridepublic List<Hotel> findByState(String state) {Select select = QueryBuilder.select().from("hotels_by_state");select.where(QueryBuilder.eq("state", state));return this.cassandraTemplate.select(select, Hotel.class);} }@Repository public class HotelByLetterRepositoryImpl implements HotelByLetterRepositoryCustom {private final CassandraTemplate cassandraTemplate;public HotelByLetterRepositoryImpl(CassandraTemplate cassandraTemplate) {this.cassandraTemplate = cassandraTemplate;}@Overridepublic List<HotelByLetter> findByFirstLetter(String letter) {Select select = QueryBuilder.select().from("hotels_by_letter");select.where(QueryBuilder.eq("first_letter", letter));return this.cassandraTemplate.select(select, HotelByLetter.class);}}

給定這些存儲(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。