Cassandra入门试用

文章目录

      • 1. 安装
        • 1.1 官方文档
        • 1.2 安装前提
        • 1.3 安装cassandra
      • 2. 集群配置
      • 3. Java客户端
        • 3.1 Maven依赖
        • 3.2 客户端代码
      • 4. 性能测试
        • 4.1 压测结论
        • 4.2 压测代码

1. 安装

1.1 官方文档

http://cassandra.apache.org/doc/latest/getting_started/index.html

1.2 安装前提
  • 安装Java 8
$java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
  • 安装Python 2.7
$python -V
Python 2.7.17
1.3 安装cassandra
  • 下载
wget http://mirrors.tuna.tsinghua.edu.cn/apache/cassandra/3.11.5/apache-cassandra-3.11.5-bin.tar.gz
  • 解压即安装
tar -xzvf apache-cassandra-3.11.5-bin.tar.gz
  • 启动脚本在cassandra的根目录的bin下
./bin/cassandra -f

2. 集群配置

  • 案例: 配置了3节点集群

    • 位于tdatanode1、tdatanode2、tdatanode3
    • tdatanode1、tdatanode2做为种子节点
    • 3个安装过程同上
  • 配置文件修改, $CASSANDRA_HOME/conf/cassandra.yaml

    • 所有机器使用相同的集群名称
        cluster_name: 'utrackRealTime'
    
    • 所有机器设置seed,均为tdatanode1、tdatanode2
        seed_provider:- class_name: org.apache.cassandra.locator.SimpleSeedProviderparameters:- seeds: "tdatanode1,tdatanode2"
    
    • 监听地址设置为本机IP或者host名称
        listen_address: tdatanode1rpc_address: tdatanode1
    
  • 启动集群

# -f的意思的前台运行,测试时为了更方便的查看问题
./bin/cassandra -f
  • 交互式终端cqlsh连接
# 如果不是连本机,通过环境变量$CQLSH_HOST、$CQLSH_PORT指定主机和端口
cqlsh --request-timeout=600
# 指定机器
cqlsh tdatanode1 --request-timeout=60000

3. Java客户端

3.1 Maven依赖
<dependency><groupId>com.datastax.cassandra</groupId><artifactId>cassandra-driver-core</artifactId><version>3.1.0</version>
</dependency>
3.2 客户端代码
  • 创建Session,应该是线程安全的,可以重用
PoolingOptions options = new PoolingOptions();
options.setNewConnectionThreshold(HostDistance.LOCAL,1800);
options.setCoreConnectionsPerHost(HostDistance.LOCAL,5);
options.setMaxConnectionsPerHost(HostDistance.LOCAL,5);Cluster.Builder bulder = Cluster.builder().withPoolingOptions(options).addContactPoint("192.168.36.174").withPort(9042);
Cluster cluster = builder.build();
Session session = cluster.connect();
  • 执行操作
ResultSet rs = session.execute("select * FROM utrack.odl_user_hj");
for (Row r : rs.all()) {int size = r.getColumnDefinitions().size();for (int i = 0; i < size; i++) {r.getObject(i).toString();}
}
  • 进程退出时的清理
session.close();
cluster.close();

4. 性能测试

4.1 压测结论
连接并发QPS
111452
158182
11014806
12023584
13032341
14035945
15033647

单连接、3节点、普通HDD、单JVM分配8G内存的情况下,并发30~40基本到最高性能, 35K QPS

连接数并发数QPS备注
14035945
L -54036179- 设置LOCAL最大连接数没有用,估计是
L -540
NewConnectionThreshold=025994
NewConnectionThreshold=129620
NewConnectionThreshold=1032840
NewConnectionThreshold=80037481
NotSet37407
NewConnectionThreshold=180037000- 阈值到800后再增长,对qps没有明显影响
R 5-104035842
L 5-104024113- LOCAL coreConnect设置为5的情况下,性能反而差了。

不确定系统瓶颈的情况下,不要随意调优,Connection和新建Connection的Threshold调整可能不但不提升性能,反而降低

4.2 压测代码
  • 主类
public class ReadPerformance {private static ExecutorService es = Executors.newFixedThreadPool(40);public static void main(String[] args) throws InterruptedException {Session s = CassandraConnectionManager.getSession();PreparedStatement preparedStatement = s.prepare("select * from utrack.simple_test where domain = ?");long start = System.currentTimeMillis();for (int i = 0; i < 10_0000; i++) {final int index = i;es.submit(() -> {ResultSet rs = s.execute(preparedStatement.bind((int) (Math.random() * 200_0000)));rs.one().getObject(0);if (index % 1000 == 999) System.out.println("index: " + index + ", completed");});}System.out.println("await termination....");es.shutdown();if (!es.awaitTermination(1, TimeUnit.HOURS)) {System.out.println("await timeout....");es.shutdownNow();}long last = System.currentTimeMillis() - start;System.out.println("time used: " + last + ", qps:" + (10_0000_000 / last));CassandraConnectionManager.destory();}
}
  • 工具类
