MySQL存儲引擎,優化,事務

来源:http://www.cnblogs.com/yangmei123/archive/2016/04/10/5375723.html
-Advertisement-
Play Games

1唯一約束unique和主鍵key的區別? 1、什麼是數據的存儲引擎? 存儲引擎就是如何存儲數據、如何為存儲的數據建立索引和如何更新、查詢數據等技術的實現方法。因為在關係資料庫中數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作該表的類型),在Oracle和SQL Server ...


1唯一約束unique和主鍵key的區別?    

1、什麼是數據的存儲引擎?

      存儲引擎就是如何存儲數據、如何為存儲的數據建立索引和如何更新、查詢數據等技術的實現方法。因為在關係資料庫中數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作該表的類型),在Oracle和SQL Server等資料庫中只有一種存儲引擎,所有數據存儲管理機制都是一樣的。而MySQL資料庫提供了多種存儲引擎。用戶可以根據不同的需求為數據表選擇不同的存儲引擎,用戶也可以根據自己的需求編寫自己的存儲引擎。 MySql中有哪些存儲引擎?
     1 MyISAM:這種引擎是mysql最早提供的。這種引擎又可以分為靜態MyISAM、動態MyISAM 和壓縮MyISAM三種:
    靜態MyISAM:如果數據表中的各數據列的長度都是預先固定好的,伺服器將自動選擇這種表類型。因為數據表中每一條記錄所占用的空間都是一樣的,所以這種表存取和更新的效率非常高。當數據受損時,恢復工作也比較容易做。
    動態MyISAM:如果數據表中出現varchar、xxxtext或xxxBLOB欄位時,伺服器將自動選擇這種表類型。相對於靜態MyISAM,這種表存儲空間比較小,但由於每條記錄的長度不一,所以多次修改數據後,數據表中的數據就可能離散的存儲在記憶體中,進而導致執行效率下降。同時,記憶體中也可能會出現很多碎片。因此,這種類型的表要經常用optimize table 命令或優化工具來進行碎片整理。
    壓縮MyISAM:以上說到的兩種類型的表都可以用myisamchk工具壓縮。這種類型的表進一步減小了占用的存儲,但是這種表壓縮之後不能再被修改。另外,因為是壓縮數據,所以這種表在讀取的時候要先時行解壓縮。
    但是,不管是何種MyISAM表,目前它都不支持事務,行級鎖和外鍵約束的功能。
    2 MyISAM Merge引擎:這種類型是MyISAM類型的一種變種。合併表是將幾個相同的MyISAM表合併為一個虛表。常應用於日誌和數據倉庫。
    3 InnoDB:InnoDB表類型可以看作是對MyISAM的進一步更新產品,它提供了事務、行級鎖機制和外鍵約束的功能。
    4 memory(heap):這種類型的數據表只存在於記憶體中。它使用散列索引,所以數據的存取速度非常快。因為是存在於記憶體中,所以這種類型常應用於臨時表中。
    5 archive:這種類型只支持select 和 insert語句,而且不支持索引。常應用於日誌記錄和聚合分析方面。
2、各種存儲引擎特性比較:

在實際工作中,選擇一個合適的存儲引擎是一個很複雜的問題。每種存儲引擎都有各自的優勢,不能籠統的說誰比誰更好。下麵將詳解不同環境經常用到的存儲引擎和針對各個存儲引擎的特點進行對比,給出不同的選擇建議。

  • InnoDB存儲引擎

InnoDB是Mysql資料庫的一種存儲引擎。InnoDB給Mysql的表提供了 事務、回滾、崩潰修複能力、多版本併發控制的事務安全、間隙鎖(可以有效的防止幻讀的出現)、支持輔助索引、聚簇索引、自適應hash索引、支持熱備、行級鎖。還有InnoDB是Mysql上唯一一個提供了外鍵約束的引擎。

