HBase Cassandra的部署和操作

目录

一.数据库的部署与配置

二.使用命令访问数据库

三.数据库的设计

四.编程实现数据库的访问


一.数据库的部署与配置

1.在单个节点上对进行数据库的单机部署

(1)下载apache-cassandra-4.1.7-bin.tar.gz,上传到hadoop1 的/export/software目录

(2)使用解压缩命令:tar -xzf /export/software/apache-cassandra-4.1.7-bin.tar.gz -C /export/servers/ 进行解压缩到/export/servers目录

(3)使用cd /export/servers命令进入/export/servers目录

(4)将Cassandra目录进行重命名:mv apache-cassandra-4.1.7 apache-cassandra-4.1.7-standalone

(5)启动Cassandra:bin/cassandra -R

(6)查看Cassandra启动信息:tail -f logs/system.log

(7)检查状态:bin/nodetool status

(8)连接数据库:bin/cqlsh

(9)关闭Cassandra:bin/nodetool stopdaemon

2.在多个节点上实现数据库的分布式部署

(1)在Hadoop1、Hadoop2和Hadoop3上分别执行systemctl stop firewalldsystemctldisable firewalld命令关闭防火墙;

(2)在Hadoop1、Hadoop2、Hadoop3上分别执行ssh-keygenssh-copy-id hadoop1ssh-copy-id hadoop2ssh-copy-id hadoop3,使各个节点可以免密登录

注:在Hadoop2和Hadoop3上的执行结果与Hadoop1几乎相同,故不再展示。

(3)进行免密登录测试,在Hadoop1、Hadoop2和Hadoop3上分别执行ssh hadoop1,ssh hadoop2,ssh hadoop3,可以免密登录即可

注:在Hadoop2和Hadoop3上的执行结果与Hadoop1几乎相同,故不再展示。

(4)在Hadoop1、Hadoop2和Hadoop3上分别上传压缩安装包

(5)在Hadoop1、Hadoop2和Hadoop3上分别解压缩apache-cassandra-4.1.7-bin.tar.gz:tar -xzf /export/software/apache-cassandra-4.1.7-bin.tar.gz -C /export/servers/

(6)分别修改Hadoop1、Hadoop2和Hadoop3的cassandra.yaml文件中的seeds、listen_address和rpc_address,具体修改如下:

Hadoop1:seeds=192.168.121.160,listen_address=192.168.121.160,rpc_address=192.168.121.160;

Hadoop1:seeds=192.168.121.160,listen_address=192.168.121.161,rpc_address=192.168.121.161;

Hadoop1:seeds=192.168.121.160,listen_address=192.168.121.162,rpc_address=192.168.121.162

注:因修改过程类似,此处只展示Hadoop1节点上的修改结果。

(7)在Hadoop1、Hadoop2和Hadoop3上使用命令分别启动Cassandra:

bin/cassandra -R

(8)查看运行状态:bin/nodetool status

(9)连接任一服务器均可:bin/cqlsh hadoop1,bin/cqlsh hadoop2,bin/cqlsh hadoop3

二.使用命令访问数据库

练习Cassandra的相关命令。

1.键空间:创建、删除和查看键空间

(1)创建并查看键空间

CREATE KEYSPACE IF NOT EXISTS library_system

WITH REPLICATION = {

    'class' : 'SimpleStrategy',

    'replication_factor' : 1

};

DESCRIBE KEYSPACES;

(2)删除并再次查看键空间

DROP KEYSPACE IF EXISTS library_system;

DESCRIBE KEYSPACES;

2.表:创建表、设置复合型主键、修改表结构(要求:复合主键要包括分区键和分簇键,数据类型要包含两种以上的集合类型和一种以上的自定义类型)

以图书管理系统为例进行如下操作:

(1)创建表(包含复合型主键)

在图书管理系统中,我们设计一个图书借阅记录表,复合主键由 book_id 和 borrower_id 组成,分区键使用 book_id,集群键使用 borrower_id。还使用了集合类型(SET)存储借阅的日期,以及自定义类型(user_info)来存储借阅人的信息。

语句如下:

CREATE TYPE IF NOT EXISTS library_system.user_info (

    name TEXT,

    email TEXT,

    phone_number TEXT

);

