用Hbase编写图书管理系统

Posted gangzai369

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Hbase编写图书管理系统相关的知识,希望对你有一定的参考价值。

一、项目介绍

 在图书馆,尤其是在各大图书馆,对于图书的管理是相当重要的,而且也是相当麻烦,它是图书管理中最基本的一项常规性的工作。而长期以来,图书管理都是依赖人工进行的,面对如此多的借阅信息就造成相当一部分的资源的浪费。图书管理系统是为了解决图书馆的管理和图书借阅的相关信息的更新操作,包括管理员的调动更新,书籍的添加修改信息,用户的借阅相关书籍以及相关书籍的退还需要在本系统内进行更新操作;

图书管理系统的设计可以最大程度的减轻管理人员的工作量,提升管理图书的效率,通过图书管理系统能过快速找到书籍的在册情况,以及及时的更新图书的借还信息。

二、需求分析

2.1项目设计规划

本项目的设计目标旨在方便图书管理员的操作,减少图书管理员的工作量并使其能更有效的管理书库中的图书,实现了传统的图书管理工作的信息化建设。

本系统的服务对象为图书馆流通部门的工作人员,用户界面友好,不需计算机专业的专门训练即可使用本系统。

图书管理处理的信息量比较大。因此对于本系统的设计,需要采取以下一些原则:

删除不必要的管理冗余,实现管理规范化、科学化。

程序代码标准化,软件统一化,确保软件的可维护性和实用性

能够连接各个关联的数据库,获取数据库中的信息。保证各个数据库表格相关的项目之间有相同的属性。

2.2实施方案

系统功能:总体任务是实现图书管理的系统化,规范化,和自动化。

系统功能分析是在系统开发的总体任务的基础上完成的。

创建相应的借阅信息表包括三部分内容:

用户:编号,姓名,年龄,工作,电话;

管理员:管理员编号,管理员姓名,年龄,上岗日期,工资;

图书信息:书的编号,书名,作者,出版日期,出版单位,图书位置,所属分类;

关于行健的设计:采用书的编号作为整体的行键,保证书被借阅的惟一性;

三、数据模型设计

借阅信息表第一部分(jieyue):

 

用户(user)

编号(uno)

姓名(uname)

年龄(uage)

工作(uwork)

电话(ucall)

A1001

19001

xiaozhao

21

rj

123123

A1002

19001

xiaozhao

21

rj

123123

A1003

 

 

 

 

 

A1004

 

 

 

 

 

B1001

19002

xiaowang

22

jz

123456

B1002

 

 

 

 

 

B1003

 

 

 

 

 

C1001

 

 

 

 

 

C1002

 

 

 

 

 

C1003

19003

xiaoyang

23

sj

123789

借阅信息表第二部分(jieyue):

管理员(manager)

编号(mno)

姓名(mname)

年龄(mage)

上岗日期(mdate)

工资(msalary)

1001

lili

36

2018

3000

1001

lili

36

2018

3000

1001

lili

36

2018

3000

1001

lili

36

2018

3000

1002

zhangfan

45

2012

3500

1002

zhangfan

45

2012

3500

1002

zhangfan

45

2012

3500

1003

wangwei

33

2013

3400

1003

wangwei

33

2013

3400

1003

wangwei

33

2013

3400

借阅信息表第三分(jieyue):

图书信息(book)

书名(bname)

作者(bauthor)

出版日期(bdate)

出版单位(

Bconcern)

所放位置(bwhere)

类别(bsort)

qiuxingshandian

liucixin

2005

sichuankeji

a

kehuan

santi

liucixin

2008

chongqing

a

kehuan

weilaishijie

wangxiaobo

2008

shanghai

a

kehuan

tianyi

qianlifang

2004

sichuang

a

kehuan

chenailuoding

alai

1998

renmin

b

wenxue

renleijianshi

helali

2014

zhongxin

b

wenxue

laorenyuhai

haimingwei

1999

renmin

b

wenxue

xinxiangyue

luyu

2011

zhongxin

c

xiju

moji

zengzimo

2012

renmin

c

xiju

taoqibao

yanghongying

2009

dahe

c

xiju

 技术图片

上图为借阅信息总体的表的结构;

四、数据库实施

创建jieyue表:

package com.simple.create;
        import java.io.IOException;
        import org.apache.hadoop.conf.Configuration;
        import org.apache.hadoop.hbase.HBaseConfiguration;
        import org.apache.hadoop.hbase.HColumnDescriptor;
        import org.apache.hadoop.hbase.HTableDescriptor;
        import org.apache.hadoop.hbase.TableName;
        import org.apache.hadoop.hbase.client.HBaseAdmin;
        public class CreateTable {
        public static void main(String[] args) throws IOException {

         //一、配置文件设置
        //创建用于客户端的配置类实例
        Configuration config = HBaseConfiguration.create();

//客户端连接到zookeeper
        config.set("hbase.zookeeper.quorum", "192.168.1.2:2181");  

//实例化对象并创建表   
        HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf("jieyue"));

//设置列族并限制版本数
        HColumnDescriptor columnDesc1 = new HColumnDescriptor("user");
        columnDesc1.setMaxVersions(5);
        HColumnDescriptor columnDesc2 = new HColumnDescriptor("manager");
        columnDesc2.setMaxVersions(5);

HColumnDescriptor columnDesc3 = new HColumnDescriptor("book");
        columnDesc3.setMaxVersions(5);
        tableDesc.addFamily(columnDesc1);
        tableDesc.addFamily(columnDesc2); 

tableDesc.addFamily(columnDesc3);         
        HBaseAdmin hbaseAdmin = new HBaseAdmin(config);

//创建表
        hbaseAdmin.createTable(tableDesc);  

//释放资源      
        hbaseAdmin.close();
        }
        }

 技术图片

 

 