InnoDB存儲引擎中,創建的表的表結構是單獨存儲的並且存儲在.frm文件中。數據和索引存儲在一起的並且存儲在表空間中。但是預設情況下mysql會將資料庫的所有InnoDB表存儲在一個表空間中的。其實這種方式管理起來非常的不方便而且還不支持高級功能所以建議每個表存儲為一個表空間實現方式為:使用伺服器變數innodb_file_per_table = 1。

如果需要頻繁的進行更新、刪除操作的資料庫也可選擇InnoDB存儲引擎。因為該存儲引擎可以實現事務提交和回滾。

  • MyISAM存儲引擎

MyISAM存儲引擎是Mysql中常見的存儲引擎,MyISAM存儲引擎是基於ISAM存儲引擎發展起來的。MyISAM支持全文索引、壓縮存放、空間索引(空間函數)、表級鎖、延遲更新索引鍵。但是MyISAM不支持事務、行級鎖、更無法忍受的是崩潰後不能保證完全恢復(只能手動修複)。

MyISAM存儲引擎的表存儲成3個文件。文件的名字和表的名字相同。擴展名包含frm、MYD、MYI。其中frm為擴展名的文件存儲表的結構;MYD為擴展名的文件存儲數據,其是MYData的縮寫;MYI為擴展名的文件存儲索引,其為MYIndex的縮寫。

MyISAM存儲引擎的插入數據很快,空間和記憶體使用比較低。如果表主要是用於插入新記錄和讀出記錄,那麼選擇MyISAM存儲引擎能夠實現處理的高效率。如果應用的完整性、併發性要求很低,也可以選擇MyISAM存儲引擎。

  • ARCHIVE

ARCHIVE,見名之意可看出是歸檔,所以歸檔之後很多的高級功能就不再支持了僅支持插入(insert)和查詢(select)兩種功能, ARCHIVE存儲引擎之前還不支持索引(在Mysql5.5以後開始支持索引了),但是它擁有很好的壓縮機制。通常用於做倉庫使用。

ARCHIVE存儲引擎適用於存儲日誌信息或其他按時間序列實現的數據採集類的應用場景中。

  • CSV

CSV是將數據文件保存為CSV格式的的文件的,可以方便的導入到其他資料庫中去(例如:excel表格,SQLserver等等),由此需要在資料庫間自由共用數據時才偶爾建議使用此存儲引擎。並且它也不支持索引;個人認為僅適用於數據交換。

  • BLACKHOLE

BLACKHOLE叫做黑洞,也就是說沒有存儲機制,任何數據都會被丟棄,但是會記錄二進位日誌。一般在Mysql複製(中繼伺服器)中經常用到,這個在Mysql複製博客中將詳細介紹,敬請關註。

  • FEDERATED

FEDERATED可以實現跨伺服器整理表,簡單說就是它可以訪問遠程伺服器上數據的存儲引擎,所以說它不再本地創建數據只會自動的建立一個連接到其他伺服器上鏈接,有點類似於代理的功能,預設都是禁用的。

  • MEMORY存儲引擎

MEMORY存儲引擎是Mysql中的一類特殊的存儲引擎。其使用存儲在記憶體中的記憶體來創建表,而且所有數據保存在記憶體中。數據安全性很低,但是查找和插入速度很快。如果記憶體出現異常就會影響到數據的完整性,如果重啟或關機,表中的所有數據就會丟失,因此基於MEMORY存儲引擎的表的生命周期很短,一般都是一次性的。適用於某些特殊場景像查找和映射,緩存周期性的聚合數據等等。

  • MRG_MYISAM

MRG_MYISAM存儲引擎是合併MyISAM表的,就是將多個MyISAM合併為一個(在用戶看來是一個進行工作,其實是多個底層物理文件在運行工作)。


來源: http://blog.jobbole.com/94385/