CREATE TABLE IF NOT EXISTS library_system.book_borrowing (

    book_id UUID,              -- 分区键

    borrower_id UUID,          -- 集群键

    borrow_date DATE,          -- 借阅日期

    return_date DATE,          -- 归还日期

    status TEXT,               -- 状态(如 已借出、已归还)

    tags SET<TEXT>,            -- 标签(如 热门、推荐等)

    borrower_info FROZEN<user_info>,  -- 自定义类型,借阅人信息

    PRIMARY KEY (book_id, borrower_id)  -- 复合主键

);

其中,book_id是分区键,borrower_id 是集群键,tags 是集合类型,用来存储书籍标签,borrower_info 是自定义类型 user_info,用于存储借阅人的信息。

(2)修改表结构

添加一个新列来记录图书的借阅次数。

语句如下:

ALTER TABLE library_system.book_borrowing ADD borrow_count INT;

3.数据查询 

(1)查询所有数据

SELECT * FROM library_system.book_borrowing;

(2)根据分区键查询

SELECT * FROM library_system.book_borrowing WHERE book_id = 3796171a-9a3d-45e6-8886-42601fed5c04;

(3)根据分区键和集群键查询

 SELECT * FROM library_system.book_borrowing WHERE book_id =  b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

(4)查询特定列

SELECT book_id, borrow_date, return_date FROM library_system.book_borrowing WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

(5)查询集合类型数据

SELECT tags FROM library_system.book_borrowing WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

(6)查询自定义类型数据

SELECT borrower_info FROM library_system.book_borrowing WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

4.数据更新:数据插入、数据更新、数据删除

(1)数据插入

INSERT INTO library_system.book_borrowing (book_id, borrower_id, borrow_date, return_date, status, tags, borrower_info)

VALUES (uuid(), uuid(), '2024-01-01', '2024-01-15', 'Borrowed', {'Popular', 'New Release'},

    {name: 'John Doe', email: 'johndoe@example.com', phone_number: '1234567890'});

(2)数据更新

UPDATE library_system.book_borrowing

SET return_date = '2024-01-20', status = 'Returned'

WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

(3)数据删除

①删除单条数据

DELETE FROM library_system.book_borrowing

WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

②删除整张表

TRUNCATE library_system.book_borrowing;

三.数据库的设计

图书管理系统包含三个主要实体:图书读者借阅记录。它们之间通过一个关系来进行联系,借阅记录表示图书与读者之间的借阅关系,本系统共设计三张表,分别是图书表(存储图书的相关信息)、借阅记录表(存储借阅的记录)和读者表(存储读者的基本信息)。

1.数据库设计

1图书表

表名:Books

列族(Column Families):

info:存储图书的基本信息

author:存储作者的详细信息

publisher:存储出版商的信息

行键设计:

行键:book_id(唯一标识每本图书)

列名与存储内容:

在info列族下:

title:书名

category:类别(如科幻、文学等)

published_date:出版日期

在author列族下:

name:作者名称

birth_date:作者出生日期

在publisher列族下:

publisher_name:出版商名称

publisher_address:出版商地址

2读者表

表名:Readers

列族(Column Families):

info:存储读者的基本信息

contact:存储读者的联系信息(例如地址、电话)

行键设计:

行键:reader_id(唯一标识每个读者)

列名与存储内容:

在info列族下:

reader_name:读者姓名

dob:出生日期

在contact列族下:

email:电子邮件地址

phone_number:电话号

address:家庭住址

3借阅记录表

表名:BorrowRecords

列族(Column Families):

info:存储借阅信息

reader:存储读者信息

行键设计:

行键:borrow_id(唯一标识每次借阅记录)

列名与存储内容:

在info列族下:

book_id:借阅的图书ID

borrow_date:借阅日期

return_date:归还日期

在reader列族下:

reader_name:读者姓名

reader_id:读者ID

4实体和关系的增删改查

①新增操作

新增图书:向Books表中插入新的行,包含图书ID(行键)及其对应的列族和列名。

新增借阅记录:向BorrowRecords表中插入新的行,包含借阅记录ID(行键)、借阅图书ID、借阅日期、归还日期、读者信息等。

新增读者:向Readers表中插入新的行,包含读者ID(行键)、姓名、出生日期、联系信息等。

②删除操作

删除图书:通过图书ID删除Books表中的记录。

删除借阅记录:通过借阅记录ID删除BorrowRecords表中的记录。

删除读者:通过读者ID删除Readers表中的记录。

③更新操作

更新图书信息:可以根据图书ID(行键)来更新Books表中的某些列,比如更新书名、作者或出版日期等。

更新借阅记录:可以根据借阅记录ID(行键)来更新借阅日期或归还日期等。

