巨杉数据库学习笔记+巨杉数据库实操项目实践

@TOC巨杉数据库学习笔记+项目实践心得

SequoialDB简介

SequoiaDB 巨杉数据库是一款金融级分布式数据库,主要面对高并发实时处理型场景提供高性能、可靠稳定以及无限水平扩展的数据库服务。

用户可以在 SequoiaDB 巨杉数据库中创建多种类型的数据库实例,以满足上层不同应用程序各自的需求。SequoiaDB 巨杉数据库支持 MySQL、MariaDB、PostgreSQL 和 SparkSQL 四种关系型数据库实例、JSON 文档类数据库实例、以及 S3 对象存储的非结构化数据实例。

学习笔记

在系统学习巨杉数据库的相关知识后,我考取了巨杉认证的SCDA和SCDP证书,在整个学习过程中,我对分布式数据库的认识进一步加深,对巨杉数据库的基本操作和产品特点进一步了解,为了加强对这些知识点的记忆,我写下一些学习笔记用于分享及然后自己的复习。

1、系统架构

SequoiaDB 巨杉数据库集群分为数据库存储引擎数据库实例

在当前版本中,SequoiaDB 巨杉数据库支持多达 6 种不同数据服务实例,包括针对结构化数据的 MySQL、MariaDB、PostgreSQL 与 SparkSQL 实例;针对半结构化数据的 JSON 实例;以及针对非结构化数据的 S3 对象存储实例。

SequoiaDB 巨杉数据库的数据库存储引擎则包括协调节点、编目节点与数据节点三种类型的服务。数据节点与编目节点各自以多副本的形式构成一个个复制组

数据库存储引擎与数据库实例均支持水平弹性扩展,任何角色的节点均提供高可用冗余机制,不存在单点故障的可能。
整体架构

2、SequoialDB的环境配置与安装部署

具体见巨杉官网的文档中心(点击访问)

3、SQL实例安装

针对自己想要创建的数据库实例,下载好对应的数据库实例组件,这里以安装MYSQL实例组件为例。
安装步骤可参照:MYSQL实例组件安装部署

4、注意点(个人在安装过程中遇到的一些小问题)

1、关于Ubantu系统的磁盘扩容。SequoialDB部署在linux系统中,在安装过程中可能遇见虚拟机磁盘不够的问题。解决办法是先拓展磁盘空间,再利用文件分区管理软件(如GParted)重新分配磁盘空间。
2、在linux终端里操作时,要记住一些基本命令:

su - sdbadmin//切换sdbadmin用户
bin/sdb_sql_ctl addinst myinst -D database/3306/  //在对应数据库实例安装目录下创建数据库实例
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root  //登陆mysqlsheel,连接mysql实例,随后可进行mysql数据库操作
sdb  //进入SequoialDB sheel(SequoialDB数据存储引擎)
var db = new Sdb("localhost", 11810);//使用javascript 语法连接协调节点,获取数据库连接
db.company.employee.find(); //随后可对数据库进行CRUD操作

巨杉数据库实操项目

为了加强对巨杉数据库的应用理解,我和另外一个同学合作,制作了一个基于分布式数据库SequoialDB的文件管理存储系统。我主要负责Spingboot框架的dao层中对数据库内容进行操作代码的编写。

1、项目背景

为了应对电脑中越来越多的各类资料,本项目所开发了基于分布式数据库的文件存储应用,可以将我们的本地文件分类存储到巨杉数据库中,代替传统的本地存储,减少本地存储资源的占用。本应用的基本功能有:文件浏览,上传,下载,搜索,复制、删除等。

2、开发工具

开发软件:JDK8.0、IDEA
开发框架:SpringBoot
开发语言:Java、HTML、Javascript、css
数据库:SequoiaDB v5
虚拟机环境:ubantu16.04
数据库连接工具:navicat

3、功能演示

1、主页面

主页面

2、具体功能

1、上传文件
在这里插入图片描述
在这里插入图片描述
2、删除文件
在这里插入图片描述
3、重命名
在这里插入图片描述
4、预览文件
在这里插入图片描述
5、下载文件
在这里插入图片描述
在这里插入图片描述
5、由于篇幅原因,其它功能如复制、移动文件的截图就不放了。

3、代码实现

