[20190101]塊內重整.txt

来源:https://www.cnblogs.com/lfree/archive/2019/01/01/10206128.html
-Advertisement-
Play Games

[20190101]塊內重整.txt--//我不知道用什麼術語表達這樣的情況,我僅僅一次開會對方這麼講,我現在也照用這個術語.--//當dml插入數據到數據塊時,預留一定的空間(pctfree的百分比)不再插入.保留一些空間主要目的為了ITL的增加,以及update時空間增長.--//避免大量的行遷 ...


[20190101]塊內重整.txt

--//我不知道用什麼術語表達這樣的情況,我僅僅一次開會對方這麼講,我現在也照用這個術語.
--//當dml插入數據到數據塊時,預留一定的空間(pctfree的百分比)不再插入.保留一些空間主要目的為了ITL的增加,以及update時空間增長.
--//避免大量的行遷移情況出現.
--//當到達頂部時,會出現一次塊內重整(也有叫塊內重組).通過演示瞭解這個過程.

1.環境:
SCOTT@test01p> @ ver1
PORT_STRING          VERSION    BANNER                                                                       CON_ID
-------------------- ---------- ---------------------------------------------------------------------------- ------
IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production      0

SCOTT@test01p> create table t as select rownum id,to_char(rownum)||lpad('x',800,'x') name from dual connect by level<=8;
Table created.

SCOTT@test01p> @desc t
Name Null?    Type
---- -------- -------------
ID            NUMBER
NAME          VARCHAR2(840)
--//name 定義VARCHAR2(840).

SCOTT@test01p> select rowid ,id from t;
ROWID              ID
------------------ --
AAAF61AALAAAACrAAA  1
AAAF61AALAAAACrAAB  2
AAAF61AALAAAACrAAC  3
AAAF61AALAAAACrAAD  4
AAAF61AALAAAACrAAE  5
AAAF61AALAAAACrAAF  6
AAAF61AALAAAACrAAG  7
AAAF61AALAAAACrAAH  8
8 rows selected.
--//有8條記錄在一個塊中.

SCOTT@test01p> @rowid AAAF61AALAAAACrAAA
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     24245         11        171          0  0x2C000AB           11,171               alter system dump datafile 11 block 171

SCOTT@test01p> alter system checkpoint ;
System altered.

2.通過bbed觀察:
BBED> set dba 11,172
        DBA             0x02c000ac (46137516 11,172)
--//windows版本block+1.

BBED> map
 File: D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF (11)
 Block: 172                                   Dba:0x02c000ac
------------------------------------------------------------
 KTB Data Block (Table/Cluster)
 struct kcbh, 20 bytes                      @0
 struct ktbbh, 96 bytes                     @20
 struct kdbh, 14 bytes                      @124
 struct kdbt[1], 4 bytes                    @138
 sb2 kdbr[8]                                @142
 ub1 freespace[1550]                        @158
 ub1 rowdata[6480]                          @1708
 ub4 tailchk                                @8188

BBED> p kdbr
sb2 kdbr[0]                                 @142      7254
sb2 kdbr[1]                                 @144      6444
sb2 kdbr[2]                                 @146      5634
sb2 kdbr[3]                                 @148      4824
sb2 kdbr[4]                                 @150      4014
sb2 kdbr[5]                                 @152      3204
sb2 kdbr[6]                                 @154      2394
sb2 kdbr[7]                                 @156      1584

BBED> x /rnc *kdbr[0]
rowdata[5670]                               @7378
-------------
flag@7378: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@7379: 0x00
cols@7380:    2

col    0[2] @7381: 1
col  1[801] @7384: 1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ..trunc.

--//註這裡的偏移是相對偏移 7254+124(kdbh地址) = 7378.
--//共占用3+1+2+3+801 = 810,註前面有1個位元組保持長度指示器.另外註意字元串長度大於250,需要使用3個位元組保存長度指示器.
--//可以從數據的偏移量可以看出數據是從塊底開始插入的.當前空餘空間是1550.

3.繼續測試,刪除部分數據:
--//先刪除一部分數據,僅僅打上標識標識刪除.
SCOTT@test01p> delete from t where id in (1,3,6,7);
4 rows deleted.