更新读者信息:可以根据读者ID(行键)来更新Readers表中的读者姓名、地址、电话等。

④查询操作

查询某本图书的详细信息:通过book_id查询Books表中的详细信息。

查询某本图书的借阅记录:通过book_id在BorrowRecords表中查找所有借阅记录。

查询某位读者的借阅记录:通过reader_id在BorrowRecords表中查找该读者的所有借阅记录。

查询某位读者的详细信息:通过reader_id查询Readers表中的详细信息。

2.表设计与填充数据

(1)图书表

行键(book_id)

列族

列名

列值

B001

info

title

《活着》

category

文学

published_date

1993-06-01

author

name

余华

birth_date

1960-04-03

publisher

publisher_name

作家出版社

publisher_address

北京市朝阳区

B002

info

title

《百年孤独》

category

小说

published_date

1967-06-05

author

name

加西亚·马尔克斯

birth_date

1927-03-06

publisher

publisher_name

南海出版公司

publisher_address

上海市徐汇区

(2)读者表

行键(reader_id)

列族

列名

列值

R001

info

reader_name

张三

dob

1990-05-15

contract

email

zhsan@email.com

phone_number

123-4567-8901

address

北京市海淀区

R002

info

reader_name

李四

dob

2005-02-28

contract

email

lisi@email.com

phone_number

987-6543-2100

address

上海市浦东新区

(3)借阅记录表

行键(borrow_id)

列族

列名

列值

BR001

info

Book_id

B001

Borrow_date

2024-11-01

Return_date

2024-11-15

reader

Reader_name

张三

Reader_id

R001

BR001

info

Book_id

B002

Borrow_date

2024-11-02

Return_date

2024-11-20

reader

Reader_name

李四

Reader_id

R002

四.编程实现数据库的访问

使用Python访问实现设计的图书管理系统的列式数据库,步骤如下:

(1)数据库连接:连接到Cassandra集群,并创建数据库library和数据表Books、Readers和BorrowRecords,具体代码如下:

from cassandra.cluster import Cluster

# 连接到 Cassandra 集群

cluster = Cluster(['192.168.121.160'])  虚拟机的 IP 地址

session = cluster.connect()

# 创建 Keyspace:library

session.execute("""

    CREATE KEYSPACE IF NOT EXISTS library WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1}

""")

# 使用创建的 Keyspace

session.execute("USE library")

# 创建表结构

# 创建 Books 表

session.execute("""

    CREATE TABLE IF NOT EXISTS Books (

        book_id TEXT PRIMARY KEY,

        title TEXT,

        category TEXT,

        published_date TEXT,

        author_name TEXT,

        author_birth_date TEXT,

        publisher_name TEXT,

        publisher_address TEXT

    )

""")

# 创建 Readers 表

session.execute("""

    CREATE TABLE IF NOT EXISTS Readers (

        reader_id TEXT PRIMARY KEY,

        reader_name TEXT,

        dob TEXT,

        email TEXT,

        phone_number TEXT,

        address TEXT

    )

""")

# 创建 BorrowRecords 表

session.execute("""

    CREATE TABLE IF NOT EXISTS BorrowRecords (

        borrow_id TEXT PRIMARY KEY,

        book_id TEXT,

        borrow_date TEXT,

        return_date TEXT,

        reader_name TEXT,

        reader_id TEXT

    )

""")

print("Keyspace and tables created.")

结果如下图所示:

(2)数据增加

分别给三张表插入数据,具体代码如下:

①插入图书记录

session.execute("""

    INSERT INTO Books (book_id, title, category, published_date, author_name, author_birth_date, publisher_name, publisher_address)

    VALUES (%s, %s, %s, %s, %s, %s, %s, %s)

""", ('B001', '《活着》', '文学', '1993-06-01', '余华', '1960-04-03', '作家出版社', '北京市朝阳区'))

结果如下图所示:

②插入读者信息

session.execute("""

    INSERT INTO Readers (reader_id, reader_name, dob, email, phone_number, address)

    VALUES (%s, %s, %s, %s, %s, %s)

""", ('R001', '张三', '1990-05-15', 'zhangsan@email.com', '123-4567-8901', '北京市海淀区'))

结果如下图所示:

③插入借阅记录

session.execute("""

    INSERT INTO BorrowRecords (borrow_id, book_id, borrow_date, return_date, reader_name, reader_id)

    VALUES (%s, %s, %s, %s, %s, %s)

""", ('BR001', 'B001', '2024-11-01', '2024-11-15', '张三', 'R001'))

