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 | 《活着》 |
| B001 | info | category | 文学 |
| B001 | info | published_date | 1993-06-01 |
| B001 | author | name | 余华 |
| B001 | author | birth_date | 1960-04-03 |
| B001 | publisher | publisher_name | 作家出版社 |
| B001 | publisher | publisher_address | 北京市朝阳区 |
| B002 | info | title | 《百年孤独》 |
| B002 | info | category | 小说 |
| B002 | info | published_date | 1967-06-05 |
| B002 | author | name | 加西亚·马尔克斯 |
| B002 | author | birth_date | 1927-03-06 |
| B002 | publisher | publisher_name | 南海出版公司 |
| B002 | publisher | publisher_address | 上海市徐汇区 |

(2)读者表

|-----------------------|------------|--------------|-----------------|
| 行键(reader_id) | 列族 | 列名 | 列值 |
| R001 | info | reader_name | 张三 |
| R001 | info | dob | 1990-05-15 |
| R001 | contract | email | zhsan@email.com |
| R001 | contract | phone_number | 123-4567-8901 |
| R001 | contract | address | 北京市海淀区 |
| R002 | info | reader_name | 李四 |
| R002 | info | dob | 2005-02-28 |
| R002 | contract | email | lisi@email.com |
| R002 | contract | phone_number | 987-6543-2100 |
| R002 | contract | address | 上海市浦东新区 |

(3)借阅记录表

|-----------------------|------------|-------------|------------|
| 行键(borrow_id) | 列族 | 列名 | 列值 |
| BR001 | info | Book_id | B001 |
| BR001 | info | Borrow_date | 2024-11-01 |
| BR001 | info | Return_date | 2024-11-15 |
| BR001 | reader | Reader_name | 张三 |
| BR001 | reader | Reader_id | R001 |
| BR001 | info | Book_id | B002 |
| BR001 | info | Borrow_date | 2024-11-02 |
| BR001 | info | Return_date | 2024-11-20 |
| BR001 | reader | Reader_name | 李四 |
| BR001 | reader | 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',))

执行结果如下图所示:

相关推荐
重生之绝世牛码1 小时前
Java设计模式 —— 【行为型模式】命令模式(Command Pattern) 详解
java·大数据·开发语言·设计模式·命令模式·设计原则
晚风_END2 小时前
node.js|浏览器插件|Open-Multiple-URLs的部署和使用,实现一键打开多个URL的强大工具
服务器·开发语言·数据库·node.js·dubbo
网络安全-杰克2 小时前
[网络安全]sqli-labs Less-4 解题详析
数据库·web安全·less
Anna_Tong3 小时前
引领实时数据分析新时代:阿里云实时数仓 Hologres
大数据·阿里云·数据分析·实时数仓
加酶洗衣粉4 小时前
PostgreSQL学习笔记(二):PostgreSQL基本操作
数据库
狄加山6754 小时前
数据结构(查找算法)
数据结构·数据库·算法
jinan8865 小时前
电子图纸怎么保障安全?
大数据·安全
sevevty-seven5 小时前
MySQL的主从复制
数据库·mysql
生信碱移5 小时前
万字长文:机器学习的数学基础(易读)
大数据·人工智能·深度学习·线性代数·算法·数学建模·数据分析
我本是机械人6 小时前
MVCC实现原理及其作用
java·数据结构·数据库·后端·mysql·算法