插入数据:

package com.simple.put;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.Put;

import org.apache.hadoop.hbase.util.Bytes;

public class PutTest {

public static void main(String[] args) throws IOException {

       // 配置文件设置

       // 创建用于客户端的配置类实例

       Configuration  config = HBaseConfiguration.create();

       // 设置连接zookeeper的地址

       config.set("hbase.zookeeper.quorum", "192.168.1.2:2181");

       // 获得要操作的表的对象。

       // 第一个参数"config"为配置文件;第二个参数"jieyue"为数据库中的表名。

       // (注:"jieyue"为上节中所创建的表)

       HTable  table = new HTable(config, "jieyue");

       // 设置Put对象

       // 设置行健值为"a1001"

       Put  put = new Put(Bytes.toBytes("a1001"));

       // 设置列族、列、cell值

       put.add(Bytes.toBytes("user"), Bytes.toBytes("name"), Bytes.toBytes("xiaozhao"));

       // 插入一行数据

       table.put(put);

       // 释放资源

       table.close();

    }

}

 技术图片

查询数据:

package com.simple.scan;

import java.io.IOException; 

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.Result;

import org.apache.hadoop.hbase.client.ResultScanner;

import org.apache.hadoop.hbase.client.Scan;

import org.apache.hadoop.hbase.util.Bytes;

public class ScanTest {

    public static void main(String[] args) throws IOException {

       //配置文件设置

       // 创建用于客户端的配置类实例

       Configuration  config = HBaseConfiguration.create();

       // 设置连接zookeeper的地址

       // hbase客户端连接的是zookeeper

       config.set("hbase.zookeeper.quorum", "192.168.1.2:2181");

       //获得要操作的表的对象。

       // 第一个参数"config"为配置文件;第二个参数"jieyue"为数据库中的表名。

       // (注:"jieyue"为上节中所创建的表)

       HTable  table = new HTable(config, "jieyue");

       //创建Scan对象

       Scan  scan = new Scan();

       //根据Scan对象获取查询结果ResultScanner对象resultScanner

       ResultScanner  resultScanner = table.getScanner(scan);

       for (Result result : resultScanner) {

           // 将结果转换为字符串并打印到控制台

           System.out.println("查询jieyue中的所有数据==>"+Bytes.toString(result.getValue(Bytes.toBytes("book"), Bytes.toBytes("bname"))));

       }

       // 五、释放资源

       table.close();

    }

}

技术图片

 查询指定范围的数据:

package com.simple.scan;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import  org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.Result;

import org.apache.hadoop.hbase.client.ResultScanner;

import org.apache.hadoop.hbase.client.Scan;

import org.apache.hadoop.hbase.util.Bytes;

public class ScanSettingTest {

      public  static void main(String[] args) throws IOException {

        //配置文件设置

        //  创建用于客户端的配置类实例

        Configuration  config = HBaseConfiguration.create();

        //  设置连接zookeeper的地址

        //  hbase客户端连接的是zookeeper

        config.set("hbase.zookeeper.quorum",  "192.168.1.2:2181");

        //获得要操作的表的对象。

        //  第一个参数"config"为配置文件;第二个参数"jieyue"为数据库中的表名。

       //  (注:"jieyue"为上节中所创建的表)

                   HTable  table = new HTable(config, "jieyue");

        //创建Scan对象

        //  第一个参数"rk001"为行健的开始位置;第二个参数"rk003"为行健的结束位置

      Scan  scan = new Scan(Bytes.toBytes("a1001"),  Bytes.toBytes("b1003"));

        //根据Scan对象获取查询结果ResultScanner对象resultScanner

      ResultScanner  resultScanner = table.getScanner(scan);

      for  (Result result : resultScanner) {

        //  将结果转换为字符串并打印到控制台

      System.out.println("查询jieyue中指定范围内的数据==>"+Bytes.toString(result.getValue(Bytes.toBytes("book"),  Bytes.toBytes("bname"))));

                   }

      //释放资源

      table.close();

}

技术图片

Get查询:

package  com.simple.get; 

import  java.io.IOException; 

import org.apache.hadoop.conf.Configuration;

import  org.apache.hadoop.hbase.HBaseConfiguration;

import  org.apache.hadoop.hbase.client.Get;

import  org.apache.hadoop.hbase.client.HTable;

import  org.apache.hadoop.hbase.client.Result;

import  org.apache.hadoop.hbase.util.Bytes;

public class  GetTest { 