结果如下图所示:

(3)数据更新

更新读者的联系方式,具体代码如下:

session.execute("""

    UPDATE Readers SET email = %s WHERE reader_id = %s

""", ('newemail@email.com', 'R001'))

结果如下图所示:

(4)数据查询

查询book_id为B001图书的详细信息,具体代码如下:

# 查询某本图书的详细信息

rows = session.execute("""

    SELECT * FROM Books WHERE book_id = %s

""", ('B001',))

for row in rows:

    print(row)

结果如下图所示:

(5)数据删除

删除book_id为B001图书的记录

session.execute("""

    DELETE FROM Books WHERE book_id = %s

""", ('B001',))

执行结果如下图所示:

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

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

相关文章

DeepSeek v3为何爆火?如何用其集成Milvus搭建RAG?

最近&#xff0c;DeepSeek v3&#xff08;一个MoE模型&#xff0c;拥有671B参数&#xff0c;其中37B参数被激活&#xff09;模型全球爆火。 作为一款能与Claude 3.5 Sonnet&#xff0c;GPT-4o等模型匹敌的开源模型DeepSeek v3不仅将其算法开源&#xff0c;还放出一份扎实的技术…

GPU算力平台的应用之任意门:任意穿搭匹配模型的应用教程

大家好&#xff0c;今天给大家介绍一下&#xff1a;GPU算力平台的应用之任意门:任意穿搭匹配模型的应用教程。 文章目录 一、GPU算力平台概述人工智能智能发展为什么需要GPU算力平台 二、注册与登录账号注册流程 三、平台的应用之Anydoor应用启动器选择Anydoor的应用场景Anydoo…

微信小程序中 “页面” 和 “非页面” 的区别

微信小程序中 “页面” 和 “非页面” 的区别&#xff0c;并用表格进行对比。 核心概念&#xff1a; 页面 (Page)&#xff1a; 页面是微信小程序中用户可以直接交互的视图层&#xff0c;也是小程序的基本组成部分。每个页面都有自己的 WXML 结构、WXSS 样式和 JavaScript 逻辑…

exam0-试卷整理

exam0-试卷整理 2010&#xff0c;2013是梦开始的地方&#xff0c;大概率会出原题的 2010 2013 2015 大题 manchester RIP更新 说出ISO与TCP/IP模型的相同点和不同点&#xff08;8分&#xff09; 相似&#xff1a; 两者都有层次&#xff0c;网络专业人员都需要知道二者&a…

QT-------------对话框和多窗口程序设计

一、标准对话框 1. QFileDialog 对话框 功能&#xff1a;提供文件选择对话框&#xff0c;方便用户选择文件或目录。 #include <QApplication> #include <QFileDialog> #include <QMessageBox>int main(int argc, char *argv[]) {QApplication app(argc, a…

论文解读 | NeurIPS'24 IRCAN:通过识别和重新加权上下文感知神经元来减轻大语言模型生成中的知识冲突...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 史丹&#xff0c;天津大学博士生 内容简介 大语言模型&#xff08;LLM&#xff09;经过海量数据训练后编码了丰富的世界知识。最近的研究表明&#xff0c…

在DJI无人机上运行VINS-FUISON(PSDK 转 ROS)

安装ceres出现以下报错&#xff0c;将2版本的ceres换成1版本的ceres CMake did not find one.Could not find a package configuration file provided by "absl" with any ofthe following names:abslConfig.cmakeabsl-config.cmakeAdd the installation prefix of …

A*算法与人工势场法结合的路径规划(附MATLAB源码)

A*算法与人工势场法&#xff08;APF&#xff09;结合实现路径规划 路径规划是机器人、无人机及自动驾驶等领域中的一个重要问题。本文结合了经典的 A* 算法与 人工势场法&#xff08;Artificial Potential Field, APF&#xff09;&#xff0c;实现了一种改进的路径规划方法。下…

SASS 简化代码开发的基本方法

概要 本文以一个按钮开发的实例&#xff0c;介绍如何使用SASS来简化CSS代码开发的。 代码和实现 我们希望通过CSS开发下面的代码样式&#xff0c;从样式来看&#xff0c;每个按钮的基本样式相同&#xff0c;就是颜色不同。 如果按照传统的方式开发&#xff0c;需要开发btn &…

Spring为什么要用三级缓存解决循环依赖?

