NoSQL資料庫

来源:http://www.cnblogs.com/yan-lei/archive/2017/11/05/7789246.html
-Advertisement-
Play Games

NoSQL資料庫 1、NoSQL簡介 最初表示“反SQL”運動,用新型的非關係型資料庫取代關係資料庫;現在表示“Not only SQL”關係和非關係型資料庫各有優缺點,彼此都無法互相取代。 通常,NoSQL資料庫具有以下幾個特點: (1)靈活的可擴展性 (2)靈活的數據模型 (3)與雲計算近緊密融 ...


NoSQL資料庫

1、NoSQL簡介

最初表示“反SQL”運動,用新型的非關係型資料庫取代關係資料庫;現在表示“Not only SQL”關係和非關係型資料庫各有優缺點,彼此都無法互相取代。

通常,NoSQL資料庫具有以下幾個特點:

(1)靈活的可擴展性

(2)靈活的數據模型

(3)與雲計算近緊密融合

2、NoSQL興起的原因

1.關係資料庫已經無法滿足Web2.0的需求。主要表現在以下幾個方面:

(1)無法滿足海量數據的管理需求

(2)無法滿足數據高併發的需求

(3)無法滿足高可擴展性和高可用性的需求

MySQL集群是否可以完全解決問題?

  • 複雜性:部署、管理、配置很複雜
  • 資料庫複製:MySQL主備份之間採用複製方式,只能是非同步複製,當主庫壓力較大時可能產生較大延遲,主備切換可能會對視最後一部分更新事務,這時往往需要人工介入,備份和恢復不方便
  • 擴容問題:如果系統壓力過大需要增加新的機器,這個過程涉及數據重新劃分,整個過程比較複雜,且容易出錯
  • 動態資料庫遷移問題:如果某個資料庫組壓力過大,需要將其中部分數據遷移出去,遷移過程需要總控節點整體協調,以及資料庫節點的配合。這個過程很難做到自動化

2.“One size fits all”模式很難適用於截然不同的業務場景

  • 關係模型作為統一的數據模型即被用於數據分析,也被用於線上業務。但這兩者一個強調高吞吐,一個強調低時延,已經演化出不同的架構。用同一套模型來抽象顯然是不合適的
  • Hadoop就是針對數據分析
  • MongoDB、Redis等是針對線上業務,兩者都拋棄了關係模型

3.關係資料庫的關鍵特性包括完善的事務機制和高效的查詢機制。但是,關係資料庫引以為傲的兩個特性,到了Web2.0時代卻成了雞肋,主要表現在以下幾個方面:

(1)Web2.0網站系統通常不要求嚴格的資料庫事務

(2)Web2.0並不要求嚴格的讀寫實時性

(3)Web2.0通常不包含大量複雜的SQL查詢(去結構化,避免多表查詢,存儲空間換取更好的查詢性能)

3、NoSQL與關係資料庫的比較

NoSQL和關係資料庫的簡單比較

比較標準RDBMSNoSQL備註
資料庫原理 完全支持 部分支持 RDBMS有關代數理論作為基礎
NoSQL沒有統一的理論基礎
數據規模 超大 RDBMS很難實現橫向擴展,縱向擴展的空間也比較有限,性能會隨著數據規模的增大而降低
NoSQL可以很容易通過添加更多設備來支持更大規模的數據
資料庫模式 固定 靈活 RDBMS需要定義資料庫模式,嚴格遵守數據定義和相關約束條件
NoSQL不存在資料庫模式,可以自由靈活定義並存儲各種不同類型的數據
查詢效率 可以實現高效簡單查詢,但是不具備高度結構化查詢等特性,複雜查詢的性能不盡人意 RDBMS藉助於索引機制可以實現快速查詢(包括記錄查詢和範圍查詢)
很多NoSQL資料庫沒有面向複雜查詢的索引,雖然NoSQL可以使用MapReduce來加速查詢,但是,在複雜查詢方面的性能仍然不如RDBMS
一致性 強一致性 弱一致性 RDBMS嚴格遵守事務ACID模型,可以保證事務強一致性
很多NoSQL資料庫放鬆了對事務ACID四性的要求,而是遵守BASE模型,只能保證最終一致性
數據完整性 容易實現 很難實現 任何一個RDBMS都可以很容易實現數據完整性,比如通過主鍵或者非空約束來實現實體完整性,通過主鍵、外鍵來實現參照完整性,通過約束或者觸發器來實現用戶自定義完整性
但是,在NoSQL資料庫卻無法實現
擴展性 一般 RDBMS很難實現橫向擴展,縱向擴展的空間也比較有限
通過添加廉價設備實現擴展
可用性 很好 RDBMS在任何時候都可以保證數據一致性為優先目標,其次才是優化系統性能,隨著數據規模的增大,RDBMS為了保證嚴格的一致性,只能提供相對較弱的可用性
大多數NoSQL都能提供較高的可用性
標準化 RDBMS已經標準化(SQL)
NoSQL還沒有行業標準,不同的NoSQL資料庫都有自己的查詢語言,很難規範應用程式介面
StoneBraker認為:NoSQL缺乏統一查詢語言,將會拖慢NoSQL發展
技術支持 RDBMS經過幾十年的發展,已經非常成熟,Oracle等大型廠商都可以提供很好的技術支持
NoSQL在技術方面仍然處於起步階段,還不成熟,缺乏有力的技術支持
可維護性 複雜 複雜 RDBMS需要專門的資料庫管理員(DBA)維護
NoSQL資料庫雖然沒有DBMS複雜,也難以維護