SCOTT@test01p> commit ;
Commit complete.

SCOTT@test01p> alter system checkpoint ;
System altered.

--//通過bbed觀察:
BBED> map
 File: D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF (11)
 Block: 172                                   Dba:0x02c000ac
------------------------------------------------------------
 KTB Data Block (Table/Cluster)
 struct kcbh, 20 bytes                      @0
 struct ktbbh, 96 bytes                     @20
 struct kdbh, 14 bytes                      @124
 struct kdbt[1], 4 bytes                    @138
 sb2 kdbr[8]                                @142
 ub1 freespace[1550]                        @158
 ub1 rowdata[6480]                          @1708
 ub4 tailchk                                @8188
--//刪除部分記錄,freespace空間保持不變.

BBED> p kdbr
sb2 kdbr[0]                                 @142      7254
sb2 kdbr[1]                                 @144      6444
sb2 kdbr[2]                                 @146      5634
sb2 kdbr[3]                                 @148      4824
sb2 kdbr[4]                                 @150      4014
sb2 kdbr[5]                                 @152      3204
sb2 kdbr[6]                                 @154      2394
sb2 kdbr[7]                                 @156      1584

BBED> x /rnc *kdbr[0]
rowdata[5670]                               @7378
-------------
flag@7378: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
lock@7379: 0x02
cols@7380:    0

--//僅僅flag從2c變成3c,加入了KDRHFD標識.

4.然後修改一部分數據看看:
SCOTT@test01p> update t set name=lpad('a',811,'a') where id=2;
1 row updated.

SCOTT@test01p> commit ;
Commit complete.

SCOTT@test01p> alter system checkpoint ;
System altered.

--//我修改的長度與原來不等,這樣增加長度增加10個位元組.這樣還剩下1550-820 = 730位元組.
--//驗證看看:
BBED> map
 File: D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF (11)
 Block: 172                                   Dba:0x02c000ac
------------------------------------------------------------
 KTB Data Block (Table/Cluster)
 struct kcbh, 20 bytes                      @0
 struct ktbbh, 96 bytes                     @20
 struct kdbh, 14 bytes                      @124
 struct kdbt[1], 4 bytes                    @138
 sb2 kdbr[8]                                @142
 ub1 freespace[730]                         @158
 ub1 rowdata[7300]                          @888
 ub4 tailchk                                @8188
--//ok正確!!

BBED> p kdbr
sb2 kdbr[0]                                 @142      7254
sb2 kdbr[1]                                 @144      764
sb2 kdbr[2]                                 @146      5634
sb2 kdbr[3]                                 @148      4824
sb2 kdbr[4]                                 @150      4014
sb2 kdbr[5]                                 @152      3204
sb2 kdbr[6]                                 @154      2394
sb2 kdbr[7]                                 @156      1584
--//kdbr[1] 指向新的位置.對應id=2的記錄.其它不動.

BBED> x /rnc *kdbr[1]
rowdata[0]                                  @888
----------
flag@888:  0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@889:  0x03
cols@890:     2

col    0[2] @891: 2
col  1[811] @894: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... trunc..
--//如果繼續修改記錄,長度消耗大於730並且長度與原來不一樣,這樣就會出現塊內重整的情況:

SCOTT@test01p> update t set name=lpad('b',811,'b') where id=4;
1 row updated.

SCOTT@test01p> commit ;
Commit complete.

SCOTT@test01p> alter system checkpoint ;
System altered.

BBED> map
 File: D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF (11)
 Block: 172                                   Dba:0x02c000ac
------------------------------------------------------------
 KTB Data Block (Table/Cluster)
 struct kcbh, 20 bytes                      @0
 struct ktbbh, 96 bytes                     @20
 struct kdbh, 14 bytes                      @124
 struct kdbt[1], 4 bytes                    @138
 sb2 kdbr[8]                                @142
 ub1 freespace[4762]                        @158
 ub1 rowdata[3268]                          @4920
 ub4 tailchk                                @8188
--//freespace變成了4762,出現一次塊內重整,而且收回刪除記錄的空間.

