<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          圖片存儲功能設(shè)計與優(yōu)化經(jīng)驗總結(jié)

          共 1836字,需瀏覽 4分鐘

           ·

          2021-06-27 09:25

          文章簡介

          本文通過對一個小型電商系統(tǒng)的圖片存儲模塊分析與總結(jié),分享如何設(shè)計一個適用的圖片存儲功能。

          常見圖片存儲方式

          在日常的系統(tǒng)設(shè)計中,難免會涉及到圖片功能,例如商品的圖片、文章封面圖、用戶頭像等等。一般常規(guī)的方式對數(shù)據(jù)創(chuàng)建一個圖片的字段,這個字段存儲的就是文件的路徑。如下面的格式:

          數(shù)據(jù)編號其他的字段圖片字段
          1...https://www.baidu.com/1.png
          2...https://www.baidu.com/1.png

          上述的數(shù)據(jù)表設(shè)計有好也有壞的地方:

          優(yōu)勢:

          1. 存儲方式簡單,只需要用戶上傳圖片,獲取到圖片的url存儲起來即可。
          2. 展示方式簡單,客戶端只需要根據(jù)字段的值,顯示即可。

          劣勢:

          1. 擴展性弱,如果后期我們的圖片更換了域名,需要針對所有的數(shù)據(jù)中的域名部分進(jìn)行替換。

          2. 多圖片擴展性弱,如果我們的某一條數(shù)據(jù)有多張圖片,這時候存儲的值可能是這種格式。圖片路徑1,圖片路徑2,....,圖片路徑n。雖然存儲起來簡單,但是在展示階段需要做數(shù)據(jù)格式的轉(zhuǎn)換,需要將字符串轉(zhuǎn)換為數(shù)組的格式進(jìn)行循環(huán)處理。

          3. 浪費存儲資源,假設(shè)有一張圖片a,在用戶頭像的時候上傳了一次,在商品圖片的時候也上傳了一次,這樣同一張圖片就會存儲兩次,多了一倍的存儲空間。

          4. 第2點提到了路徑問題,可能你會想我圖片里面不存儲具體的域名信息,只存儲圖片的名稱,在客戶端展示的時候進(jìn)行拼接即可。

          $domain = 'https://www.baidu.com/';
          $imageArray = ['1.png''2.png''3.png''4.png'];
          foreach ($imageArray as $value) {
            $domain .= $value;
          }

          上面這種方式可以規(guī)避域名問題,但是也難免避免存儲方式問題。有可能系統(tǒng)前期適用的是七牛云存儲,后面適用了阿里云存儲,騰訊云存儲,這種就需要處理存儲方式。雖然也可以解決,但是讓系統(tǒng)設(shè)計起來顯得更加的復(fù)雜。

          優(yōu)化思路

          根據(jù)上面的問題,我們可以思考一下,如果將系統(tǒng)的所有圖片,都做成一個功能模塊,每一個需要涉及到圖片的地方,去調(diào)用這個模塊中的列表數(shù)據(jù),獲取到系統(tǒng)的圖片,這樣是不是會更好一些呢?如上圖,微信公眾號的圖片管理功能。左側(cè)是圖片的分類,右側(cè)是對應(yīng)的具體圖片。我們在需要使用圖片的地方,去獲取對應(yīng)的圖片數(shù)據(jù)即可。同時,我們也有一個獨立的素材庫管理,可以查看系統(tǒng)的所有圖片,便于對圖片的管理。

          方案設(shè)計

          優(yōu)化思路提到了,我們單獨做一個圖片管理器。那我們數(shù)據(jù)表該具體怎么設(shè)計呢?我們這里以微信公眾號的圖片管理做演示。

          1. 首先我們有一個圖片的分類,這時候就需要一個圖片分類表(image_category)。

          2. 接下來,我們就需要創(chuàng)建一張具體的圖片表(image),用來存儲具體的圖片數(shù)據(jù)。

          Snipaste_2021-06-26_19-43-51
          1. 圖片分類主要就是分類的名稱、排序、創(chuàng)建時間等等信息。
          Snipaste_2021-06-26_19-44-01
          1. 圖片信息表存儲的字段就相對比較多一些。有圖片分類的id、存儲域名、圖片的名稱、圖片的url、圖片的大小、圖片的類型等信息。

          2. 表中拿一個字段存儲域名,客戶端在獲取到域名和圖片的名稱時,直接拼接起來就是一個圖片的完成路徑。

          3. 圖片的大小和圖片的擴展名,方便后期我們在頁面上進(jìn)行展示。有的系統(tǒng)可能會展示圖片的大小。

          方案總結(jié)

          通過上面的設(shè)計,我們可以總結(jié)出如下幾點優(yōu)勢:

          1. 優(yōu)化了圖片的存儲空間,避免同一張圖片多次上傳,占用系統(tǒng)的存儲空間。

          2. 如果涉及到不同的存儲平臺,我們圖片中有域名字段,直接將域名和圖片名稱進(jìn)行拼接即可。后期不管是換了多少個存儲平臺,系統(tǒng)也不會有任何影響。

          3. 便于系統(tǒng)對圖片的管理,這樣將圖片存儲獨立出來,方便查看系統(tǒng)的所有圖片數(shù)據(jù)。

          4. 涉及到業(yè)務(wù)數(shù)據(jù)的表,只需要去關(guān)聯(lián)圖片表中的id即可。

          推薦閱讀

          1. 電商實戰(zhàn)項目五[商品文件存儲設(shè)計]

          2. 推薦幾款強大的開源的電商系統(tǒng)

          3. Redis實現(xiàn)列表數(shù)據(jù)查詢設(shè)計

          4. 如何正確設(shè)計一個訂單號???


          瀏覽 147
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲性爱城 | 国产一区二区三区视频 | 99在线免费视频 | 日韩精品理论 | 日韩大香蕉在线免观网 |