鎖定

  資料庫引擎中的鎖定功能決定瞭如何管理信息的訪問和更新。當資料庫中的一個對象為信息更新鎖定了,在更新完成之前,其它處理不能修改這個數據(在某些情況下還不允許讀這種數據)。

  鎖定不僅影響許多不同的應用程式如何更新資料庫中的信息,而且還影響對那個數據的查詢。這是因為查詢可能要訪問正在被修改或者更新的數據。總的來說,這種延遲是很小的。大多數鎖定機制主要是為了防止多個處理更新同一個數據。由於向數據中插入信息和更新信息這兩種情況都需要鎖定,你可以想象,多個應用程式使用同一個資料庫可能會有很大的影響。

  不同的存儲引擎在不同的對象級別支持鎖定,而且這些級別將影響可以同時訪問的信息。得到支持的級別有三種:表鎖定、塊鎖定和行鎖定。支持最多的是表鎖定,這種鎖定是在MyISAM中提供的。在數據更新時,它鎖定了整個表。這就防止了許多應用程式同時更新一個具體的表。這對應用很多的多用戶資料庫有很大的影響,因為它延遲了更新的過程。

  頁級鎖定使用Berkeley DB引擎,並且根據上傳的信息頁(8KB)鎖定數據。當在資料庫的很多地方進行更新的時候,這種鎖定不會出現什麼問題。但是,由於增加幾行信息就要鎖定數據結構的最後8KB,當需要增加大量的行,也別是大量的小型數據,就會帶來問題。

  行級鎖定提供了最佳的並行訪問功能,一個表中只有一行數據被鎖定。這就意味著很多應用程式能夠更新同一個表中的不同行的數據,而不會引起鎖定的問題。只有InnoDB存儲引擎支持行級鎖定。

來源: http://blog.csdn.net/koudaidai/article/details/7495738

 

*修改存儲引擎,可以用命令Alter table tableName engine =engineName

假如,若需要將表user的存儲引擎修改為archive類型,則可使用命令alter table user engine=archive。

*創建資料庫表時設置存儲存儲引擎的基本語法是:
Create table tableName(
columnName(列名1)  type(數據類型)  attri(屬性設置),
columnName(列名2)  type(數據類型)  attri(屬性設置),
……..) engine = engineName

事物:

 

何為資料庫事務 “一榮俱榮,一損俱損”這句話很能體現事務的思想,很多複雜的事物要分步進行,但它們組成一個整體,要麼整體生效,要麼整體失效。這種思想反映到資料庫上,就是多個SQL語句,要麼所有執行成功,要麼所有執行失敗。 資料庫事務有嚴格的定義,它必須同時滿足四個特性:原子性(Atomic)、一致性(Consistency)、隔離性(Isolation)和持久性(Durabiliy),簡稱為ACID。下麵是對每個特性的說明: 1. 原子性:表示組成一個事務的多個資料庫操作是一個不可分隔的原子單元,只有所有的操作執行成功,整個事務才提交,事務中任何一個資料庫操作失敗,已經執行的任何操作都必須撤銷,讓資料庫返回到初始狀態; 2. 一致性:事務操作成功後,資料庫所處的狀態和它的業務規則是一致的,即數據不會被破壞。如從A賬戶轉賬100元到B賬戶,不管操作成功與否,A和B的存款總額是不變的; 3. 隔離性:在併發數據操作時,不同的事務擁有各自數據空間,它們的操作不會對對方產生干擾。準確的說,並非要求做到完全無干擾,資料庫規定了多種事務隔離級別,不同隔離級別對應不同的干擾程度,隔離級別越高,數據一致性越好,但併發性越弱; 4. 持久性:一旦事務提交成功後,事務中所有的數據操作都必須被持久化到資料庫中,即使提交事務後,資料庫馬上崩潰,在資料庫重啟時,也必須能保證能夠通過某種機制恢複數據。
在這些事務特性中,數據“一致性”是最終目標,其它的特性都是為達到這個目標的措施、要求或手段。 資料庫管理系統一般採用重執行日誌保證原子性、一致性和持久性,重執行日誌記錄了資料庫變化的每一個動作,資料庫在一個事務中執行一部分操作後發生錯誤退出,資料庫即可以根據重執行日誌撤銷已經執行的操作。此外,對於已經提交的事務,即使資料庫崩潰,在重啟資料庫時也能夠根據日誌對尚未持久化的數據進行相應的重執行操作。
和Java程式採用對象鎖機制進行線程同步類似,資料庫管理系統採用資料庫鎖機制保證事務的隔離性。當多個事務試圖對相同的數據進行操作時,只有持有鎖的事務才能操作數據,直到前一個事務完成後,後面的事務才有機會對數據進行操作。Oracle資料庫還使用了數據版本的機制,在回滾段為數據的每個變化都保存一個版本,使數據的更改不影響數據的讀取。