这里我主要介绍一下自己负责的数据库功能代码部分。
1、删除数据库中的文件

    //删除文件
    public String delete(String filetype, String name){
        Connection connection = null;
        Statement statement = null;
        FileInputStream fis = null;

        //连接数据库
        try{
            //启动JDBC驱动
            Class.forName(DRIVER);
            //连接数据库
            connection = DriverManager.getConnection(URL, user, pwd);
            statement = connection.createStatement();//mysql语句
            String delete ="delete from "+filetype+" where name = ?;";
            //创建执行器
            PreparedStatement ps =connection.prepareStatement (delete);
            ps.setString(1,name);//删除数据
            ps .executeUpdate();
            ps.close();
            connection.close();
            fis.close();
        }
        catch (SQLException | ClassNotFoundException | IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                if (statement != null)statement.close();
                if(connection!=null)connection.close();
            }
            catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        return  "删除成功";
    }

2、重命名文件

    //重命名
    public String rename(String filetype, String oldname,String newname){
        Connection connection = null;
        Statement statement = null;
        //连接数据库
        try {
            //启动JDBC驱动
            Class.forName(DRIVER);
            //连接数据库
            connection = DriverManager.getConnection(URL, user, pwd);
            statement = connection.createStatement();
            //mysql语句
            String update = "update "+filetype+ " set name=? where name=?;";

            //创建执行器
            PreparedStatement ps = connection.prepareStatement(update);
            ps.setString(1,newname);
            ps.setString(2,oldname);
            //更新数据
            ps.executeUpdate();
            ps.close();
            connection.close();

        }catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        finally {
            try {
                if (statement != null)statement.close();
                if(connection!=null)connection.close();
            }
            catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        return  "文件重命名成功";
    }

3、文件预览

    public class Content{
        String name;
        Long size;
        String date;
        FileInputStream file;

        public void setName(String name){
            this.name=name;
        }
        public void setSize(Long size){
            this.size=size;
        }
        public void setDate(String date){
            this.date=date;
        }
        public void setFile(FileInputStream file){
            this.file=file;
        }

        public FileInputStream getFile(){
            return file;
        }
    }

    //预览文件
    public ArrayList getdisplay(String filetype, String name){
        Connection connection = null;
        Statement statement = null;

        ArrayList list = new ArrayList();
        //连接数据库
        try {
            //启动JDBC驱动
            Class.forName(DRIVER);
            //连接数据库
            connection = DriverManager.getConnection(URL, user, pwd);
            statement = connection.createStatement();
            //mysql语句
            String query = "select * from "+filetype+ " where name=?;";
            //创建执行器
            PreparedStatement ps = connection.prepareStatement(query);
            ps.setString(1,name);

            ResultSet rs = ps.executeQuery();
            while(rs.next()){
                Content con = new Content();
                con.setName(rs.getString("name"));
                con.setSize(rs.getLong("size"));
                con.setDate(rs.getString("date"));
                FileInputStream fis = null;
                fis = (FileInputStream)rs.getBlob("fis").getBinaryStream();
                con.setFile(fis);
                list.add(con);
                fis.close();
            }
            ps.close();
            connection.close();
        }
        //下面是异常处理
	    catch (SQLException | ClassNotFoundException | IOException  e) {
            e.printStackTrace();
        }
        return list;

    }

4、从数据库下载文件到指定路径

    //下载文件
    public void download(String filetype,String path, String name){
        FileInputStream fis = null;
        ArrayList arraylist = new ArrayList();


        //获取文件内容(预览方法返回内容)
        arraylist = getdisplay(filetype,name);
        Content content = (Content)arraylist.get(0);
        String file_path=path+name;
        //获取文件信息
        fis = content.getFile();
        try{
            byte[] fis_byte=read(fis);
            FileOutputStream fileOutputStream=new FileOutputStream(new File(file_path));
            fileOutputStream.write(fis_byte);
            fileOutputStream.close();
        }catch (IOException e) {
            e.printStackTrace();
        }
    }

    //将inputstream转化为byte[]
    public static byte[] read(InputStream inputStream) throws IOException {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int num = inputStream.read(buffer);
            while (num != -1) {
                baos.write(buffer, 0, num);
                num = inputStream.read(buffer);
            }
            baos.flush();
            return baos.toByteArray();
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值