1.什么是循环依赖 本文为了方便说明&#xff0c;先设置两个业务层对象&#xff0c;命名为AService和BService。其中Spring是如何把一个Bean对象创建出来的&#xff0c;其生命周期如下&#xff1a; 构造方法–> 不同对象 --> 注入依赖 -->初始化前 --> 初始化后–&…

R shiny app | 网页应用 空格分隔的文本文件在线转csv

shiny 能快速把R程序以web app的形式提供出来&#xff0c;方便使用&#xff0c;降低技术使用门槛。 本文提供的示例&#xff1a;把空格分隔的txt文件转为逗号分隔的csv文件。 前置依赖&#xff1a;需要有R环境(v4.2.0)&#xff0c;安装shiny包(v1.9.1)。括号内是我使用的版本…

LLM - 使用 LLaMA-Factory 部署大模型 HTTP 多模态服务 教程 (4)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144881432 大模型的 HTTP 服务,通过网络接口,提供 AI 模型功能的服务,允许通过发送 HTTP 请求,交互大模型,通常基于云计算架构,无需在本地部署复杂的模型和硬件,…

【《python爬虫入门教程11--重剑无峰168》】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 【《python爬虫入门教程11--selenium的安装与使用》】 前言selenium就是一个可以实现python自动化的模块 一、Chrome的版本查找&#xff1f;-- 如果用edge也是类似的1.chrome…

自定义Bitmap

使用场景 Bitmap 是一种使用 位数组&#xff08;bit array&#xff09; 来表示数据的结构&#xff0c;每一位&#xff08;bit&#xff09;表示一个值的状态。由于每个位只占用 1 bit&#xff0c;因此Bitmap 的存储效率非常高&#xff0c;特别适用于大数据去重、标记布尔值状态…

公司资产网站

本文结尾处获取源码。 本文结尾处获取源码。 本文结尾处获取源码。 一、相关技术 后端&#xff1a;Java、JavaWeb / Springboot。前端&#xff1a;Vue、HTML / CSS / Javascript 等。数据库&#xff1a;MySQL 二、相关软件&#xff08;列出的软件其一均可运行&#xff09; I…

第431场周赛:最长乘积等价子数组、计算字符串的镜像分数、收集连续 K 个袋子可以获得的最多硬币数量、不重叠区间的最大得分

Q1、最长乘积等价子数组 1、题目描述 给你一个由 正整数 组成的数组 nums。 如果一个数组 arr 满足 prod(arr) lcm(arr) * gcd(arr)&#xff0c;则称其为 乘积等价数组 &#xff0c;其中&#xff1a; prod(arr) 表示 arr 中所有元素的乘积。gcd(arr) 表示 arr 中所有元素的…

掌握RabbitMQ:全面知识点汇总与实践指南

前言 RabbitMQ 是基于 AMQP 高级消息队列协议的消息队列技术。 特点&#xff1a;它通过发布/订阅模型&#xff0c;实现了服务间的高度解耦。因为消费者不需要确保提供者的存在。 作用&#xff1a;服务间异步通信&#xff1b;顺序消费&#xff1b;定时任务&#xff1b;请求削…

国内Ubuntu环境Docker部署Stable Diffusion入坑记录

国内Ubuntu环境Docker部署Stable Diffusion入坑记录 本文旨在记录使用dockerpython进行部署 stable-diffusion-webui 项目时遇到的一些问题&#xff0c;以及解决方案&#xff0c;原项目地址: https://github.com/AUTOMATIC1111/stable-diffusion-webui 问题一览&#xff1a; …

SpringBoot3-深入理解自动配置类的原理(尚硅谷SpringBoot3-雷神)

文章目录 目录了解自动配置 一、导入对应场景的Mean依赖&#xff1a;1、引入依赖**找到自动配置类的所有配置都存放在哪里** 二、编写主程序&#xff1a;SpringBootApplication观察源码时所需要知道的几个核心注解&#xff1a;1、观察SpringBootApplication源码都做了什么 三、…

【沉默的羔羊心理学】汉尼拔的“移情”游戏:操纵与理解的艺术,精神分析学视角下的角色互动

终极解读《沉默的羔羊》&#xff1a;弗洛伊德精神分析学视角下的深层剖析 关键词 沉默的羔羊弗洛伊德精神分析学角色心理意识与潜意识性别与身份 弗洛伊德精神分析学简介 弗洛伊德的精神分析学是心理学的一个重要分支&#xff0c;主要关注人类行为背后的无意识动机和冲突。…