BBED> p kdbr
sb2 kdbr[0]                                 @142      8062
sb2 kdbr[1]                                 @144      7242
sb2 kdbr[2]                                 @146      7240
sb2 kdbr[3]                                 @148      4796
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~當前偏移最小.
sb2 kdbr[4]                                 @150      6430
sb2 kdbr[5]                                 @152      6428
sb2 kdbr[6]                                 @154      6426
sb2 kdbr[7]                                 @156      5616

--//可以發現行目錄發生變化對比前面的情況,做了整理,整體下移.我前面刪除的記錄是id in (1,3,6,7);
--//id=6,7的記錄應該對應kdbr[5],kdbr[6],可以發現記錄的偏移地址6428,6426,挨的很近.
--//可以大致猜測它的演算法,移動除kdbr[3](對應id=4)的記錄下移騰出空間,你可以發現kdbr[3]指向的偏移是當前最小的.

BBED> x /rnc *kdbr[5]
rowdata[1632]                               @6552
-------------
flag@6552: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
lock@6553: 0x02
cols@6554:    0

BBED> x /rnc *kdbr[6]
rowdata[1630]                               @6550
-------------
flag@6550: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
lock@6551: 0x02
cols@6552:    0

BBED> dump /v offset 6550 count 20
 File: D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF (11)
 Block: 172                               Offsets: 6550 to 6569                            Dba:0x02c000ac
-----------------------------------------------------------------------------------------------------------
 3c023c02 2c000202 c106fe21 03357878 78787878                            l <.<.,...??.5xxxxxx
<32 bytes per line>
--//僅僅保留2個位元組.

BBED> x /rnc *kdbr[0]
rowdata[3266]                               @8186
-------------
flag@8186: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
lock@8187: 0x02
cols@8188:    0

BBED> dump /v count 20
 File: D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF (11)
 Block: 172                               Offsets: 8186 to 8191                            Dba:0x02c000ac
-----------------------------------------------------------------------------------------------------------
 3c020106 ff18                                                           l <.....

 <32 bytes per line>

--//這個時候按照以前使用bbed修複刪除記錄的方法是無用的.因為對應的記錄信息已經被覆蓋了.

5.繼續插入記錄看看.
SCOTT@test01p> insert into  t values(9,to_char(9)||lpad('y',800,'y'));
1 row created.

SCOTT@test01p> commit ;
Commit complete.

SCOTT@test01p> alter system checkpoint ;
System altered.

--//當前塊已經空出許多空間,可以繼續插入數據,看看這時的情況:
BBED> map
 File: D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF (11)
 Block: 172                                   Dba:0x02c000ac
------------------------------------------------------------
 KTB Data Block (Table/Cluster)
 struct kcbh, 20 bytes                      @0
 struct ktbbh, 96 bytes                     @20
 struct kdbh, 14 bytes                      @124
 struct kdbt[1], 4 bytes                    @138
 sb2 kdbr[9]                                @142
 ub1 freespace[3950]                        @160
 ub1 rowdata[4078]                          @4110
 ub4 tailchk                                @8188
--//還有freespace=3950.

BBED> p kdbr
sb2 kdbr[0]                                 @142      2
sb2 kdbr[1]                                 @144      7242
sb2 kdbr[2]                                 @146      5
sb2 kdbr[3]                                 @148      4796
sb2 kdbr[4]                                 @150      6430
sb2 kdbr[5]                                 @152      6
sb2 kdbr[6]                                 @154     -1
sb2 kdbr[7]                                 @156      5616
sb2 kdbr[8]                                 @158      3986
--//可以發現當前塊又插入1條.

BBED> x /rnc *kdbr[8]
rowdata[0]                                  @4110
----------
flag@4110: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@4111: 0x02
cols@4112:    2

col    0[2] @4113: 9
col  1[801] @4116: 9yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy..trunc..

--//註意看前面的kdbr[0],kdbr[2],kdbr[5],kdbr[6]對應的偏移量(2,5,6,-1),通過偏移量鏈接起來.
--//也就是這個這時的偏移量指向的地址根本不是rowdate區域.
--//我不知道是否可以得出這樣結論:如果kdbr指向的值如果小於當前的行目錄數量(9),這些行對應的記錄應該是刪除的.
--//理論講這時對應記錄很難恢復,已經覆蓋了.