總結:

(1)關係資料庫

優勢:以完善的關係代數理論作為基礎,有嚴格的標準,支持事務ACID四性,藉助索引機制可以實現高效的查詢,技術成熟,有專業公司的技術支持。

劣勢:可擴展性較差,無法較好支持海量數據存儲,數據模型過於死板、無法較好支持Web2.0應用,事務機制影響了系統的整體性能等。

(2)NoSQL資料庫

優勢:可以支持超大規模數據存儲,靈活的數據模型可以很好地支持Web2.0應用,具有強大的橫向擴展能力等。

劣勢:缺乏數學理論基礎,複雜查詢性能不高,大都不能實現事務強一致性,很難實現數據完整性,技術尚不成熟,缺乏專業團隊的技術支持,維護較困難等。

關係資料庫和NoSQL資料庫各有優缺點,彼此無法取代

  • 關係資料庫應用場景:電信、銀行等領域的關鍵業務系統,需要保證強事務一致性
  • NoSQL資料庫應用場景:互聯網企業、傳統企業的非關鍵業務(比如數據分析)

採用混合架構:

案例:亞馬遜公司就使用不同類型的資料庫來支撐它的電子商務應用

對於“購物籃”這種臨時性數據,採用鍵值存儲會更加高效; 當前的產品和訂單信息則適合存放在關係資料庫中; 大量的歷史訂單信息則適合保存在類似MongoDB的文檔資料庫中

4、NoSQL的四大類型

NoSQL資料庫雖然數量眾多,但是,歸結起來,典型的NoSQL資料庫通常包括鍵值資料庫、列族資料庫、文檔資料庫和圖形資料庫。

  • 文檔資料庫:MarkLogic、Couchbase、mongoDB
  • 圖形資料庫:Neo4j、InfiniteGraph
  • 鍵值資料庫:redis、Amazon DynamoDB、riak
  • 列族資料庫:HYPERTABLE、accumulo、HBASE、Amazon SimpleDB

1.鍵值資料庫

相關產品 Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached
數據模型 鍵/值對
鍵是一個字元串對象
值可以是任意類型的數據,比如整型、字元型、數組、列表、集合等
典型應用 涉及頻繁讀寫、擁有簡單數據模型的應用
內容緩存,比如會話、配置文件、參數、購物車等
存儲配置和用戶數據信息的移動應用
優點 擴展性好,靈活性好,大量寫操作時性能高
缺點 無法存儲結構化信息,條件查詢效率較低
不適用情形 不是通過鍵而是通過值來查:鍵值資料庫根本沒有通過值查詢的途徑
需要存儲數據之間的關係:在鍵值資料庫中,不能通過兩個
使用者 百度雲資料庫(Redis)、GitHub(Riak)、BestBuy(Riak)、Twitter(Redis和Memcached)、StackOverFlow(Redis)、Instagram(Redis)、Youtube(Memcached)、Wikipedia(Memcached)

鍵值資料庫成為理想的緩衝層解決方案。 Redis有時候會被人們稱為“強化版的Memcached”支持持久化、數據恢復、更多數據類型。

2.列族資料庫

