存儲引擎簡介

来源:https://www.cnblogs.com/1naonao/archive/2019/11/13/11853190.html
-Advertisement-
Play Games

一.存儲引擎簡介 1、文件系統: 1.1 操作系統組織和存取數據的一種機制。 1.2 文件系統是一種軟體。 2、文件系統類型:ext2 3 4 ,xfs 數據(centos6 ext 4 centos7 xfs) 2.1 不管使用什麼文件系統,數據內容不會變化 2.2 不同的是,存儲空間、大小、速度 ...


一.存儲引擎簡介

  • 1、文件系統:
    • 1.1 操作系統組織和存取數據的一種機制。
    • 1.2 文件系統是一種軟體。
  • 2、文件系統類型:ext2 3 4 ,xfs 數據(centos6 ext 4 centos7 xfs)
    • 2.1 不管使用什麼文件系統,數據內容不會變化
    • 2.2 不同的是,存儲空間、大小、速度。
  • 3、MySQL引擎:
    • 3.1 可以理解為,MySQL的“文件系統”,只不過功能更加強大。
  • 4、MySQL引擎功能:
    • 4.1 除了可以提供基本的存取功能,還有更多功能事務功能、鎖定、備份和恢復、優化以及特殊功能

總之,存儲引擎的各項特性就是為了保障資料庫的安全和性能設計結構。

二.MySQL自帶的存儲引擎類型

MySQL 提供以下存儲引擎:
01)InnoDB
02)MyISAM
03)MEMORY
04)ARCHIVE
05)FEDERATED
06)EXAMPLE
07)BLACKHOLE
08)MERGE
09)NDBCLUSTER
10)CSV


還可以使用第三方存儲引擎:
01)MySQL當中插件式的存儲引擎類型
02)MySQL的兩個分支
03)perconaDB
04)mariaDB

#查看當前MySQL支持的存儲引擎類型
mysql> show engines
#查看innodb的表有哪些
mysql> select table_schema,table_name,engine from information_schema.tables where engine='innodb';
#查看myisam的表有哪些
mysql> select table_schema,table_name,engine from information_schema.tables where engine='myisam';
  • 1、innodb和myisam的區別

物理上的區別:

#進入mysql目錄
[root@db01~l]# cd /application/mysql/data/mysql
#查看所有user的文件
[root@db01 mysql]# ll user.*
-rw-rw---- 1 mysql mysql 10684 Mar  6  2017 user.frm
-rw-rw---- 1 mysql mysql   960 Aug 14 01:15 user.MYD
-rw-rw---- 1 mysql mysql  2048 Aug 14 01:15 user.MYI
#進入word目錄
[root@db01 world]# cd /application/mysql/data/world/
#查看所有city的文件
[root@db01 world]# ll city.*
-rw-rw---- 1 mysql mysql   8710 Aug 14 16:23 city.frm
-rw-rw---- 1 mysql mysql 688128 Aug 14 16:23 city.ibd
  • 2.innodb存儲引擎的簡介

在MySQL5.5版本之後,預設的存儲引擎,提供高可靠性和高性能。

優點:
01)事務安全(遵從 ACID)
02)MVCC(Multi-Versioning Concurrency Control,多版本併發控制)
03)InnoDB 行級別鎖定
04)Oracle 樣式一致非鎖定讀取
05)表數據進行整理來優化基於主鍵的查詢
06)支持外鍵引用完整性約束
07)大型數據捲上的最大性能
08)將對錶的查詢與不同存儲引擎混合
09)出現故障後快速自動恢復(csr)
10)用於在記憶體中緩存數據和索引的緩衝區池

innodb核心特性

重點:
MVCC
事務
行級鎖
熱備份
Crash Safe Recovery(自動故障恢復)

  • 3.查看存儲引擎

1)使用 SELECT 確認會話存儲引擎

#查詢預設存儲引擎
SELECT @@default_storage_engine;

2)使用 SHOW 確認每個表的存儲引擎

#查看表的存儲引擎
SHOW CREATE TABLE City\G 
SHOW TABLE STATUS LIKE 'CountryLanguage'\G

