# W_Backend 後端個人筆記 ## 限流器 (Rate Limiter) 顧名思義用來限制流量 - 防止需求過載罩成Dos攻擊 - 若使用地三方 API ,可降低成本,預防流量所造成的花費 ## TCP/UDP 傳輸協定,傳送資料時兩種差異 TCP - 可追蹤封包,資料穿輸出錯會自動重新傳送,安全確保資料不會遺失 UDP - 要求快速,出錯也不會重傳,適合即時的,比方遊戲 ## API ### 冪等 打API,一次只會執行一次,不會一直重複點擊造成大量數值,比方線上繳費,繳費後出現中途斷線,當繳費結果已產生,假設使用者又按了一次繳費,不會再有效果。對重複行為中止 ## 資料正規化與反正規 ### 正規化 簡單來說,他是一個欄位分類,可以先理解為將資料欄位拆分的更細,讓資料更容易搜尋,當然這只是其中之一,另外還包含 - 減少資料重複(冗餘) - 避免異常(更新/刪除/插入異常) - 讓資料結構更合理、可維護 其中主鍵則代表者唯一性且不可替代 ### 🧱 原始表(未正規化) | 訂單ID | 客戶名稱 | 客戶地址 | 商品名稱 | 商品數量 | |--------|----------|------------|----------------|----------| | 001 | 小華 | 台北市XX路 | 鉛筆, 原子筆 | 1, 2 | | 002 | 小明 | 新北市YY路 | 原子筆 | 3 | ### ✅ 1NF(第一正規形式) **原則:** 每個欄位只能有「一個值」,不能出現重複欄位或多值欄位。 🧱 轉換後的表: | 訂單ID | 客戶名稱 | 客戶地址 | 商品名稱 | 商品數量 | |--------|----------|------------|-----------|----------| | 001 | 小華 | 台北市XX路 | 鉛筆 | 1 | | 001 | 小華 | 台北市XX路 | 原子筆 | 2 | | 002 | 小明 | 新北市YY路 | 原子筆 | 3 | 可拆分更細,但不一一列舉,先知道就好 ### 反正規化 簡單來說就是為了快速查表所以依照上面正規化的表在進行加工合併 ## 關聯式資料庫與非關聯資料庫 | 特徵 | 關聯資料庫 (Relational Database) | 非關聯資料庫 (NoSQL Database) | |--------------------|----------------------------------------------|------------------------------------------| | **資料結構** | 表格型(行和列) | 鍵值對、文檔、列族、圖型等多種結構 | | **查詢語言** | SQL | 無統一的標準查詢語言,依資料庫類型不同 | | **擴展性** | 垂直擴展為主 | 水平擴展優化 | | **一致性** | ACID(一致性強) | 最終一致性(可能會妥協一致性) | | **靈活性** | 需要預定義結構 | 高度靈活,適用於非結構化資料 | | **應用場景** | 適合事務處理、金融、會計等高一致性需求的應用 | 社交媒體、大數據、物聯網等資料量大且變動頻繁的應用 | | 類型 | 關聯式資料庫 (Relational DB) | 非關聯式資料庫 (NoSQL) | |--------------|-------------------------------|-----------------------------| | 資料結構 | 表格(Table) | JSON / Document 格式 | | 彈性 | 結構固定,要定義欄位 | 彈性高,可不同欄位 | | 關聯 | 支援 JOIN,可建立關聯 | 通常不建議複雜 JOIN | | 常見工具 | MySQL / PostgreSQL | MongoDB / Firebase | | 使用時機 | 結構明確,資料之間有關聯 | 結構常變、需要擴展快 | 選擇關聯資料庫還是非關聯資料庫,取決於具體的應用需求、資料結構和擴展需求。如果需要強一致性和結構化資料管理,關聯資料庫是較好的選擇;如果需要處理大量資料並且資料結構不固定,則非關聯資料庫可能會更合適。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up