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',))

执行结果如下图所示:

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

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

相关文章

springboot实战纪实-课程介绍

教程介绍 Spring Boot是由Pivotal团队提供的一套开源框架&#xff0c;可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持&#xff0c;可以帮助开发者更轻松快捷地构建出企业级应用。 Spring Boot通过自动配置功能&#xff0c;降低了复杂性&#xff0c;同时支持…

BBP飞控板中的坐标系变换

一般飞控板中至少存在以下坐标系&#xff1a; 陀螺Gyro坐标系加速度计Acc坐标系磁强计Mag坐标系飞控板坐标系 在BBP飞控板采用的IMU为同时包含了陀螺&#xff08;Gyro&#xff09;及加速度计&#xff08;Acc&#xff09;的6轴传感器&#xff0c;故Gyro及Acc为同一坐标系。同时…

数据表中的索引详解

文章目录 一、索引概述二、普通索引三、唯一索引四、全文索引五、多列索引六、索引的设计原则七、隐藏和删除索引 一、索引概述 日常生活中&#xff0c;我们经常会在电话号码簿中查阅“某人”的电话号码&#xff0c;按姓查询或者按字母排序查询&#xff1b;在字典中查阅“某个…

大模型系列17-RAGFlow搭建本地知识库

大模型系列17-RAGFlow搭建本地知识库 安装ollama安装open-wehui安装并运行ragflowRAG&#xff08;检索、增强、生成&#xff09;RAG是什么RAG三过程RAG问答系统构建步骤向量库构建检索模块生成模块 RAG解决LLM的痛点 使用ragflow访问ragflow配置ollama模型添加Embedding模型添加…

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

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

SocraticLM: Exploring Socratic Personalized Teaching with Large Language Models

题目 苏格拉底式教学:用大型语言模型探索苏格拉底式个性化教学 论文地址&#xff1a;https://openreview.net/pdf?idqkoZgJhxsA 项目地址&#xff1a;https://github.com/Ljyustc/SocraticLM 摘要 大型语言模型(LLM)被认为是推进智能教育的一项关键技术&#xff0c;因为它们展…

第一节:电路连接【51单片机+A4988+步进电机教程】

摘要&#xff1a;本节介绍如何搭建一个51单片机A4988步进电机控制电路&#xff0c;所用材料均为常见的模块&#xff0c;简单高效的方式搭建起硬件环境 一、硬件清单 ①51单片机最小控制模块 ②开关电源 ③A4988模块转接座 ④二相四线步进电机 ⑤电线若干 二、接线 三、A49…

Outlook2024版如何回到经典Outlook

Outlook2024版如何回到经典Outlook 如果新加入一家公司&#xff0c;拿到的电脑&#xff0c;大概率是最新版的Windows, 一切都是新的。 如果不coding, 使用国产的foxmail大概就可以解决一切问题了。可惜老程序员很多Coding都是基于传统Outlook的&#xff0c;科技公司所有人都是I…

网关如何识别和阻止网络攻击

网关在识别和阻止网络攻击方面扮演着关键角色&#xff0c;它通过多种技术和机制来确保网络的安全。以下是网关如何识别和阻止网络攻击的一些主要方法&#xff1a; 1.深度包检测&#xff08;DPI&#xff09; 网关可以对经过的数据包进行深度分析&#xff0c;检查数据包的头部、负…

操作系统复习(理论版)

目录 只会在选择填空出现类型 第一章&#xff1a;操作系统导论 操作系统介绍 不得不知道的概念 可能出现在答题的类型 第二章&#xff1a;进程调度 进程管理&#xff1a; 处理机调度&#xff1a; 进程同步&#xff1a; 死锁&#xff1a; 预防死锁&#xff1a; 避免死…

概述(讲讲python基本语法和第三方库)

我是北子&#xff0c;这是我自己写的python教程&#xff0c;主要是记录自己的学习成果方便自己日后复习&#xff0c; 我先学了C/C&#xff0c;所以这套教程中可能会将很多概念和C/C去对比&#xff0c;所以该教程大概不适合零基础的人。 it seems that python nowadays 只在人工…

Linux(Centos 7.6)命令详解:ls

1.命令作用 列出目录内容(list directory contents) 2.命令语法 Usage: ls [OPTION]... [FILE]... 3.参数详解 OPTION: -l&#xff0c;long list 使用长列表格式-a&#xff0c;all 不忽略.开头的条目&#xff08;打印所有条目&#xff0c;包括.开头的隐藏条目&#xff09…

改善 Kibana 中的 ES|QL 编辑器体验

作者&#xff1a;来自 Elastic Marco Liberati 随着新的 ES|QL 语言正式发布&#xff0c;Kibana 中开发了一种新的编辑器体验&#xff0c;以帮助用户编写更快、更好的查询。实时验证、改进的自动完成和快速修复等功能将简化 ES|QL 体验。 我们将介绍改进 Kibana 中 ES|QL 编辑器…

基于Spring Boot的紧急物资管理系统

基于Spring Boot的紧急物资管理系统是一个非常实用的应用&#xff0c;特别是在应对自然灾害、公共卫生事件等情况下。该系统可以帮助管理者有效地追踪和分配物资&#xff0c;确保资源能够及时到达需要的地方。以下是一个基本的实现思路和一些关键组件&#xff1a; 项目规划 需…

机器学习基础-概率图模型

&#xff08;一阶&#xff09;马尔科夫模型的基本概念 状态、状态转换概率、初始概率 状态转移矩阵的基本概念 隐马尔可夫模型&#xff08;HMM&#xff09;的基本概念 条件随机场&#xff08;CRF&#xff09;的基本概念 实际应用中的马尔科夫性 自然语言处理&#xff1a; 在词…

Qt打包为exe文件

个人学习笔记 选择release 进入项目文件夹&#xff0c;查看releas生成的文件 releas文件路径 进入release看到exe文件&#xff0c;但是无法执行 将exe文件单独放到一个文件夹内 选择MinGW 用CD 进入存放exe文件的路径&#xff0c;输入下面指令 cd J:\C\Qt\test4-3-1 windeploy…

VScode怎么重启

原文链接&#xff1a;【vscode】vscode重新启动 键盘按下 Ctrl Shift p 打开命令行&#xff0c;如下图&#xff1a; 输入Reload Window&#xff0c;如下图&#xff1a;

Web安全 - “Referrer Policy“ Security 头值不安全

文章目录 概述原因分析风险说明Referrer-Policy 头配置选项1. 不安全的策略no-referrer-when-downgradeunsafe-url 2. 安全的策略no-referreroriginorigin-when-cross-originsame-originstrict-originstrict-origin-when-cross-origin 推荐配置Nginx 配置示例 在 Nginx 中配置 …

Hyperbolic dynamics

http://www.scholarpedia.org/article/Hyperbolic_dynamics#:~:textAmong%20smooth%20dynamical%20systems%2C%20hyperbolic%20dynamics%20is%20characterized,semilocal%20or%20even%20global%20information%20about%20the%20dynamics. 什么是双曲动力系统&#xff1f; A hy…

基于SpringBoot在线竞拍平台系统功能实现十五

一、前言介绍&#xff1a; 1.1 项目摘要 随着网络技术的飞速发展和电子商务的普及&#xff0c;竞拍系统作为一种新型的在线交易方式&#xff0c;已经逐渐深入到人们的日常生活中。传统的拍卖活动需要耗费大量的人力、物力和时间&#xff0c;从组织拍卖、宣传、报名、竞拍到成…