Springboot3.3 整合Cassandra 4.1.5

一、数据库搭建

-- 创建Keyspace
CREATE KEYSPACE school WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 1};

-- 创建表
CREATE TABLE student(
   id int PRIMARY KEY,  
   name text,  
   age int,  
   genders int,  
   address text ,
   interest set<text>,
   phone list<text>,
   education map<text, text>
);

二、引入依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-cassandra</artifactId>
</dependency>

<!-- hutool是下面多线程导入数据引入 -->
<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.8.26</version>
</dependency>

三、配置文件

spring:
  application:
    name: Spring-Cassandra
  cassandra:
    keyspace-name: school
    contact-points:
      - 192.168.204.131:9042
    port: 9042
    username: ***
    password: ******
    local-datacenter: datacenter1
    request:
      timeout: 60s

检查Cassandra的local-datacenter,可执行下面命令:

[root@localhost apache-cassandra]# bin/nodetool status

 四、创建一个实体类:

import lombok.Data;
import org.springframework.data.cassandra.core.mapping.Column;
import org.springframework.data.cassandra.core.mapping.PrimaryKey;
import org.springframework.data.cassandra.core.mapping.Table;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Data
@Table(value="student")
public class Student implements Serializable {
    @PrimaryKey
    private Integer id;
    @Column("name")
    private String name;
    @Column("age")
    private Integer age;
    @Column("genders")
    private Integer genders;
    @Column("address")
    private String address;
    @Column("interest")
    private Set<String> interest;
    @Column("phone")
    private List<String> phone;
    @Column("education")
    private Map<String, String> education;
}

五、创建一个Controller


private final StudentService studentService;

@GetMapping("student")
public List<Student> getStudentByName(String name) {
	return studentService.getStudentByName(name);
}

@GetMapping("count")
public Long count() {
	return studentService.count();
}

@GetMapping("list")
public List<Student> list(String name) {
	Student student = new Student();
	student.setName(name);
	return studentService.list(student);
}

@GetMapping("save")
public String sava() {
	for(int i = 0; i<100; i++) {
		try {
			Thread.sleep(200);
		} catch (InterruptedException e) {
			throw new RuntimeException(e);
		}
		int finalI = i;
		ThreadUtil.execute(() -> {
			System.out.println("线程"+ finalI +"运行");
			List<Student> list = Lists.newArrayList();
			for(int j=0; j<100; j++) {
				UUID uuid = UUID.randomUUID();
				int hash = uuid.toString().hashCode();
				int maxTenDigit = (int) Math.pow(10, 10) - 1; // 10位整数的最大值
				int modHash = Math.abs(hash % maxTenDigit);

				Student student = new Student();
				student.setId(modHash);
				int random = (int) (Math.random() * 100);
				student.setName("GG"+ random);
				student.setAge(random);
				student.setGenders(1);
				student.setAddress("China");
				list.add(student);
//                    studentService.save(student);
			}
			System.out.println("线程"+ finalI +"开始批量插入");
			studentService.batchSave(list);
			System.out.println("线程"+ finalI +"结束批量插入");
		});
	}
	System.out.println("线程结束");
//        ThreadUtil.waitForDie();
	return "success";
}

注意:Cassandra 本身不适合用来做数据分析统计,比如 count,是需要去遍历数据库的,分布式数据库,那么就要通通遍历一次。小数据还可以,数据量大会报查询超时错误。

六、编写service查询数据

service接口省略

1、JPA方式查询

service实现

private final StudentMapper studentMapper;

@Override
public List<Student> getStudentByName(String name) {
	return studentMapper.getStudentByName(name);
}

mapper接口

@Query(value = "select id, address, age, genders, name, interest, phone, education from student where name = ?0 ALLOW filtering")
List<Student> getStudentByName(String name);

Allow filtering:

       如果你的查询条件里,有一个是根据索引查询,那其它非索引非主键字段,可以通过加一个ALLOW FILTERING来过滤实现;

  虽然查询非索引非主键字段,但是只要加了ALLOW FILTERING条件,它会先根据索引查出来的值,再对结果进行过滤;

    (如果不加ALLOW FILTERING,而又有非索引列,这样是不允许的; 加上ALLOW FILTERING,相当于在结果后再进行过滤。)