相關產品 BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS
數據模型 列族
典型應用 分散式數據存儲與管理
數據在地理上分佈於多個數據中心的應用程式
可以容忍副本中存在短期不一致情況的應用程式
擁有動態欄位的應用程式
擁有潛在大量數據的應用程式,大到幾百TB的數據
優點 查找速度快,可擴展性強,容易進行分散式擴展,複雜性低
缺點 功能較少,大都不支持強事務一致性
不適用情形 需要ACID事務支持的情形,Cassandra等產品就不適用
使用者 Ebay(Cassandra)、Instagram(Cassandra)、NASA(Cassandra)、Twitter(Cassandra and HBase)、Facebook(HBase)、Yahoo!(HBase)

3.文檔資料庫

“文檔”其實是一個數據記錄,這個記錄能夠對包含的數據類型和內容進行“自我描述”。XML文檔、HTML文檔和JSON文檔就屬於這一類。SequoiaDB就是使用JSON文檔格式的文檔資料庫,它的存儲的數據是這樣的:

{
    "ID" : 1,
    "NAME" : "SequoiaDB",
    "Tel" : {
        "Office" : "123123" , "Mobile" : "132132132"
        }
    "Addr" : "China,GZ"
}
  • 數據是不規則的,每一條記錄包含了所有的有關“SequoiaDB”的信息而沒有任何外部的引用,這條記錄就是“自包含”的
  • 這使得記錄很容易完全移動到其他伺服器,因為這條記錄的所有信息都包含在裡面了,不需要考慮還有信息在別的表沒有一起遷移走
  • 同時,因為在移動過程中,只有被移動的那一條記錄(文檔)需要操作,而不像關係型中每個有關聯的表都需要鎖住來保證一致性,這樣一來ACID的保證就會變得更快速,讀寫的速度也會有很大的提升
相關產品 MongoDB、CouchDB、Terrastore、ThruDB、RavenDB、SisoDB、RaptorDB、CloudKit、Perservere、Jackrabbit
數據模型 鍵/值
值(value)是版本化的文檔
典型應用 存儲、索引並管理面向文檔的數據或者類似的半結構化數據
比如,用於後臺具有大量讀寫操作的網站、使用JSON數據結構的應用、使用嵌套結構等非規範化數據的應用程式
優點 性能好(高併發),靈活性高,複雜性低,數據結構靈活
提供嵌套式文檔功能,將經常查詢的數據存儲在同一個文檔中
既可以根據鍵來構建索引,也可以根據內容構建索引
缺點 缺乏統一的查詢語法
不適用情形 在不同的文檔上添加事務。文檔資料庫並不支持文檔間的事務,如果對這方面有需求則不應該選用這個解決方案
使用者 百度雲資料庫(MongoDB)、SAP(MongoDB)、Codecademy(MongoDB)、Foursquare(MongoDB)、NBC News(RavenDB)

4.圖形資料庫

相關產品 Neo4J、OrientDB、InfoGrid、Infinite Graph、GraphDB
數據模型 圖結構
典型應用 專門用於處理具有高度相互關聯關係的數據,比較適合於社交網路、模式識別、依賴分析、推薦系統以及路徑尋找等問題
優點 靈活性高,支持複雜的圖形演算法,可用於構件複雜的關係圖譜
缺點 複雜性高,只能支持一定的數據規模
使用者 Adobe(Neo4J)、Cisco(Neo4J)、T-Mobile(Neo4J)

不同類型資料庫比較分析

  • MySQL產生年代較早,而且隨著LAMP大潮得以成熟。儘管其沒有什麼大的改進,但是新興的互聯網使用的最多的資料庫
  • MongoDB是個新生事物,提供更靈活的數據模型、非同步提交、地理位置索引等五花十色的功能
  • HBase是個“仗勢欺人”的大象兵。依仗著Hadoop的生態環境,可以有很好的擴展性。但是就像象兵一樣,使用者需要養一頭大象(Hadoop),才能驅使他
  • Redis<是鍵值存儲的代表,功能最簡單。提供隨機數據存儲。就像一根棒子一樣,沒有多餘的構造。但是也正是因此,它的伸縮性特別好。就像悟空手裡的金箍棒,大可捅破天,小能縮成針。

5、NoSQL的三大基石

CAP、最終一致性、BASE