3)使用 INFORMATION_SCHEMA 確認每個表的存儲引擎

#查看表的存儲引擎
mysql> select table_schema,table_name,engine from information_schema.tables \G
SHOW CREATE TABLE City\G 
  • 4.存儲引擎的設置

1)在啟動配置文件中設置伺服器存儲引擎

#在配置文件的[mysqld]標簽下添加
[mysqld]
default-storage-engine=<Storage Engine>

2)使用 SET 命令為當前客戶機會話設置

#在MySQL命令行中臨時設置
SET @@storage_engine=<Storage Engine>

(3)在 CREATE TABLE 語句指定

#建表的時候指定存儲引擎
CREATE TABLE t (i INT) ENGINE = <Storage Engine>;

img

三.真實企業案例

項目背景:

公司原有的架構:一個展示型的網站,LAMT,MySQL5.1.77版本(MYISAM),50M數據量。

小問題不斷:

  • 1、表級鎖:對錶中任意一行數據修改類操作時,整個表都會鎖定,對其他行的操作都不能同時進行。
  • 2、不支持故障自動恢復(CSR):當斷電時有可能會出現數據損壞或丟失的問題。

如何解決:

  • 1、提建議將現有的MYISAM引擎替換為Innodb,將版本替換為5.6.38
    • 1)如果使用MYISAM會產生”小問題”,性能安全不能得到保證,使用innodb可以解決這個問題。
    • 2)5.1.77版本對於innodb引擎支持不夠完善,5.6.38版本對innodb支持非常完善了。
  • 2、實施過程和註意要素

模擬環境

建表
mysql> create table test1(sid int,name varchar(11)) engine=myisam;

mysql> create table test1(sid int,name varchar(11)) engine=myisam;

mysql> create table test3(sid int,name varchar(11)) engine=myisam;

1)備份生產庫數據(mysqldump)

[root@db01 ~]# mysqldump -uroot -p123 -A --triggers -R --master-data=2 >/tmp/full.sql
#-A系統庫 -B程式業務恢復庫

2)準備一個5.6.38版本的新資料庫
3)對備份數據進行處理(將engine欄位替換)

[root@db01 ~]# sed -i 's#ENGINE=MYISAM#ENGINE=INNODB#g' /tmp/full.sql

4)將修改後的備份恢復到新庫

mysql -uroot -p123 -h 10.0.0.52 </tmp/full.sql

#導出表
mysqldump -uroot -p3308 -S /data/3308/data/mysql.sock --tables test student

5)應用測試環境連接新庫,測試所有功能
6)停應用,將備份之後的生產庫發生的新變化,補償到新庫
7)應用割接到新資料庫

項目結果:

解決了”小問題”

四.Innodb存儲引擎——表空間介紹

5.5版本以後出現共用表空間概念

表空間的管理模式的出現是為了資料庫的存儲更容易擴展

5.6版本中預設的是獨立表空間

  • 1、共用表空間

    innodb的所有數據保存在一個獨立的表空間裡面,而這個表空間可以由很多的文件組成,一個表可以跨越多個文件存在,所以其大小限制不在是文件大小限制,而是其自身的限制,預設最大限製為64tb,這個大小包括這個表的所有所有索引等相關的數據

1)查看共用表空間

#物理查看
[root@db01 ~]# ll /application/mysql/data/
-rw-rw---- 1 mysql mysql 79691776 Aug 14 16:23 ibdata1
#命令行查看
mysql> show variables like '%path%';
innodb_data_file_path =bdata1:12M:autoextend

5.6版本中預設存儲:
1.系統數據
2.undo(事務的日誌,5.7改配置文件可以獨立出來)
3.臨時表(查詢臨時生成的表)

5.7版本中預設會將undo和臨時表獨立出來,5.6版本也可以獨立,只不過需要在初始化的時候進行配置

2)設置方法

#編輯配置文件
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
innodb_data_file_path=ibdata1:76M;ibdata2:50M:autoextend
  • 2、獨立表空間

