HBase Cassandra的部署和操纵

打印 上一主题 下一主题

主题 987|帖子 987|积分 2961

目次
  一.数据库的部署与设置
  二.利用下令访问数据库
  三.数据库的设计
  四.编程实现数据库的访问
  
  注:下述步调仅供参考,详细指令和操纵截图的word版本可见上方本博文免费资源绑定。
  一.数据库的部署与设置

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

执行结果如下图所示:



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南飓风

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表