跳到主要內容

發表文章

目前顯示的是 7月, 2018的文章

MongoDB: Save Files Using GridFS

過去我們在使用File System,我們必須自己處理備份、複製、擴充的問題;如今我們可以我們可以使用MongoDB作為File DB,它可以利用Replica和Sharing的機制幫助我們解決備份、複製、動態擴充、分散式儲存、自動平衡、故障回復的問題,且效能優於RDBMS。若真要說MongoDB這類NoSql的缺點就是它不能處理Transaction。 在MongoDB中對大於16MB BSON Document(如:圖片、音頻、影片等)是使用GridFS的方式做儲存。 GridFS是一種在MongoDB中存儲大二進製文件的機制,GridFS 會將文件分割成多個Chunk(預設256 KB),而GridFS使用fs.files和fs.chunks等兩個Collection來存儲檔案資料,其中fs.files負責存放文件的名稱、大小、上傳的時間等資訊,而fs.chunks則是負責存放經過分割後的Chunks,其優點是透過分割儲存的方式能夠快速讀取檔案中任何的片段。 fs.files Collection { "_id" : , // 檔案的Unique ID "filename": data_string, //檔案名稱 "length" : data_number, // 檔案大小 "chunkSize" : data_number, // chunk大小,預設256k "uploadDate" : data_date, // 儲存時間 "md5" : data_string //檔案的md5值 } fs.chunks Collection { "_id" : , // 檔案chunk的Unique ID "files_id" : , //對應檔案的Unique ID "n" : chunk_number, // 檔案chunk的數量 "data" : data_binary, // 以二進為儲存檔案 } 在下面例子,我們將簡單地示範使用.NET MongoDB Driver來存取與操作MongoDB的G

Angular Route Guards : CanActivate和CanActivateChild的差異

在幾天前,同事向我請教關於Angular Router的CanActivate和CanActivateChild的差別,所以想寫這篇文章來說明CanActivate和CanActivateChild的路由行為。 在Angular的Route Guards包含以下四種 : CanActivate : 用於控制是否允許進入路由。 CanActivateChild :用於控制是否允許進入子路由。 CanDeactivate : 用於控制是否允許離開路由。 CanLoad : 用於控制是否允許延遲載入Module。 Resolve : 用於在路由啟動ㄉ之前取得路由資料。 由上可知,雖然CanActivate和CanActivateChild同是用於控制是否允許進入路由,但CanActivateChild只針對子路由,其行路由為會有些不同。 以下面例子來說: 以為CanActivate例,當我們第一次拜訪A/B,Guard_1和Guard_2都會被執行,但是如果我們接著導向A/C,此時只有Guard_2會被執行。 那如果我們又接續著導向E/F會怎樣呢 ? 答案是Guard_1和Guard_2都會被執行,因為A/C導向至A/C並不是子路由的切換,所以Guard_1也會被執行。 const routes: Routes = [{ path: 'A', canActivate: [ Guard_1 ], children: [ { path: 'B', component: B_Component, canActivate: [ Guard_2 ] }, { path: 'C', component: C_Component, canActivate: [ Guard_2 ] } ] },{ path: 'E',