6.測試重用的情況:
--//是否會重用呢?理論講應該會重用.打開新的會話看看:
SCOTT@test01p> insert into  t values(10,to_char(10)||lpad('x',800,'x'));
1 row created.

SCOTT@test01p> commit ;
Commit complete.

SCOTT@test01p> alter system checkpoint;
System altered.

BBED> map
 File: D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF (11)
 Block: 172                                   Dba:0x02c000ac
------------------------------------------------------------
 KTB Data Block (Table/Cluster)
 struct kcbh, 20 bytes                      @0
 struct ktbbh, 96 bytes                     @20
 struct kdbh, 14 bytes                      @124
 struct kdbt[1], 4 bytes                    @138
 sb2 kdbr[9]                                @142
 ub1 freespace[3139]                        @160
 ub1 rowdata[4889]                          @3299
 ub4 tailchk                                @8188
--//freespace=3139.

BBED> p kdbr
sb2 kdbr[0]                                 @142      3175
sb2 kdbr[1]                                 @144      7242
sb2 kdbr[2]                                 @146      5
sb2 kdbr[3]                                 @148      4796
sb2 kdbr[4]                                 @150      6430
sb2 kdbr[5]                                 @152      6
sb2 kdbr[6]                                 @154     -1
sb2 kdbr[7]                                 @156      5616
sb2 kdbr[8]                                 @158      3986

--//理論講不同的會話不會插入相同的塊,因為我建表比較特殊,使用ctas建立的.
--//可以發現插入占用了kdbr[0].

BBED> x /rnc *kdbr[0]
rowdata[0]                                  @3299
----------
flag@3299: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@3300: 0x03
cols@3301:    2

col    0[2] @3302: 10
col  1[802] @3305: 10xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...trunc..

SCOTT@test01p> select rowid,id from t;
ROWID                      ID
------------------ ----------
AAAF61AALAAAACrAAA         10
AAAF61AALAAAACrAAB          2
AAAF61AALAAAACrAAD          4
AAAF61AALAAAACrAAE          5
AAAF61AALAAAACrAAH          8
AAAF61AALAAAACrAAI          9
6 rows selected.

--//oracle在插入時能快速定位到kdbr[0],估計在塊內有相關記錄.

BBED> p  kdbh
struct kdbh, 14 bytes                       @124
   ub1 kdbhflag                             @124      0x00 (NONE)
   b1 kdbhntab                              @125      1
   b2 kdbhnrow                              @126      9
   sb2 kdbhfrre                             @128      2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
   sb2 kdbhfsbo                             @130      36
   sb2 kdbhfseo                             @132      3175
   b2 kdbhavsp                              @134      3147
   b2 kdbhtosp                              @136      3147

--//猜測記錄在kdbh.kdbhfrre中,當前是2.如果繼續插入,變成5就可以驗證我的判斷。
--//註意在新的會話插入(session 2):
SCOTT@test01p> insert into  t values(11,to_char(11)||lpad('w',800,'w'));
1 row created.

SCOTT@test01p> commit ;
Commit complete.

SCOTT@test01p> alter system checkpoint;
System altered.

BBED> map
 File: D:\APP\ORACLE\ORADATA\TEST\TEST01P\USERS01.DBF (11)
 Block: 172                                   Dba:0x02c000ac
------------------------------------------------------------
 KTB Data Block (Table/Cluster)
 struct kcbh, 20 bytes                      @0
 struct ktbbh, 96 bytes                     @20
 struct kdbh, 14 bytes                      @124
 struct kdbt[1], 4 bytes                    @138
 sb2 kdbr[9]                                @142
 ub1 freespace[2328]                        @160
 ub1 rowdata[5700]                          @2488
 ub4 tailchk                                @8188
--//freespace繼續減少。