2、CassandraTemplate方式查询

private final CassandraTemplate cassandraTemplate;

@Override
public List<Student> list(Student queryInfo) {
	Query query = Query
			.query(where("name").is(queryInfo.getName()));
	query = query.withAllowFiltering();
	query = query.columns(Columns.from("id", "name", "age", "address", "genders", "interest", "phone", "education"));
	System.out.println(query);
	return this.cassandraTemplate.select(query, Student.class);
}

@Override
public void save(Student student) {
	this.cassandraTemplate.insert(student);
}

/**
* 批量插入
*/
@Override
public void batchSave(List<Student> list) {
	CassandraBatchOperations batchOps = cassandraTemplate.batchOps();
	batchOps.insert(list);
	batchOps.execute();
}

@Override
public Long count() {
	return cassandraTemplate.count(Student.class);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/729376.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型之-Seq2Seq介绍

大模型之-Seq2Seq介绍 1. Seq2Seq 模型概述 Seq2Seq&#xff08;Sequence to Sequence&#xff09;模型是一种用于处理序列数据的深度学习模型&#xff0c;常用于机器翻译、文本摘要和对话系统等任务。它的核心思想是将一个输入序列转换成一个输出序列。 Seq2Seq模型由两个主…

【计算机网络体系结构】计算机网络体系结构实验-DHCP实验

服务器ip地址 2. 服务器地址池 3. 客户端ip 4. ping Ipconfig

「五度易链」企业大数据API接口开放平台上线啦!

“五度易链”企业大数据API接口开放平台现已正式上线&#xff0c;旨在为广大企业、开发者及个人提供标准、安全、高效、便捷的企业数据API接口服务&#xff0c;帮您更轻松地构建应用、扩展功能&#xff0c;并基于用户应用场景提供专属接口定制服务&#xff0c;助力企业提升研发…

模式分解的概念(下)-无损连接分解的与保持函数依赖分解的定义和判断、损失分解

一、无损连接分解 1、定义 2、检验一个分解是否是无损连接分解的算法 输入与输出 输入&#xff1a; 关系模式R&#xff08;U&#xff0c;F&#xff09;&#xff0c;F是最小函数依赖集 R上的一个分解 输出&#xff1a; 判断分解是否为无损连接分解 &#xff08;1&#x…

【机器学习】Lasso回归:稀疏建模与特征选择的艺术

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Lasso回归&#xff1a;稀疏建模与特征选择的艺术引言一、Lasso回归简介1.1 基本…

python基础篇(4):range语句

1 功能介绍 range语句的功能是获得一个数字序列&#xff08;可迭代类型的一种&#xff09; 2 语法 语法1&#xff1a; range(num) 获取一个从0开始&#xff0c;到num结束的数字序列&#xff08;不含num本身&#xff09; 如range(5)取得的数据是&#xff1a;[0, 1, 2, 3, 4…

等保2.0对云计算有哪些特定的安全要求?

等保2.0针对云计算环境设定了特定的安全要求&#xff0c;这些要求是在原有的安全通用要求基础上的扩展&#xff0c;旨在确保云服务的安全性和合规性。以下是一些关键的云计算安全扩展要求&#xff1a; 1. 基础设施的位置&#xff1a;等保2.0要求云计算基础设施位于中国境内&am…

LeetCode刷题之HOT100之LRU缓存

2024/6/21 酷暑难耐&#xff0c;离开空调我将不知道能否《活着》&#xff0c;昨天跑步感觉全身的热无法排出去&#xff0c;出门那种热浪一阵一阵打过来&#xff0c;一点风都舍不得给我。早早的来到实验室&#xff0c;也没多早&#xff0c;九点哈哈&#xff0c;做题啦&#xff0…

GPT-4o与GPT-4的价格对比

截图来源于微软Azure的OpenAI服务。 GPT-4o比GPT-4的价格降低是肉眼可见&#xff0c;可惜计价是美元单位&#xff0c;较国内的价格而言还是比较贵&#xff0c;拿来做Demo演示可以&#xff0c;商用的话&#xff0c;还要仔细考量考量。 国内的地板价已经来到了0.5元/百万Token的…

canvas绘制红绿灯路口(二)

系列文章 canvas绘制红绿灯路口&#xff08;一&#xff09; 无图不欢&#xff0c;先上图 优化项&#xff1a; 一&#xff1a;加入人行道红绿信号 二&#xff1a;加入专用车道标识&#xff08;无方向标识时采用专用车道标识&#xff09; 三&#xff1a;东南西北四项路口优化绘…

电脑开机后出现Aptio Setup Utility 处理方法

电脑开机后出现Aptio Setup Utility怎么处理 Aptio Setup Utility界面的原因&#xff1a; 这是由于 bios设置与真实的硬件情况不匹配硬盘故障找不到可启动的硬盘情况 我的问题是找不到可启动的硬盘情况 解决方式如下&#xff1a; 进入如下界面了&#xff0c;选择Boot选项…

通信系统的最佳线性均衡器(2)---自适应滤波算法

本篇文章是博主在通信等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对通信等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在通信领域笔记&#xff1a;…

干货 | 如何进行群体DNA甲基化分析

目前&#xff0c;针对群体的研究基本上还是以重测序为主&#xff0c;基于对遗传多样性丰富的自然群体中的个体进行全基因组重测序&#xff0c;研究物种遗传进化多样性&#xff0c;结合准确的目标性状的表型数据及统计方法进行全基因组关联分析&#xff0c;可对动植物复杂农艺性…

【数据分析】用Python做事件抽取任务-快速上手方案

目录 方法一&#xff1a;使用OmniEvent库安装OmniEvent使用OmniEvent进行事件抽取OmniEvent优点缺点 方法二&#xff1a;使用大模型使用GPT网页版进行事件抽取事件类型列表 大模型优点缺点 总结 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;事件抽取是一项关键任…

迅狐短视频商城系统:打造直播带货、社区种草和商品分销一站式解决方案

迅狐短视频商城系统作为一体化电商解决方案&#xff0c;致力于为用户提供全方位、便捷的购物体验。从直播带货到社区种草、再到商品分销&#xff0c;系统提供了全面的功能模块&#xff0c;满足用户多元化的需求。 一、直播带货功能模块 迅狐短视频商城系统的直播带货功能模块&…

SAMBA(简单混合状态空间模型用于高效的无限上下文语言建模)及其对长文本模型的改进

论文地址&#xff1a; https://arxiv.org/pdf/2406.07522 SAMBA&#xff08;Simple Hybrid State Space Models for Efficient Unlimited Context Language Modeling&#xff09;是一种新型的基于Transformer的语言模型&#xff0c;旨在解决传统大语言模型在处理长文本时遇到的…

【初阶数据结构】二叉树(附题)

目录 1.树概念及结构 1.1树的概念 1.2 树的相关概念&#xff08;树结构的相关概念命名参考自然树和人的血缘关系&#xff09; 1.3 树的表示 1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff0c;初次之外网盘中使用到&#xff09; 2.二叉树概念及结构 …

关于OS中逻辑地址与物理地址转换

首先将逻辑地址134D从十六进制转为2进制 0001 0011 0100 1101 1&#xff09;1K的时候对应2的10次方 页面大小占10位 从后往前数 0001 00 || 11 0100 1101 前面的转为十进制为4 对应页号4内容1A转为2进制01 1010将这个替换原来的前六位数字 即0110 1011 0100 1101 再转换为…

『互联网三驾马车』

某天开会的时候&#xff0c;老板问了大家一个问题&#xff0c;对目前各个角色分工合作有哪些不满意的地方。有人回答到&#xff0c;能不能别让产品同学每次都在假期前几天发布需求&#xff0c;让开发同学周末或者假期加班搞需求&#xff0c;然后在还在假期看着产品同学到处去玩…

【React 】折叠面板,点击展开时再请求数据

需求背景&#xff1a;使用折叠面板的形式展示数据&#xff0c;面板内部数据需要在打开时请求接口获取。 遇到问题&#xff1a;最开始使用Antd 的折叠面板组件&#xff0c;它对于数据直接渲染是没问题的&#xff0c;但是不好满足打开面板时再动态加载数据的需求&#xff0c;于是…