CAP指的是:

  • C(Consistency):一致性,是指任何一個讀操作總是能夠讀到之前完成的寫操作的結果,也就是在分散式環境中,多點的數據是一致的,或者說,所有節點在同一時間具有相同的數據;
  • A(Availability):可用性,是指快速獲取數據,可以在確定的時間內返回操作結果,保證每個請求不管成功或者失敗都有響應;
  • P(Tolerance of Network Partition):分區容忍性,是指當出現網路分區的情況時(即系統中的一部分節點無法和其他節點進行通行),分離的系統也能夠正常運行,也就是說,系統中任意信息的丟失或失敗不會影響系統

CAP理論告訴我們,一個分散式系統不可能同時滿足一致性、可用性和分區容忍性這三個需求,最多只能同時滿足其中兩個,正所謂“魚和熊掌不可兼得”。

當處理CAP的問題時,可以有幾個明顯的選擇:

1.CA:也就是強調一致性(C)和可用性(A),放棄分區容忍性(P),最簡單的做法是把所有與事務相關的內容都放到同一臺機器上。很顯然,這種做法會嚴重影響系統的可擴展性。傳統的關係型資料庫(MySQL、SQL Server和PostgreSQL),都採用了這種設計原則,因此,擴展性都比較差。

2.CP:也就是強調一致性(C)和分區容忍性(P),放棄可用性(A),當出現網路分區的情況時,受影響的服務需要等待數據一致,因此在等待期間就無法對外提供服務(Neo4J、Bigtable、MongoDB、Hbase、Hypertable、Redis)

3.AP:也就是強調可用性(A)和分區容忍性(P),放棄一致性(C),允許系統返回不一致的數據(Dynamo、Cassandar、Voldemort、CouchDB、Riak) BASE(Basically Availble,Soft-state,Eventual consistency)

一個資料庫事務具有ACID四性:

ACIDBASE說明
原子性(Atomicity) 基本可用(Basically Available) 指事務必須是原子工作單元,對於其數據修改,要麼全都執行,要麼全都不執行
一致性(Consistency) 軟狀態/柔性事務(Soft state) 指事務在完成時,必須使所有的數據都保持一致狀態
隔離性(Isolation) 最終一致性(Eventual consistency) 指由併發事務所做的修改必須與任何其它併發事務所做的修改隔離
持久性(Durable)   指事務完成之後,它對於系統的影響是永久性的,該修改即使出現致命的系統故障也將一直保持

BASE的基本含義是基本可用(Basically Availble)軟狀態(Soft-state)和最終一致性(Eventual consistency):

基本可用:

基本可用,是指一個分散式系統的一部分發生問題變得不可用時,其他部分仍然可以正常使用,也就是允許分區失敗的情形出現

軟狀態:

“軟狀態(soft-state)”是與“硬狀態(hard-state)”相對應的一種提法。資料庫保存的數據是“硬狀態”時,可以保證數據一致性,即保證數據一直是正確的。“軟狀態”是指狀態可以有一段時間不同步,具有一定滯後性

最終一致性:

一致性的類型包括強一致性和弱一致性,二者的主要區別在於高併發的數據訪問操作下,後續操作是否能夠獲取最新的數據。對於強一致性而言,當執行完一次更新操作後,後續的其他讀操作就可以保證讀到更新後的最新數據;反之,如果不能保證後續訪問讀到的都是更新後的最新數據,那麼就是弱一致性。而最終一致性只不過是弱一致性的一種特例,允許後續的訪問操作可以暫時讀不到更新後的數據,但是經過一段時間之後,必須最終讀到更新後的數據。

最常見的實現最終一致性的系統是DNS(功能變數名稱系統)。一個功能變數名稱更新操作根據配置形式被分發出去,並結合有過期機制的緩存;最終所有的客戶端可以看到最新的值。

最終一致性根據更新數據後各進程訪問到數據的時間和方式的不同,又可以區分為:

 因果一致性:如果進程A通知進程B它已更新了一個數據項,那麼進程B的後續訪問將獲得A寫入的最新值。而與進程A無因果關係的進程C的訪問,仍然遵守一般的最終一致性規則

 “讀己之所寫”一致性:可以視為因果一致性的一個特例。當進程A自己執行一個更新操作之後,它自己總是可以訪問到更新過的值,絕不會看到舊值

 單調讀一致性:如果進程已經看到過數據對象的某個值,那麼任何後續訪問都不會返回在那個值之前的值

 會話一致性:它把訪問數據系統的進程放到會話(session)的上下文中,只要會話還存在,系統就保證“讀己之所寫”一致性。如果由於某些失敗情形令會話終止,就要建立新的會話,而且系統保證不會延續到新的會話

 單調寫一致性:系統保證來自同一個進程的寫操作順序執行。系統必須保證這種程式的一致性,否則就非常難以編程了