      public  static void main(String[] args) throws IOException {

     //  一、配置文件设置

     //  创建用于客户端的配置类实例

      Configuration  config = HBaseConfiguration.create();

     //  设置连接zookeeper的地址

     //  hbase客户端连接的是zookeeper

     config.set("hbase.zookeeper.quorum",  "192.168.1.2:2181");

     //  二、 获得要操作的表的对象。

     //  第一个参数"config"为配置文件;第二个参数"jieyue"为数据库中的表名。

     //  (注:"jieyue"为上节中所创建的表)

     HTable  table = new HTable(config, "jieyue");

     //  三、设置Get对象

     //  设置要查找的行健值为"a1001"

     Get  get = new Get(Bytes.toBytes("a1001"));

     //  四、根据Get对象获取查询结果Result对象

     Result  result = table.get(get);

     //  五、设置要查询的列族名、列名

     byte[] a1001_vals = result.getValue(Bytes.toBytes("baseinfo"),  Bytes.toBytes("name"));

     //  六、将结果转换为字符串并打印到控制台

     System.out.println("行健为a1001、列族为book、列为bname的值==>"+Bytes.toString(a1001_vals));

     //  七、释放资源

     table.close();

         } 

}

技术图片

删除数据:

package com.simple.del;

import java.io.IOException; 

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.client.Delete;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.util.Bytes;

public class DelTest {

    public static void main(String[] args) throws IOException {

       //配置文件设置

       // 创建用于客户端的配置类实例

       Configuration  config = HBaseConfiguration.create();

       // 设置连接zookeeper的地址

       // hbase客户端连接的是zookeeper

       config.set("hbase.zookeeper.quorum", "192.168.1.2:2181");

       //获得要操作的表的对象。

       // 第一个参数"config"为配置文件;第二个参数"jieyue"为数据库中的表名。

       HTable  table = new HTable(config, "jieyue");

       //设置Delete对象

       // 设置行健值为"c1001"。要删除的一行数据的行健为"c1001"

       Delete  del = new Delete(Bytes.toBytes("c1001"));

        //删除一行数据

       table.delete(del);

       table.close();

    }

}

执行前:

技术图片

执行后:

技术图片

删除表(因之后还要用jieyue表,这里就以bbb表为例进行删除):

package com.simple.create;
        import java.io.IOException;
        import org.apache.hadoop.conf.Configuration;
        import org.apache.hadoop.hbase.HBaseConfiguration;
        import org.apache.hadoop.hbase.client.HBaseAdmin;
        public class DelTable {    
            public static void main(String[] args) throws IOException {
        //配置文件设置
        //创建用于客户端的配置类实例
        Configuration config = HBaseConfiguration.create();
        //设置连接zookeeper的地址
        //hbase客户端连接的是zookeeper
        config.set("hbase.zookeeper.quorum", "192.168.1.2:2181");
        //实例化HBaseAdmin、创建表
        //根据配置文件创建HBaseAdmin对象
        HBaseAdmin hbaseAdmin = new HBaseAdmin(config);        
        //删除表
        //设置表bbb不可用(删除表之前需要先设置表不可用)
        hbaseAdmin.disableTable("bbb");
        //删除表bbb
        hbaseAdmin.deleteTable("bbb");        
        //释放资源
        hbaseAdmin.close();
        }
        }

执行前:

技术图片

执行后:

技术图片

五、课程设计总结

问题:1、一开始表的设置没用按照Hbase的相关的要求进行设置(类似于关系数据库);

      2、行键如何进行进行选定;

      3、查询删除操作时对象包的调用,相关的环境的搭建;

解决:1、表的设置通过对相关的HBASE的内容进行整理查看,知道了表的结构即用尽量少的表做尽量多的操作,最终定下采用一个表的设计方案;

2、行键的设置通过对图书管理系统的详细思考,最终得出图书的借针对图书来说的,所以最后定的是对图书的编号当成行键,相关的管理员管理不同类别的图书,包括日常的整理,图书的实际添加,相关图书的借阅;

3、对象包的调用是通过咨询同学进行包的调用,目的是达到Java程序的正常运行;

总结:收获是巩固了相关的HBASE的知识,加强了对分布式数据库的理解。通过图书管理系统的设置可以方便的进行图书的增、删、改、查操作,极大的减轻了图书管理员的工作量。

 (本实验在SimpleBDT平台上操作)

注:本文为自己创作,需转载请标注出本文链接;欢迎大家指导,改正。

以上是关于用Hbase编写图书管理系统的主要内容,如果未能解决你的问题,请参考以下文章

用java编写一个 图书馆图书借阅管理系统

用JAVA编写图书信息管理系统,进行可行性分析.300-400字。需要原创

用java编写一个简单的图书管理系统。 要求:实现浏览,借书,还书,查询,退出等功能(每次最多能借

求图书馆管理系统程序(c语言)

java粗略版图书管理系统

用C语言编写一个车票管理系统