一个简单项目的收获和理解

299 阅读4分钟

1.项目介绍

1.1 为什么要写这个文档

因为这个项目是一个整体逻辑上比较简单的项目,没有新东西,但仔细想想,在解决不同问题过程中,不要停留于为了解决问题而解决问题。写这个问题是为了能在以后碰到类似的问题,我能有相关的经验;同时能够对所用的知识点都能够串起来。思考是否能用在以后的项目中?

1.2 项目介绍

功能:主要是对两个不同模型的生成数据进行融合后供页面信息展示。同时还包括对整个项目的移植打包。

技术栈:框架用的是Springboot,数据库用的是MongoDB

技术难点(对于我来说):

  • 数据库MongoDB:部署,分片,聚合函数等;
  • 虚拟机,docker:虚拟机和docker的区别,虚拟机与docker的配置;
  • 文件流的操作:如何通过流发送文件?
  • .sh文件:执行;权限问题;服务调用问题;

2.小收获

2.1 数据库

1.数据导入导出:除去可视化界面直接操作,用命令导入导出是:

sudo mongoimport --db newdb --collection restaurants --file text.json 
sudo mongoexport --db airport -c text --out text.json

2.分片与复制集

  • 为什么需要用到mongoDB分片集群

如果用mongoDB存储的话,数据量大,大量读写,吞吐量很大的情况下,单个server很难满足需求,所以需要用到mongoDB分片集群。(与关系型数据库中的分区方案对比???)

  • 什么是分片

分片:sharding 指的是把数据拆分,将其分散存储在不同的机器上;有时也用partitioning表示这个概念;

mongoDB支持自动分片 auto sharding;可以使得数据库架构对应用程序不可见,也可以简化系统管理。mongoDB自动处理数据在分片上的分布,也更容易添加和删除分片。

分片优点
1.对集群进行抽象,让集群对于用户来说是不可见的

2.保证集群总是可以读写

3.使得集群易于扩展:当系统需要更多空间和资源,mongoDB可以使我们按需方便的扩充系统容量。

  • 复制集

      复制是让多台服务器都拥有同样的数据副本,每一台服务器都是其它服务器的镜像,而每一个分片和其它分片拥有不同的数据子集。  
      通过不同的机器保存副本用于保证数据的不会因为单点损失而丢失,主要用于应对数据丢失,机器损坏带来的风险;同时可以提高读取能力,用户的读取服务器和写入服务器在不同的地方,而且不同服务器为不同的用户提供服务,提高整个系统的负载。
    

主要是防止数据库崩溃带来的损失,保证数据库的高可用。

  • 分片、分区、复制(mongoDB mysql)

分区:优化查询,防止一张表中过多的数据导致查询缓慢 MongoDB:无分表的概念,可以用sharding代替分类(sharding有索引的功能)
MySQL:partition

分片:解决物理磁盘空间不足问题(若带索引,还可以优化查询,做到分区的功能)
MongoDB:sharding
Mysql:mysql-cluster

复制:主要是防止数据库崩溃带来的损失,保证数据库的高可用 MongoDB:master 主 slave 从 Mysql:master 主 slave 从

参考原来的博客:juejin.cn/post/684490…

3.聚合函数:js 与 java实现

参考原来的博客:juejin.cn/post/684490…

2.2 虚拟机

1.docker和虚拟机的区别:

2.docker的配置:应用;

3.虚拟机

参见博客:juejin.cn/post/684490…

2.3 Linux中可执行文件.sh编写与调用

  1. .sh文件:权限和编写
  • 创建文件

  • 给文件赋权

sudo chmod 777 xxx.sh
  • java调用,python调用
  1. python调用
os.system("bash -C './xxx.sh'");

2.4 流的操作

  1. 发送和接受

juejin.cn/post/684490…

  1. 例子:常用的类

2.5 端口占用问题

1.linux如何查看?

netstat  -anp  | grep   端口号

3.总结

在做这个项目的过程中,虽然使用到的技术都不是很新,但是每次新学的都做了一定的总结。

  • 首先是数据库,MongoDB,主要是会用mongoDB基本操作,查询语句的编写,以及分片在单机上的伪搭建。
  • 虚拟机docker的使用,需要更深入的学习。关于dockerfile的编写。
  • 文件流的操作,更多关心如何传送大文件,待考虑?
  • java调用Linux shell脚本,python调用Linux shell脚本。
  • 前后端分离中,路由分配问题,servlet-path问题。
  • Linux中用户权限管理。