數據併發的問題     一個資料庫可能擁有多個訪問客戶端,這些客戶端都可以併發方式訪問資料庫。資料庫中的相同數據可能同時被多個事務訪問,如果沒有採取必要的隔離措施,就會導致各種併發問題,破壞數據的完整性。這些問題可以歸結為5類,包括3類數據讀問題(臟讀、幻象讀和不可重覆讀)以及2類數據更新問題(第一類丟失更新和第二類丟失更新)。下麵,我們分別通過實例講解引發問題的場景。

臟讀(dirty read)     在講解臟讀前,我們先講一個笑話:一個有結巴的人在飲料店櫃臺前轉悠,老闆很熱情地迎上來:“喝一瓶?”,結巴連忙說:“我…喝…喝…”,老闆麻利地打開易拉罐遞給結巴,結巴終於憋出了他的那句話:“我…喝…喝…喝不起啊!”。在這個笑話中,飲料店老闆就對結巴進行了臟讀。 A事務讀取B事務尚未提交的更改數據,併在這個數據的基礎上操作。如果恰巧B事務回滾,那麼A事務讀到的數據根本是不被承認的。來看取款事務和轉賬事務併發時引發的臟讀場景:

時間 轉賬事務A 取款事務B
T1   開始事務
T2 開始事務  
T3       查詢賬戶餘額為1000元    
T4          取出500元把餘額改為500元
T5 查詢賬戶餘額為500元(臟讀)  
T6   撤銷事務餘額恢復為1000元
T7 匯入100元把餘額改為600元  
T8 提交事務  

在這個場景中,B希望取款500元而後又撤銷了動作,而A往相同的賬戶中轉賬100元,就因為A事務讀取了B事務尚未提交的數據,因而造成賬戶白白丟失了500元。在Oracle資料庫中,不會發生臟讀的情況。

不可重覆讀(unrepeatable read)    不可重覆讀是指A事務讀取了B事務已經提交的更改數據。假設A在取款事務的過程中,B往該賬戶轉賬100元,A兩次讀取賬戶的餘額發生不一致:

 

時間 取款事務A 轉賬事務B
T1   開始事務
T2 開始事務                           
T3                                查詢賬戶餘額為1000元     
T4 查詢賬戶餘額為1000元                           
T5                    取出100元把餘額改為900元
T6   提交事務                  
T7 查詢賬戶餘額為900元(和T4讀取的不一致)  

在同一事務中,T4時間點和T7時間點讀取賬戶存款餘額不一樣。

幻象讀(phantom read)     A事務讀取B事務提交的新增數據,這時A事務將出現幻象讀的問題。幻象讀一般發生在計算統計數據的事務中,舉一個例子,假設銀行系統在同一個事務中,兩次統計存款賬戶的總金額,在兩次統計過程中,剛好新增了一個存款賬戶,並存入100元,這時,兩次統計的總金額將不一致:   如果新增數據剛好滿足事務的查詢條件,這個新數據就進入了事務的視野,因而產生了兩個統計不一致的情況。

幻象讀和不可重覆讀是兩個容易混淆的概念,前者是指讀到了其它已經提交事務的新增數據,而後者是指讀到了已經提交事務的更改數據(更改或刪除),為了避免這兩種情況,採取的對策是不同的,防止讀取到更改數據,只需要對操作的數據添加行級鎖,阻止操作中的數據發生變化,而防止讀取到新增數據,則往往需要添加表級鎖——將整個表鎖定,防止新增數據(Oracle使用多版本數據的方式實現)。 第一類丟失更新      A事務撤銷時,把已經提交的B事務的更新數據覆蓋了。這種錯誤可能造成很嚴重的問題,通過下麵的賬戶取款轉賬就可以看出來:      