對於用戶自主創建的表,會採用此種模式,每個表由一個獨立的表空間進行管理

1)查看獨立表空間

#物理查看
[root@db01 ~]# ll /application/mysql/data/world/
-rw-rw---- 1 mysql mysql 688128 Aug 14 16:23 city.ibd
#命令行查看
mysql> show variables like '%per_table%';
innodb_file_per_table=ON

2)獨立表空間

#物理查看
[root@db01 ~]# ll /application/mysql/data/world/
-rw-rw---- 1 mysql mysql 688128 Aug 14 16:23 city.ibd
#命令行查看
mysql> show variables like '%per_table%';
innodb_file_per_table=ON

企業案例

在沒有備份數據的情況下,突然斷電導致表損壞,打不開資料庫。

模擬環境

db01 db02

1.打包表

tar tar.world.gz world
scp word  /application/mysql/data/

2.多實例模擬測試

1)拷貝庫目錄到新庫中

[root@db01 ~]# cp -r /application/mysql/data/world/ /data/3307/data/

2)啟動新資料庫

[root@db01 ~]# mysqld_safe --defaults-file=/data/3307/my.cnf &

3)登陸資料庫查看

mysql> show databases;

4)查詢表中數據

mysql> select * from city;
ERROR 1146 (42S02): Table 'world.city' doesn't exist

5)找到以前的表結構在新庫中創建表