BBED> p kdbr
sb2 kdbr[0]                                 @142      3175
sb2 kdbr[1]                                 @144      7242
sb2 kdbr[2]                                 @146      2364
sb2 kdbr[3]                                 @148      4796
sb2 kdbr[4]                                 @150      6430
sb2 kdbr[5]                                 @152      6
sb2 kdbr[6]                                 @154     -1
sb2 kdbr[7]                                 @156      5616
sb2 kdbr[8]                                 @158      3986
--//插入記錄占用了kdbr[2]。

BBED> p kdbh
struct kdbh, 14 bytes                       @124
   ub1 kdbhflag                             @124      0x00 (NONE)
   b1 kdbhntab                              @125      1
   b2 kdbhnrow                              @126      9
   sb2 kdbhfrre                             @128      5
--//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~變成5,驗證的判斷。
   sb2 kdbhfsbo                             @130      36
   sb2 kdbhfseo                             @132      2364
   b2 kdbhavsp                              @134      2336
   b2 kdbhtosp                              @136      2336
--//這樣通過kdbr[5],裡面記錄的是6,繼續插入可以很容易行目錄,最後記錄-1,表示已經沒有了。

SCOTT@test01p> select rowid,id from t;
ROWID                      ID
------------------ ----------
AAAF61AALAAAACrAAA         10
AAAF61AALAAAACrAAB          2
AAAF61AALAAAACrAAC         11
AAAF61AALAAAACrAAD          4
AAAF61AALAAAACrAAE          5
AAAF61AALAAAACrAAH          8
AAAF61AALAAAACrAAI          9
7 rows selected.

總結:
--//僅僅通過一些簡單的例子演示這個過程,也許許多情況下更加複雜.


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

-Advertisement-
Play Games
更多相關文章
  • 1 固定映射 1.1 數據結構 linux高端記憶體中的臨時記憶體區為固定記憶體區的一部分, 對於固定記憶體在linux內核中有下麵描述 x86| arm| arm64 | | "arch/x86/include/asm/fixmap.h?v=4.7, line 67" | "arch/arm/includ ...
  • 今天稍微瞭解了LVS 的原理和使用,在網路上找到不少好文章,稍微加以處理併在這裡備份: 原理介紹:Linux Virtual Server 關於:http://www.linuxvirtualserver.org/about.html The mission of the Linux Virtual ...
  • 簡述 Supervisor是用Python開發的一套通用的進程管理程式,能將一個普通的命令行進程變為後臺daemon,並監控進程狀態,異常退出時能自動重啟。 它是通過fork/exec的方式把這些被管理的進程當作supervisor的子進程來啟動,這樣只要在supervisor的配置文件中,把要管理 ...
  • 之前有研究過linux,後來一段時間沒有操作了,現在有點陌生,而且當初也沒有記錄學習內容。現在想從新開始包括虛擬機安裝到部署Javaweb項目,把這之間所需要的全都記錄下來,以便後邊學習參考使用。 虛擬機 一種特殊的軟體,他可以在電腦平臺和終端用戶之間創建一種環境,而終端用戶則是基於這個軟體所創建 ...
  • 方法一: 一、安裝inotify-tools(客戶端),實現數據屬實備份 1、檢查目錄是否有如下文檔,沒有表示操作系統不支持 ls -l /proc/sys/fs/inotify 2、安裝inotify-tools軟體 yum install inotify-tools -y 如果安裝失敗,可能是源 ...
  • Tomcat參數配置相關 by:授客 QQ:1033553122 目的: 對Tomcat配置的點滴學習總結,主要目的在於分析Tomcat與性能相關的一些參數設置,以便性能調優時選擇最優配置 環境: Server version: Apache Tomcat/9.0.0.M1 Java8 配置文件說明 ...
  • [Linux文件類型] - //文件 d //目錄 l //鏈接,類似於windows快捷方式. b //block,塊文件。 c //字元文件 [linux的許可權] $>chmod //修改文件(夾)許可權 $>chmod g-w //去除group中write權. chmod //不受文件許可權控制 ...
  • 今天使用LogMiner找回誤更新的數據時,查詢v$logmnr_contents時,遇到了“ORA-04030: out of process memory when trying to allocate 152 bytes (Logminer LCR c,krvtadc)”錯誤。查了一下My O... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...