時間 取款事務A 轉賬事務B
T1 開始事務  
T2   開始事務
T3 查詢賬戶餘額為1000元      
T4   查詢賬戶餘額為1000元
T5   匯入100元把餘額改為1100元
T6   提交事務
T7 取出100元把餘額改為900元  
T8 撤銷事務  
T9 餘額恢復為1000元(丟失更新)  

A事務在撤銷時,“不小心”將B事務已經轉入賬戶的金額給抹去了。

第二類丟失更新  A事務覆蓋B事務已經提交的數據,造成B事務所做操作丟失:  

時間 轉賬事務A 取款事務B
T1   開始事務
T2 開始事務                          
T3                 查詢賬戶餘額為1000元    
T4 查詢賬戶餘額為1000元                          
T5   取出100元把餘額改為900元
T6   提交事務           
T7 匯入100元  
T8 提交事務  
T9 把餘額改為1100元(丟失更新)  

    上面的例子里由於支票轉賬事務覆蓋了取款事務對存款餘額所做的更新,導致銀行最後損失了100元,相反如果轉賬事務先提交,那麼用戶賬戶將損失100元。

資料庫鎖機制      數據併發會引發很多問題,在一些場合下有些問題是允許的,但在另外一些場合下可能卻是致命的。資料庫通過鎖的機制解決併發訪問的問題,雖然不同的資料庫在實現細節上存在差別,但原理基本上是一樣的。      按鎖定的對象的不同,一般可以分為表鎖定和行鎖定,前者對整個表進行鎖定,而後者對錶中特定行進行鎖定。從併發事務鎖定的關係上看,可以分為共用鎖定和獨占鎖定。共用鎖定會防止獨占鎖定,但允許其它的共用鎖定。而獨占鎖定既防止其它的獨占鎖定,也防止其它的共用鎖定。為了更改數據,資料庫必須在進行更改的行上施加行獨占鎖定,INSERT、UPDATE、DELETE和SELECT FOR UPDATE語句都會隱式採用必要的行鎖定。下麵我們介紹一下ORACLE資料庫常用的5種鎖定:  行共用鎖定:一般通過SELECT FOR UPDATE語句隱式獲得行共用鎖定,在Oracle中你也可以通過LOCK TABLE IN ROW SHARE MODE語句顯式獲得行共用鎖定。行共用鎖定並不防止對數據行進行更改的操作,但是可以防止其它會話獲取獨占性數據表鎖定。允許進行多個併發的行共用和行獨占性鎖定,還允許進行數據表的共用或者採用共用行獨占鎖定;  行獨占鎖定:通過一條INSERT、UPDATE或DELETE語句隱式獲取,或者通過一條LOCK TABLE IN ROW EXCLUSIVE MODE語句顯式獲取。這個鎖定可以防止其它會話獲取一個共用鎖定、共用行獨占鎖定或獨占鎖定;  表共用鎖定:通過LOCK TABLE IN SHARE MODE語句顯式獲得。這種鎖定可以防止其它會話獲取行獨占鎖定(INSERT、UPDATE或DELETE),或者防止其它表共用行獨占鎖定或表獨占鎖定,它允許在表中擁有多個行共用和表共用鎖定。該鎖定可以讓會話具有對錶事務級一致性訪問,因為其它會話在你提交或者回溯該事務並釋放對該表的鎖定之前不能更改這個被鎖定的表;  表共用行獨占:通過LOCK TABLE IN SHARE ROW EXCLUSIVE MODE語句顯式獲得。這種鎖定可以防止其它會話獲取一個表共用、行獨占或者表獨占鎖定,它允許其它行共用鎖定。這種鎖定類似於表共用鎖定,只是一次只能對一個表放置一個表共用行獨占鎖定。如果A會話擁有該鎖定,則B會話可以執行SELECT FOR UPDATE操作,但如果B會話試圖更新選擇的行,則需要等待;  l 表獨占:通過LOCK TABLE IN EXCLUSIVE MODE顯式獲得。這個鎖定防止其它會話對該表的任何其它鎖定。 
事務隔離級別      儘管資料庫為用戶提供了鎖的DML操作方式,但直接使用鎖管理是非常麻煩的,因此資料庫為用戶提供了自動鎖機制。只要用戶指定會話的事務隔離級別,資料庫就會分析事務中的SQL語句,然後自動為事務操作的數據資源添加上適合的鎖。此外資料庫還會維護這些鎖,當一個資源上的鎖數目太多時,自動進行鎖升級以提高系統的運行性能,而這一過程對用戶來說完全是透明的。      ANSI/ISO SQL 92標准定義了4個等級的事務隔離級別,在相同數據環境下,使用相同的輸入,執行相同的工作,根據不同的隔離級別,可以導致不同的結果。不同事務隔離級別能夠解決的數據併發問題的能力是不同的。          表 1 事務隔離級別對併發問題的解決情況 