如何實現各種類型的一致性?

對於分散式數據系統:

  • N : 數據複製的份數
  • W : 更新數據是需要保證寫完成的節點數
  • R : 讀取數據的時候需要讀取的節點數

如果 W+R > N ,寫的節點和讀的節點重疊,則是強一致性,例如對於典型的一主一備同步複製的關係型資料庫,N=2,W=2,R=1,則不管讀的是主庫還是備庫的數據,都是一致的。一般設定是 R+W = N+1 ,這是保證強一致性的最小設定

如果 W+R <= N,則是弱一致性。例如對於一主一備非同步複製的關係型資料庫,N=2, W=1,R=1,則如果讀的是備庫,就可以無法讀取主庫已經更新過的數據,所以是弱一致性。

對於分散式系統,為了保證高可用性,一般設置N >= 3。不同的N,W,R組合,是在可用性和一致性之間取一個平衡,以適應不同的應用場景。

如果N=W,R=1,任何一個寫節點失效,都會導致寫失敗,因此可用性會降低,但是由於數據分佈的N個節點是同步寫入的,因此可以保證強一致性。

實例:HBASE是藉助其底層的HDFS來實現其數據冗餘備份的。HDFS採用的就是強一致性保證。在數據沒有完全同步到N個節點前,寫操作是不會返回成功的。也就是說它的W=N,而讀操作只需要讀到一個值即可,也就是說它R=1。

像Voldemort,Cassandra和Riak這些類Dynamo的系統,通常都允許用戶按需要設置N,R,W三個值,即使是設置成W+R <= N也是可以的。也就是說他允許用戶在強一致性和最終一致性之間自由選擇。而在用戶選擇了最終一致性,或者是W < N的強一致性時,則總會出現一段“各個節點數據不同步導致系統處理不一致的時間”。為了提供最終一致性的支持,這些系統會提供一些工具來使數據更新被最終同步到所有的相關節點。

6、從NoSQL到NewSQL資料庫

針對不同的應用採用不同的資料庫,使用OldSQL支持事務處理,使用NoSQL支持互聯網應用,NewSQL同時具備關係型資料庫和NoSQL資料庫的優點。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 安裝Redis 下載redis安裝包http://download.redis.io/redis-stable.tar.gz 解壓安裝包tar xzf redis-stable.tar.gz 安裝cd redis-stable/srcmake 或者直接從網上下載redis的壓縮包,然後解壓,再用ma ...
  • Redis的7個應用場景 一:緩存——熱數據 熱點數據(經常會被查詢,但是不經常被修改或者刪除的數據),首選是使用redis緩存,畢竟強大到冒泡的QPS和極強的穩定性不是所有類似工具都有的,而且相比於memcached還提供了豐富的數據類型可以使用,另外,記憶體中的數據也提供了AOF和RDB等持久化機 ...
  • db.getCollection('product').update({status:"offline"},{$set:{status:"online"}},false,true) update更新,把所有status為offline的都改為online,註意加引號 db.collection.up... ...
  • MySQL資料庫的性能的影響分析及其優化 MySQL資料庫的性能的影響 一. 伺服器的硬體的限制 二. 伺服器所使用的操作系統 三. 伺服器的所配置的參數設置不同 四. 資料庫存儲引擎的選擇 五. 資料庫的參數配置的不同 六. (重點)資料庫的結構的設計和SQL語句 1). 伺服器的配置和設置(cp ...
  • 避免自己遺忘,在這裡做個筆記: SET XACT_ABORT ON:強制事務回滾,如果不加這句的話事務有可能回滾失敗。 ...
  • 先看一下Redis是一個什麼東西。官方簡介解釋到:Redis是一個基於BSD開源的項目,是一個把結構化的數據放在記憶體中的一個存儲系統,你可以把它作為資料庫,緩存和消息中間件來使用。同時支持strings,lists,hashes,sets,sorted sets,bitmaps,hyperloglo ...
  • create database test default charset utf8 collate utf8_general_ci; ...
  • 最近在工作中接到了一個需求,要求統計當月以10天為一個周期,每個周期的數據彙總信息。假設有一張表如下: 表table_test中 ID AMOUNT CREATE_DATE 1 50 2017-01-01 2 50 2017-01-09 3 50 2017-01-11 4 50 2017-01-19 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...