public class CassandraConnectionManager {public static Session getSession() {return Holder.session;}public static Cluster getCluster() {return Holder.cluster;}public static void destory() {Holder.destroy();}private static class Holder {private static Cluster cluster;private static Session session;static {PoolingOptions options = new PoolingOptions();options.setNewConnectionThreshold(HostDistance.LOCAL,1800);
//            options.setCoreConnectionsPerHost(HostDistance.LOCAL,5);options.setMaxConnectionsPerHost(HostDistance.LOCAL,5);Cluster.Builder bulder = Cluster.builder().withPoolingOptions(options).addContactPoint("192.168.36.174").withPort(9042);cluster = bulder.build();session = cluster.connect();}private static void destroy() {if (session != null) session.close();if (cluster != null) cluster.close();}}}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【云原生、k8s】管理Kubernetes应用搭建与部署

一、Kubernetes部署方式 官方提供Kubernetes部署3种方式 (一)minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。 官方文档:https://kubernetes.io/docs/setup/minikube/ (二)二进制包 …

【工具使用-A2B】使用A2B配置16通道车载音频系统

一&#xff0c;简介 工作中需要使用A2B搭建车载16通道演示系统&#xff0c;故本文记录一下&#xff0c;16通道车载音频系统中A2B工程相关配置&#xff0c;供参考。 使用FPGA输出双TDM8的信号给到A2B Master节点&#xff0c;音频数据经过A2B双绞线&#xff0c;传输到A2B Slave…

uni-app上传音频,图片步骤

在uni-app中&#xff0c;上传音频和图片通常需要借助小程序的API来完成。下面是一个简单的步骤&#xff1a; 上传图片 首先&#xff0c;你需要使用uni.chooseImage方法从相册或相机中选择图片文件。然后&#xff0c;利用选择的图片路径来调用小程序的uni.uploadFile方法进行上…

【开源】基于JAVA语言的企业项目合同信息系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合同签订模块2.4 合同预警模块2.5 数据可视化模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 合同审批表3.2.2 合同签订表3.2.3 合同预警表 四、系统展示五、核心代码5.1 查询合同…

大师计划1.0 - log2 CRTO笔记

CRTOⅠ笔记 log2 这个笔记是我在2023年11月23日-12月22日中&#xff0c;学习CRTO所做的一些笔记。 事实上TryHackMe的路径和htb学院包含了许多CRTO的知识并且甚至还超出了CRTO&#xff08;CS除外&#xff09;&#xff0c;所以很多东西在THM和htb学院学过&#xff0c;这次CRTO等…

ubuntu18.04安装sqlserver2019

下载 wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -注册ubuntu存储库 安装add-apt-repository sudo apt-get install software-properties-common sudo apt-get update注册ubuntu存储库 sudo add-apt-repository "$(wget -qO- h…

3分钟快速安装 ClickHouse、配置服务、设置密码和远程登录以及修改数据目录

下面是一个完整的 ClickHouse 安装和配置流程&#xff0c;包括安装 ClickHouse、配置服务、设置密码和远程登录以及修改数据目录。 安装 ClickHouse 安装 YUM 工具包&#xff1a; sudo yum install -y yum-utils添加 ClickHouse YUM 仓库&#xff1a; sudo yum-config-manager…

【NI-RIO入门】如何格式化实时控制器

1.当使用CompactRIO时有时会出现硬盘已满或出现IO错误&#xff0c;如下如图 2.出现上下位机软件版本不匹配 3.rt组件损坏 4.实时控制器意外进入安全模式 5.设备非正常断电 6.访问被拒绝&#xff1a;目标被另一个进程&#xff08;例如 VI 或 NI 分布式系统管理器&#xff09;锁定…

中间继电器的文字符号和图形符号

中间继电器的文字符号和图形符号 中间继电器主要用途是当其他继电器触头数量或容量不够时&#xff0c;可借助中间继电器扩充触头数目或增大触头容量&#xff0c;起中间转换作用。将多个中间继电器相组合&#xff0c;还能构成各种逻辑运算电器或计数电器。 中间继电器文字符号…

Kafka、RocketMQ、RabbitMQ消息丢失可能存在的地方,以及解决方案

这里主要对比&#xff1a;Kafka、RocketMQ、RabbitMQ 介绍一下消息生产、存储、消费三者的架构形式。 消息丢失可能存在的场景&#xff1a; 情况一&#xff1a; 生产者发送给MQ的过程消息丢失 在写消息的过程中因为网络的原因&#xff0c;还没到mq消息就丢失了&#xff1b;或…

Android开发中常见的Hook技术有哪些?

Hook技术介绍 Hook技术是一种在软件开发中常见的技术&#xff0c;它允许开发者在特定的事件发生时插入自定义的代码逻辑。常见的应用场景包括在函数调用前后执行特定的操作&#xff0c;或者在特定的事件发生时触发自定义的处理逻辑。 在Android开发中&#xff0c;Hook通常是通…

TypeScript入门笔记1

You 按照下面目录&#xff0c;制作通俗易懂的 TypeScript 教程&#xff0c;给一个懂一点python的新手。 首先通俗解释概念。 然后给出3个实际例子进行讲解。 并详细解释其中的语法规则&#xff0c;和新手注意事项&#xff0c;易犯错误 python对应的可能写法。 ### 目录&#x…

【AI故事】灵感的源泉还是知识的盗窃?

灵感的源泉还是知识的盗窃&#xff1f; ——ChatGPT Robot在一个漆黑的夜晚&#xff0c;年轻的作家艾米丽坐在书桌前&#xff0c;手里紧握着一支笔&#xff0c;思绪万千。她一直在寻找创作的灵感&#xff0c;但却毫无头绪。 突然&#xff0c;她听到了一声巨响&#xff0c;仿佛…

C# 初识System.IO.Pipelines

写在前面 在进一步了解Socket粘包分包的过程中&#xff0c;了解到了.NET 中的 System.IO.Pipelines&#xff0c;可以更优雅高效的解决这个问题&#xff1b;先跟随官方的示例做个初步的认识。 System.IO.Pipelines 是一个库&#xff0c;旨在使在 .NET 中执行高性能 I/O 更加容…

云原生周刊:Karmada 成为 CNCF 孵化项目 | 2023.12.25

开源项目推荐 kubernetes-reflector Reflector 是一个 Kubernetes 的插件&#xff0c;旨在监视资源&#xff08;secrets 和 configmaps&#xff09;的变化&#xff0c;并将这些变化反映到同一命名空间或其他命名空间中的镜像资源中。 Lingo Lingo 是适用于 K8s 的 OpenAI 兼…

NGINX高级技巧

大家好&#xff0c;我是升仔 引言 在现代的Web架构中&#xff0c;NGINX扮演着至关重要的角色。不仅因为其出色的性能&#xff0c;也因为其灵活的配置和强大的功能。掌握NGINX的高级技巧&#xff0c;可以帮助你更好地管理Web服务&#xff0c;提升性能&#xff0c;确保稳定性。 实…

Reactor 和 Proactor模式,IO复用与epoll、同步IO,异步IO与协程

汽车软件中的CPU密集与IO密集任务 在汽车软件中&#xff0c;涉及到ADAS的长期占用CPU的计算任务可以算的上是CPU密集型。 另外的&#xff0c;众多SOA原子服务或者各种数据收集、处理、分发、log系统&#xff0c;应该算是IO密集型任务。 寻求一些手段优化IO性能的原因 在过去…

如何在uni-app项目中使用路由

在uni-app项目中使用路由代码&#xff0c;需要以下几个步骤&#xff1a; 在uni-app项目的pages.json文件中配置路由信息。在pages数组中添加需要路由管理的页面&#xff0c;例如&#xff1a; "pages": [{"path": "pages/index/index","na…

DeskPins | 将窗口钉在面前

前言 DeskPins | 将窗口钉在面前 有的人&#xff0c;一边看番&#xff0c;一边却在刷题&#xff1b; 有的人&#xff0c;一边网课&#xff0c;一边却在摸鱼。 有的人&#xff0c;一边某xuexi通上考试&#xff0c;一边。。 众所周知&#xff0c;窗口置顶是很常见的一个需求&…

智慧零售技术探秘:关键技术与开源资源,助力智能化零售革新

智慧零售是一种基于先进技术的零售业态&#xff0c;通过整合物联网、大数据分析、人工智能等技术&#xff0c;实现零售过程的智能化管理并提升消费者体验。 实现智慧零售的关键技术包括商品的自动识别与分类、商品的自动结算等等。 为了实现商品的自动识别与分类&#xff0c;…