隔離級別 臟讀 不可 重覆讀 幻象讀 第一類丟失更新 第二類丟失更新
READ UNCOMMITED 允許 允許 允許 不允許 允許
READ COMMITTED 不允許 允許 允許 不允許 允許
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一章、引言 1.5 面向對象的程式設計常用概念 對象 (名詞):是指“事物”在程式設計語言中的表現形式。 這裡的事物可以是任何東西,我們可以看到它們具有某些明確特征,能執行某些動作。 這些對象特征就叫做屬性(形容詞),動作稱之為方法(動詞)。 類: 實際上就是對象的設計藍圖或製作配方。類更多的是一 ...
  • Atitit.跨語言異常轉換機制 java c# php到js的異常轉換 1. bizEx 直接抓取,然後js catchEX1 2. Chkec runtimeEx1 3. Other異常。。Js convet 2 js err,then throw ...2 1. bizEx 直接抓取,然後js ...
  • atitit.React 優缺點 相比angular react是最靠譜的web ui組件化方案了 1. React的組件化才是web ui部件的正確方向1 1.1. 組件化集成html ,css,js自我包含一體化,方便復用。1 1.2. 相比angular。Js方便好用1 2. React的問題 ...
  • 一、 數據定義語言(ddl) 數據定義語言ddl(data definition language)用於改變資料庫結構,包括創建、更改和刪除資料庫對象。 用於操縱表結構的數據定義語言命令有: create table alter table truncate table drop table eg、 ...
  • mysql的性能優化無法一蹴而就,必須一步一步慢慢來,從各個方面進行優化,最終性能就會有大的提升。 Mysql資料庫的優化技術 對mysql優化是一個綜合性的技術,主要包括 表的設計合理化(符合3NF) 添加適當索引(index) [四種: 普通索引、主鍵索引、唯一索引unique、全文索引] 分表 ...
  • 在我們使用查詢語句的時候,經常要返回前幾條或者中間某幾行數據,這個時候怎麼辦呢?不用擔心,Mysql已經為我們提供了這樣一個功能。 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset SELECT * FROM table LI ...
  • 今晚繼續進行Sql效能問題的分享,今天主要是一些具體的sql優化方法和思路分享,若看過後你也有其他想法,歡迎一起探討,好了,進入今天的主題。 針對性地對一些耗資源嚴重的具體應用進行優化 出現效能問題時,首先要做的是什麼?這個問題我問過不少同事,有人說憑經驗對出問題的sql進行優化,如我們一般說的要合 ...
  • 今天本想將之前的一個資料庫easy.sql用圖形化工具Navicat導入的,開始是用“運行SQL文件”導入,結果是“queries successfully”啥的,去查是否導表成功,一看並沒有。 結果失望之餘,把那個資料庫和伺服器全刪了,再建一個和要導入的資料庫同名的資料庫名,意外的是重啟後資料庫就 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...