mysql> show create table world.city;
#刪掉外鍵創建語句
CREATE TABLE `city` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Name` char(35) NOT NULL DEFAULT '',
  `CountryCode` char(3) NOT NULL DEFAULT '',
  `District` char(20) NOT NULL DEFAULT '',
  `Population` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`),
  KEY `CountryCode` (`CountryCode`),
  KEY `idx_city` (`Population`,`CountryCode`),
  CONSTRAINT `city_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES `country` (`Code`)
) ENGINE=InnoDB AUTO_INCREMENT=4080 DEFAULT CHARSET=latin1;

6)刪除表空間文件

mysql> alter table city_new discard tablespaces;

7)拷貝舊表空間文件

[root@db01 world]# cp -a /data/3307/data/world/city.ibd /data/3307/data/world/city_new.ibd #加-a不需要授權

8)授權

[root@db01 world]# chown -R mysql.mysql *

9)導入表空間

mysql> alter table city_new import tablespace; 

10)物理刪除舊表

[root@db02 world]# rm -fr city.*

11)改表明

mysql> alter table city1 rename city;

12)如果是新庫,應用割接(修改代碼連庫的ip)

五.Innodb核心特性——事務

  • 1.什麼是事務

主要針對DML語句(update,delete,insert)

一組數據操作執行步驟,這些步驟被視為一個工作單元:
1)用於對多個語句進行分組
2)可以在多個客戶機併發訪問同一個表中的數據時使用


所有步驟都成功或都失敗
1)如果所有步驟正常,則執行
2)如果步驟出現錯誤或不完整,則取消

  • 2.事務的通俗理解

伴隨著“交易”出現的資料庫概念。

我們理解的“交易”是什麼?
1)物與物的交換(古代)
2)貨幣現金與實物的交換(現代1)
3)虛擬貨幣與實物的交換(現代2)
4)虛擬貨幣與虛擬實物交換(現代3)


資料庫中的“交易”是什麼?
1)事務又是如何保證“交易”的“和諧”?
2)ACID

  • 3.事務ACID特性

Atomic(原子性)
所有語句作為一個單元全部成功執行或全部取消。

Consistent(一致性)
如果資料庫在事務開始時處於一致狀態,則在執行該。
事務期間將保留一致狀態。

Isolated(隔離性)
事務之間不相互影響。

Durable(持久性)
事務成功完成後,所做的所有更改都會準確地記錄在
資料庫中。所做的更改不會丟失。


  • ** 4.事務流程舉例**

  • 5.事務的控制語句

如下:
START TRANSACTION(或 BEGIN):顯式開始一個新事務
SAVEPOINT:分配事務過程中的一個位置,以供將來引用
COMMIT:永久記錄當前事務所做的更改
ROLLBACK:取消當前事務所做的更改
ROLLBACK TO SAVEPOINT:取消在 savepoint 之後執行的更改
RELEASE SAVEPOINT:刪除 savepoint 標識符
SET AUTOCOMMIT:為當前連接禁用或啟用預設 autocommit 模式

一個成功事務的生命周期

begin;
sql1
sql2
sql3
...
commit;

一個失敗事務的生命周期

begin;
sql1
sql2
sql3
...
rollback;
  • 3.自動提交
#查看自動提交
mysql> show variables like 'autocommit';
#臨時關閉
mysql> set autocommit=0;
#永久關閉,(企業中一般不關閉)
[root@db01 world]# vim /etc/my.cnf
[mysqld]
autocommit=0
  • 4.事務演示

1)成功事務

mysql> create table stu(id int,name varchar(10),sex enum('f','m'),money int);
mysql> begin;
mysql> insert into stu(id,name,sex,money) values(1,'zhang3','m',100), (2,'zhang4','m',110);
mysql> commit;

2)事務回滾

mysql> begin;
mysql> update stu set name='zhang3';
mysql> delete from stu;
mysql> rollback;
  • 6.事務隱式提交情況

1)現在版本在開啟事務時,不需要手工begin,只要你輸入的是DML語句,就會自動開啟事務。
2)有些情況下事務會被隱式提交

例如:
在事務運行期間,手工執行begin的時候會自動提交上個事務
在事務運行期間,加入DDL、DCL操作會自動提交上個事務
在事務運行期間,執行鎖定語句(lock tables、unlock tables)
load data infile
select for update (查詢sql語句的執行結果)
在autocommit=1的時候

  • 7.事務日誌redo基本功能

1)Redo是什麼?

redo,顧名思義“重做日誌”,是事務日誌的一種。

2)作用是什麼?

在事務ACID過程中,實現的是“D”持久化的作用。

特性:WAL(Write Ahead Log)日誌優先寫
REDO:記錄的是,記憶體數據頁的變化過程

3)REDO工作過程

#執行步驟
update t1 set num=2 where num=1; 

1)首先將t1表中num=1的行所在數據頁載入到記憶體中buffer page
2)MySQL實例在記憶體中將num=1的數據頁改成num=2
3)num=1變成num=2的變化過程會記錄到,redo記憶體區域,也就是redo buffer page中

#提交事務執行步驟
commit; 

1)當敲下commit命令的瞬間,MySQL會將redo buffer page寫入磁碟區域redo log
2)當寫入成功之後,commit返回ok

  • 8.redo數據實例恢復過程


  • 9.事務日誌undo

1)undo是什麼?

undo,顧名思義“回滾日誌”,是事務日誌的一種。

_2)作用是什麼?

在事務ACID過程中,實現的是“A”原子性的作用。當然CI的特性也和undo有關

  • 10.redo和undo的存儲位置
#redo位置
[root@db01 data]# ll /application/mysql/data/
-rw-rw---- 1 mysql mysql 50331648 Aug 15 06:34 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Mar  6  2017 ib_logfile1
#undo位置
[root@db01 data]# ll /application/mysql/data/
-rw-rw---- 1 mysql mysql 79691776 Aug 15 06:34 ibdata1
-rw-rw---- 1 mysql mysql 79691776 Aug 15 06:34 ibdata2

在MySQL5.6版本中undo是在ibdata文件中,在MySQL5.7版本會獨立出來。

  • 11.事務中的鎖

1)什麼是“鎖”?

“鎖”顧名思義就是鎖定的意思。

2)“鎖”的作用是什麼?

在事務ACID特性過程中,“鎖”和“隔離級別”一起來實現“I”隔離性的作用。

排他鎖:保證在多事務操作時,數據的一致性。
共用鎖:保證在多事務工作期間,數據查詢時不會被阻塞。

悲觀鎖:同時修改數據,誰先修改誰為準

樂觀鎖:誰先提交就是誰為準

  • 12.多版本併發控制(MVCC)

1)只阻塞修改類操作,不阻塞查詢類操作(排他鎖,共用鎖)
2)樂觀鎖的機制(誰先提交誰為準)

  • 13.鎖的粒度
    MyIsam:低併發鎖(表級鎖)
    Innodb:高併發鎖(行級鎖)

    ==行級鎖.必須的有聚集索引(主鍵),否則還是表級鎖==

  • 14.事務的隔離級別

四種隔離級別:

READ UNCOMMITTED(獨立提交)RU級別
允許事務查看其他事務所進行的未提交更改

READ COMMITTED RC級別 (容易出現幻讀)
允許事務查看其他事務所進行的已提交更改

REPEATABLE READ****** RR級別 (可以解決幻讀,退出重連)
確保每個事務的 SELECT 輸出一致
InnoDB 的預設級別

SERIALIZABLE 串列化級別 (在事務執行的過程中,阻斷查詢結果)
將一個事務的結果與其他事務完全隔離

#查看隔離級別
mysql> show variables like '%iso%';
#修改隔離級別為RU
[mysqld]
transaction_isolation=read-uncommit
mysql> use oldboy
mysql> select * from stu;
mysql> insert into stu(id,name,sex,money) values(2,'li4','f',123);
#修改隔離級別為RC
[mysqld]
transaction_isolation=read-commit

臟讀 幻讀 重覆讀 查詢原因,和解決辦法

一個事務讀到另外一個事務還沒有提交的數據,我們稱之為臟讀。解決方法:把事務隔離級別調整到READ COMMITTED

一個事務先後讀取同一條記錄,但兩次讀取的數據不同,我們稱之為不可重覆讀。解決方法:把事務隔離級別調整到REPEATABLE READ。

一個事務先後讀取一個範圍的記錄,但兩次讀取的紀錄數不同,我們稱之為幻象讀。解決方法:把事務隔離級別調整到SERIALIZABLE。

1, 臟讀

一個事務讀到另一個事務,尚未提交的修改,就是臟讀。這裡所謂的修改,除了Update操作,不要忘了,還包括
Insert和Delete操作。

臟讀的後果:如果後一個事務回滾,那麼它所做的修改,統統都會被撤銷。前一個事務讀到的數據,就是垃圾數據。


舉個例子:預訂房間。
有一張Reservation表,往表中插入一條記錄,來訂購一個房間。

 事務1:在Reservation表中插入一條記錄,用於預訂99號房間。

 事務2:查詢,尚未預定的房間列表,因為99號房間,已經被事務1預訂。所以不在列表中。

 事務1:信用卡付款。由於付款失敗,導致整個事務回滾。
        所以插入到Reservation 表中的記錄並不置為持久(即它將被刪除)。

現在99號房間則為可用。
所以,事務2所用的是一個無效的房間列表,因為99號房間,已經可用。如果它是最後一個沒有被預定的房間,那麼這將是一個嚴重的失誤。

註:臟讀的後果很嚴重。

 

2,不可重覆讀。

在同一個事務中,再次讀取數據時【就是你的select操作】,所讀取的數據,和第1次讀取的數據,不一樣了。就是不可重覆讀。

舉個例子:
 事務1:查詢99號房間是否為雙人床房間。結果99號是。

 事務2:將99號房間,改成單人床房間。

 事務1:再次執行查詢,99號房間不是雙人房了。也就是說, 事務1,可以看到其他事務所做的修改。


在不可重覆讀,裡面,可以看到其他事務所做的修改,而導致2次的查詢結果不再一樣了。
這裡的修改,是提交過的。也可以是沒有提交的,這種情況同時也是臟讀。

如果,資料庫系統的隔離級別。允許,不可重覆讀。那麼你啟動一個事務,並做一個select查詢操作。
查詢到的數據,就有可能,和你第2次,3次...n次,查詢到的數據不一樣。一般情況下,你只會做一次,select
查詢,並以這一次的查詢數據,作為後續計算的基礎。因為允許出現,不可重覆讀。那麼任何
時候,查詢到的數據,都有可能被其他事務更新,查詢的結果將是不確定的。


註:如果允許,不可重覆讀,你的查詢結果,將是不確定的。一個不確定的結果,你能容忍嗎?


3,幻讀
事務1讀取指定的where子句所返回的一些行。然後,事務2插入一個新行,這個新行也滿足事務1使用的查詢
where子句。然後事務1再次使用相同的查詢讀取行,但是現在它看到了事務2剛插入的行。這個行被稱為幻象,
因為對事務1來說,這一行的出現是不可思議的。


舉個例子:
事務1:請求沒有預定的,雙人床房間列表。99號在其中。
事務2:向Reservation表中插入一個新紀錄,以預訂99號房間,並提交。
事務1:再次請求有雙人床的未預定的房間列表,99號房間,不再位於列表中。


註:幻讀,針對的是,Insert操作。如果事務2,插入的記錄,沒有提交。那麼同時也是臟讀。


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

-Advertisement-
Play Games
更多相關文章
  • 1 設置隨機密碼 2 重啟,在開機時按F2 3 在載入linux內核的地方添加 4 查看/sysroot的掛載情況 5 用讀寫的方式掛載 6 進入linux終端 7 修改密碼 8 添加啟動掃描文件 touch /.autorelabel 9 重啟 ...
  • 1 安裝samba 2 添加用戶 3 設置共用文件用戶的密碼 4 創建公共共用文件 5 修改smb的配置文件 6 關閉防火牆 7 查看SELinux模式 8 修改SELinux模式 9 啟動smb 10 打開windwos,我的電腦,輸入\\192.168.0.108 11 輸入smbuser和密碼 ...
  • -e 判斷對象是否存在 -d 判斷對象是否存在,並且為目錄 -f 判斷對象是否存在,並且為常規文件 -L 判斷對象是否存在,並且為符號鏈接 -h 判斷對象是否存在,並且為軟鏈接 -s 判斷對象是否存在,並且長度不為0 -r 判斷對象是否存在,並且可讀 -w 判斷對象是否存在,並且可寫 -x 判斷對... ...
  • 環境 主機: Windows 10 虛擬機: VMware 15 Pro 鏡像: 一、安裝過程: 然後開啟虛擬機 設置主機名 時區 密碼 最小安裝 等著 重啟 登錄 二、配置靜態IP地址 輸入ifconfig後沒有配置IP地址,接下來進行手動配置。 輸入以下命令進入IP配置文件進行配置 原始內容 進 ...
  • 身份鑒別 1)對登陸操作系統和資料庫系統的用戶進行身份表示和鑒別 1、密碼文件中的口令欄位是否不為空 2、檢查各個用戶主目錄下的.rhosts文件 3、查看/etc/hosts.equiv 學習: 1、用戶主目錄 ~代表用戶主目錄 對一般用戶而言,~表示/home/(用戶名) 對root用戶而言,~ ...
  • 回到目錄 1. 基本用法 用BJT晶體管實現開關功能是經常會用到的實用電路。和邏輯門電路類似,當BJT用於開關電路時,也只工作於飽和區和截止區。 開關功能的實現電路如下圖所示,負載可以是發光二極體、電動機等等。 圖3-10.01 開關電路的工作原理如下: • 當vi輸入0V時,晶體管截止,負載RL上 ...
  • SQL Server 中 的使用 Intro SQL Server 從 2016 開始支持了一些 JSON操作,最近的項目里也是好多地方欄位直接存成了 JSON,需要瞭解一下怎麼在SQL Server 中操作 JSON. JSON支持適用於 SQL Server 2016 及以上版本 和 Azure ...
  • 第一範式(1NF):欄位具有原子性,不可再分。所有關係型資料庫系統都滿足第一範式) 資料庫表中的欄位都是單一屬性的,不可再分。例如,姓名欄位,其中的姓和名必須作為一個整體,無法區分哪部分是姓,哪部分是名,如果要區分出姓和名,必須設計成兩個獨立的欄位。 第二範式(2NF)要求實體的屬性完全依賴於主關鍵 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...