@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实例安装

4、注意点(个人在安装过程中遇到的一些小问题)
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、代码实现
//删除文件 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(); } } }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/20001.html