一個簡單項目的收穫和理解

1.項目介紹

1.1 爲何要寫這個文檔

由於這個項目是一個總體邏輯上比較簡單的項目,沒有新東西,但仔細想一想,在解決不一樣問題過程當中,不要停留於爲了解決問題而解決問題。寫這個問題是爲了能在之後碰到相似的問題,我能有相關的經驗;同時可以對所用的知識點都可以串起來。思考是否能用在之後的項目中?java

1.2 項目介紹

功能:主要是對兩個不一樣模型的生成數據進行融合後供頁面信息展現。同時還包括對整個項目的移植打包。python

技術棧:框架用的是Springboot,數據庫用的是MongoDBmysql

技術難點(對於我來講):linux

  • 數據庫MongoDB:部署,分片,聚合函數等;
  • 虛擬機,docker:虛擬機和docker的區別,虛擬機與docker的配置;
  • 文件流的操做:如何經過流發送文件?
  • .sh文件:執行;權限問題;服務調用問題;

2.小收穫

2.1 數據庫

1.數據導入導出:除去可視化界面直接操做,用命令導入導出是:sql

sudo mongoimport --db newdb --collection restaurants --file text.json 
sudo mongoexport --db airport -c text --out text.json
複製代碼

2.分片與複製集docker

  • 爲何須要用到mongoDB分片集羣

若是用mongoDB存儲的話,數據量大,大量讀寫,吞吐量很大的狀況下,單個server很難知足需求,因此須要用到mongoDB分片集羣。(與關係型數據庫中的分區方案對比???)shell

  • 什麼是分片

分片:sharding 指的是把數據拆分,將其分散存儲在不一樣的機器上;有時也用partitioning表示這個概念;數據庫

mongoDB支持自動分片 auto sharding;可使得數據庫架構對應用程序不可見,也能夠簡化系統管理。mongoDB自動處理數據在分片上的分佈,也更容易添加和刪除分片。json

分片優勢
1.對集羣進行抽象,讓集羣對於用戶來講是不可見的後端

2.保證集羣老是能夠讀寫

3.使得集羣易於擴展:當系統須要更多空間和資源,mongoDB可使咱們按需方便的擴充系統容量。

  • 複製集

    複製是讓多臺服務器都擁有一樣的數據副本,每一臺服務器都是其它服務器的鏡像,而每個分片和其它分片擁有不一樣的數據子集。  
      經過不一樣的機器保存副本用於保證數據的不會由於單點損失而丟失,主要用於應對數據丟失,機器損壞帶來的風險;同時能夠提升讀取能力,用戶的讀取服務器和寫入服務器在不一樣的地方,並且不一樣服務器爲不一樣的用戶提供服務,提升整個系統的負載。
    複製代碼

主要是防止數據庫崩潰帶來的損失,保證數據庫的高可用。

  • 分片、分區、複製(mongoDB mysql)

分區:優化查詢,防止一張表中過多的數據致使查詢緩慢 MongoDB:無分表的概念,能夠用sharding代替分類(sharding有索引的功能)
MySQL:partition

分片:解決物理磁盤空間不足問題(若帶索引,還能夠優化查詢,作到分區的功能)
MongoDB:sharding
Mysql:mysql-cluster

複製:主要是防止數據庫崩潰帶來的損失,保證數據庫的高可用 MongoDB:master 主 slave 從 Mysql:master 主 slave 從

參考原來的博客:juejin.im/post/5c8e48…

3.聚合函數:js 與 java實現

參考原來的博客:juejin.im/post/5cb31c…

2.2 虛擬機

1.docker和虛擬機的區別:

2.docker的配置:應用;

3.虛擬機

參見博客:juejin.im/post/5d3bc3…

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.im/post/5cb317…

  1. 例子:經常使用的類

2.5 端口占用問題

1.linux如何查看?

netstat  -anp  | grep   端口號
複製代碼

3.總結

在作這個項目的過程當中,雖然使用到的技術都不是很新,可是每次新學的都作了必定的總結。

  • 首先是數據庫,MongoDB,主要是會用mongoDB基本操做,查詢語句的編寫,以及分片在單機上的僞搭建。
  • 虛擬機docker的使用,須要更深刻的學習。關於dockerfile的編寫。
  • 文件流的操做,更多關心如何傳送大文件,待考慮?
  • java調用Linux shell腳本,python調用Linux shell腳本。
  • 先後端分離中,路由分配問題,servlet-path問題。
  • Linux中用戶權限管理。
相關文章
相關標籤/搜索