跳到主要內容

發表文章

目前顯示的是有「資料庫」標籤的文章

【資訊軟體知識】 關於資料庫的連接池

  軟體開發過程中常常會需要將資料儲存於「資料庫」之中,開發程式的過程中一定會頻繁操作資料庫進行資料的儲存與查詢,試想每次的動作如若都要先有連接及斷線的程序,對於資料庫與程式端來說都是一大負擔,因此連接池的機制就是為了減少不斷的連接、斷線的成本,除此之外,也讓連線可以重複使用,減少資源的浪費。 沒有連接池之前的單一連線機制有什麼問題? 首先來談談連接池之前的單一連接機制, 在配置正確的狀況下可能不會遇到任何問題, 但假設我們的應用同時間有100個用戶進行查詢, 那麼通道只有一條, 在怎麼樣都得等待前一個人查詢並回傳完畢才能再服務其他人的查詢請求, 一旦請求量越來越高將導致系統開始變慢, 可能會遇到的幾個缺點及風險如下: ● 每秒請求10個查詢可能還沒感覺到明顯延遲, 但假設每秒10000個以上的請求呢? 勢必降低查詢效率。 ● 我們整個系統都依賴於單一連線, 那麼假設這個連線在例外的狀況下被關閉時, 那麼是不是就無法回應給Client端了? ● 連接到資料庫是一個成本昂貴的開銷, 因此常常連接關閉, 顯然不是一個有效率的策略。 為了改善上述缺點, 而發展出連接池的概念。 什麼是連接池? 連接池的機制下, 不僅能應付同時間大量請求的場景, 就連單一連線也能支援。 系統啟動時, 根據連線池數量配置, 創建N個連接並加入到連接池。 圖片來源 配置的數量過大亦會造成浪費, 這點需要取決於我們的應用量的估計。 每次跟DB請求前, 就會先從連接池中取得一條通道跟DB溝通。 圖片來源 當連接池的連線都被用滿的時候, 會等待其他人的連接被釋放。 圖片來源 結語 這樣的概念很聰明,相當於準備了一個緩衝站,而這個緩衝站的資源是共享的,因此對於後者的資料庫來說是一大福音,不會因為各個程式每一個動作就一次連接導致資料庫可以服務的資源耗盡。 其實現在的共享經濟(交通、住宿、場地...),就有點類似這樣的概念,透過購置有效的資產,開放平台提供給普羅大眾使用,而使用完畢後進行歸還,這樣一來能夠有效減少不必要的浪費,讓使用效率最大化。

【資訊軟體知識】資料檢索技術 - 倒排索引(Inverted Index)

數據的時代,如何有效率的搜尋來找到我們要的答案?這時候就要透過一些資訊檢索的技術來幫我們提升效率了,而本篇會介紹索引的基本概念以及為什麼演化至倒排索引,為我們帶來了哪些好處? 索引只是搜尋檢索的一個環節,未來的幾個篇章我們也會逐一介紹我們目前使用的搜尋引擎如何聰明的知道我們想要什麼? 那我們就趕緊進入主題吧! 什麼是索引? 相信我們都知道書籤的作用吧! 書籤就是透過標題或是摘要定位到正確頁數或者文件位置的一種標記方式,透過這種方式大幅度的減少我們掃過整本書的時間,我們只要記住這個摘要,就能精確地找出我們需要的檔案,但是有發現一個問題嗎? 假設我想要找文章中的某個片段時,是不是就不容易達到我們的目的了? 這時候就需要有倒排索引(Inverted Index)的技術來幫我們實現了! 那什麼又是倒排索引? 能解決什麼問題呢? 當資料隨著時間遞增,越來越繁雜時,我們都知道要找到正確的資料是一件不容易的事, 以前我們可能需要逐頁翻找, 後來加入了書籤功能, 透過標題、群組整理濃縮的方式,快速定位到目標,但是這仍遠遠不夠,那可以怎麼做呢? 答案就是透過倒排索引(Inverted Index)的方式,將每一個文件的內容以詞的方式切割,成為書籤的標記方式,如下圖: 檢索時有什麼幫助呢? 假設我們今天要找蘋果,那麼只要輸入apple,就能得到文件1與文件2都出現蘋果,我們再想的更深入一點,假設每個書籤再多記錄這個詞出現在文件中的哪個位置,那麼我們是不是可以搭配更強大的搜尋方式,以「一個蘋果」為例,我們可以搜尋「an apple」,透過這樣有順序的表達詞語,我們就可以非常語意化的來搜尋文件位置。 看到這邊,相信大家已經非常清楚倒排索引為我們帶來了什麼樣的巨大改變,讓我們從原本很固定的搜尋方式,可以透過更聰明、符合人性的搜尋方式來查找文件,甚至可以加入距離的限制條件,讓我們更精準的找到目標。 為什麼更快更精準? 事前建立機制,再記錄之前就先進行斷詞索引,讓後續的搜尋更加省工。 索引額外記錄了位置資訊,檢索時透過詞與詞的順序、位置...等限制條件來精準找到目標。 結語 數位時代的來臨,我們許多的資料都轉移到網際網路,相信在大數據的環境下,傳統的檢索方式也不敷使用了,因此才會演進更有效率的檢索方式。 而這項技術也是許多搜尋引擎的底層實現方式,例如: Lu...