主頁 > 後端開發 > 面試官:你經歷過資料庫遷移么?有哪些注意點和難點?

面試官:你經歷過資料庫遷移么?有哪些注意點和難點?

2020-10-02 02:00:13 後端開發

前言

最近寫了很多資料庫相關的文章,大家基本上對資料庫也有了很多的了解,資料庫本身有所了解了,我們是不是應該回歸業務本身呢?

大家去了解過自己企業資料庫的部署方式么?是怎么部署的,又是部署在哪里的?部署程序中可能會出現的問題有哪些?

是主從?還是雙主?有沒有分庫?大的表做了分表沒?等等...部署方式大概率也都是分庫的,表數量級超千萬基本上都開始分表了,考慮周全的企業,肯定也有資料庫的冷備,熱備,災備,以及異地容災等等,

我還記得我大學做專案,學校就是買了很多物理機,我們的專案和資料庫都是部署在自己內部的服務器上的,那家伙一到夏天風我嗡嗡嗡的吹,煩死了,機房還很熱,

但是我敢打賭,大家現在所在的企業,大概率都是使用了各種云服務廠商的服務部署方式,那就引入了今天的第一個思考,

為什么資料庫要上云呢?

我們公司的大多數服務以及資料庫都是在對應的云服務廠商的,那問題就來了,為啥都要上云呢?

在思考這個問題的時候,我第一時間想到了反證法,不上云的壞處是啥?

  1. 成本

相較于傳統服務器需要購買、租用的方式,云服務器采用即用即收費的方式,減少購買成本,靈活擴展的容量可以按自己需求來定,不用前期估量需要用多少,

我之前所在的電商活動團隊,每次到了大促我們就去租賃云服務廠商的流量機,等活動結束就還回去,真的就是成本最大化了,而且還是根據你的使用流量計費,

如果大家還是使用自己購買的服務器,那這個時候難道去臨時采購么?雖然我知道百度就是在某年春節活動的時候采購了N多物理機,但是性質不一樣,他們是能最大化利用這些服務器的,他們甚至可以開發云服務自己做云服務廠商,實際上他們確實也這么做了,

  1. 性能

云服務器實作了硬體上的隔離以及寬帶上的獨享,不受到地域、流量等的限制,可以持續的進行業務交流,不會因中斷影響效果,

如果大家還是使用物理機,那去運營商遷專線的帶寬成本,還有物理機性能的問題也不一定能更上,

由于現在成本問題,你們公司買了很多低配的服務器,但是突然你們業務體量幾何增長,怎么辦?繼續買高配的?顯然不是很合適,這誰頂得住啊?

  1. 管理

云服務器可以實作遠程同步管理,共享,各種業務的備份,傳統服務器需要在某一網路區域內,有可能受到網路影響導致資料缺失,

上面我提到的冷備,熱備,災備其實我們購買的服務器都能做的,但是放著一個不知道什么時候才能用到的服務器在那,真的很浪費,

而且也有他做不到的,比如災備,如果你公司在震區,要是還用物理服務器,基本上等于自殺,發送自然災害的時候全球的用戶都無法訪問你,交給服務廠商就不一樣了,他們選址很有講究的,并且在各個地方都建立自己的資料中心,保證了高可用,

  1. 安全

為了保證云平臺的可靠性,云服務平臺公司肯定會投入大量的功夫,有一套可靠的安全保障系統,平臺使用者不必擔心平臺穩定性、安全性問題,

物理機一旦高權限的所有者使壞,基本上都是不可恢復的災難,雖然云服務也一樣,但是合理使用,和適當的權限收斂,完全可以做到更高級別的安全的,

微盟事件大家也知道,如果提前做好各種全量,增量備份其實就沒什么大問題的,再者就是權限收斂問題,我司在對應的資料庫服務器上是禁用了rm -rf 、fdisk以及drop這樣的極端操作的,

所有資料庫的查詢更是自己的組件查詢,連update都無法操作(只能靠代碼),

如果還是使用物理機,就需要自己去維護,升級打補丁,很難保證不被黑客入侵,之前我就遇到過服務器補丁打遲了,導致被黑客攻擊,劫持拿去挖礦了,而云服務廠商的安全系統都是實時更新的,

小結:沒有特殊情況,能用云產品就直接用云產品,因為云產品提供的不僅僅是產品能力,最關鍵的是關鍵時刻的容災、應急和服務能力,這些能力,并不是所有公司都能完整建設一套,甚至是很多公司想都想不到的,

到目前為止,雖然各大云廠商包括他們的產品,都還有這樣那樣的問題,但是從體系上,云仍然是最完善,最規范的,直接一點講,比99%的公司做的都要好,

上云需要考慮的問題

這里很有意思,我在寫這個文章的時候,我司正在做部分業務上云,以及云遷移這樣的業務,這讓我聯想到了很多有意思的事情,

我們現在是從某云遷移到華為云,我想大家也會與這樣的場景,但是這樣遷移會帶來一些什么樣的問題呢?不知道大家思考過沒?

其實從本地到云,或者從云到云,要思考的點估計是差多的,那我先拋出一些問題,看下這些問題華為云服務廠商是怎么解決的,

  1. 遷移失敗:資料遷移失敗怎么辦
  2. 資料丟失:怎么判斷遷移后資料是否完整
  3. 業務中斷:遷移到一半遇到不可抗力怎么辦
  4. 資料、傳輸加密:資料傳輸程序中怎么加密,防止被不法之徒中途獲取資料
  5. 熱切換:怎么做到不停服切換,以及資料源切換程序中的資料一致性

這些問題是我們不得不考慮的,大家是不是以為遷移多簡單,那我想問一下,假如是訂單庫呢?大一點的電商每一秒,甚至是每一毫秒都是有訂單的,哪怕是凌晨,別問我為什么知道咳咳,

那你肯定不能停服去遷移資料庫,你需要一邊遷移一邊接受新的資料,這個時候就需要一些技巧了,不知道redis字典的rehash大家知道么?

rehash

在需要擴容的時候,redis會新建一個hash字典,這個時候老的停止接收資料,新資料放到新的字典,同時慢慢把老資料拿過來,其實這個思想,在資料庫遷移也是可以用的,但是資料庫的操作,往往都是基于資料的,并不是都是增量,

那簡單,做點取巧的操作也可以,那云廠商的已經把我上面提到的所有問題都肯定考慮過了,我接觸的是華為云,華為云使用了DRS(Data Replication Service 資料復制服務)做資料庫遷移的事情,他怎么做的呢?

DRS:資料復制服務(Data Replication Service,簡稱為 DRS)是一種易用、穩定、高效,用于資料庫在線遷移和資料庫實時同步的云服務, DRS 圍繞云資料庫,降低了資料庫之間資料流通的復雜性,有效地幫助您減少資料傳輸的成本,

大家可能會好奇,為啥不自己去實作資料遷移,要用別人的組件呢?其實車輪子這個,如果你沒更好的思路你還是用別人寫好的就好了,你能比得過專業團隊的研發結果嘛?

不過技術背后的實作,解決的問題還是需要我們去關心的,不然DRS什么都幫我們做了,我們動動滑鼠就解決了,你怎么得到識訓呢?這才是今天探討的重點,

我說一下用車輪的好處吧:降低成本,降低技術門檻、降低風險

  • 人力成本時間成本,都是很昂貴的,如果一個現成的東西都幫我們做了,我們還去開發干嘛?再者,我相信大部分公司還是沒專門的DBA的,但是車輪子在了,我們開發也能去做遷移這樣的事情了,不是嘛?我們傳統技術遷庫耗時耗力不說了,失敗率是真的高,還有資料對比等等,很頭疼,我之前東家資料庫遷移都是半夜,搞一晚上,天亮都不一定搞好了,要是沒好,用戶上線了,還的暫停,

不過即使是使用了工具,一個資料庫完整的遷移流程卻還是應該很嚴謹的,大家可能會疑惑再嚴謹能有多嚴謹?給你看個圖你就知道了:

華為云的DRS的在線遷移怎么做的呢?

可以看到,遷移圖中是使用到了VPN,這個的作用主要就是保住一個高速穩定的傳輸,以及傳輸資料的加密,萬一你同步的程序被其他對手公司抓到,那?在文章后面,你可以看到華為云DRS是怎么做的網路安全,我做了一次完整的遷移實戰,并且做了總結,

遷移實戰

他遷移很簡單,都有教程,我用過一遍,大致步驟如下:

遷移作為一個特殊時期,業務配合、人為配合是最關鍵的,部分操作一定要規避,比如說常見的:

  • 不能將源資料庫日志強制清理掉
  • 不能將用于連接源資料庫的用戶密碼修改掉、或者洗掉掉
  • 不能將表長時間鎖定,導致外部都無法查詢該表

他在遷移之前可以做一個遷移預檢查,從官方檔案來看,都是對過往遷移案例總結出來的檢查步驟,可以讓遷移成功有更好的保障,這點挺好可以在遷移前夕找出問題所在,我也失敗過,是因為環境問題,都給了很明確的指示,

大家不知道思考過沒,就是資料遷移了,但是如果資料庫的設定沒遷移那也是很麻煩的,如果一個遷移工具能夠做到把DBA設定的好的User權限遷移了,以及我們設定的各種觸發器,資料庫字符集設定都遷移了,那才是我理想的一個遷移工具,是的華為云DRS做了,這就是比較優秀的點了,真的省了很多功夫,

特別是對于資料庫各種設定并沒那么了解的開發來說,這功能確實是很福利了,而且還有性能引數,類似各種buffer大小,cache大小等等他都能遷移,甚至可以做到流控,還可以隨時改變流控就更優秀了:

遷移模式多樣化,這是我準備開始遷移的第一感受,我上面提到過,如果不能增量遷移將毫無意義,DRS還是想到了,這讓我覺得好像有點暖,說著說著我的眼角又濕潤了...

因為大部分的場景我們都是線上業務的不停服遷移,在遷移程序中,還是不斷的有增量資料在涌入的,敖丙之前所經歷過的資料庫遷移基本上也都是全量+增量的遷移模式,全量的場景只存在內部系統,或者離線資料等,

其實這里的技術核心就在于怎么去保證增量的資料也能保證不丟失正確的遷移,我猜是通過binlog同步的,我看了下他的檔案,日志,果然被我猜對了,

DRS是通過全量遷移程序完成歷史資料遷移至目標資料庫后,增量遷移階段通過捕抓日志,應用日志等技術,將源端和目標端資料庫保持資料一致,這里的保持一致后面也會提到,他提供了完整的資料對比功能,

遷移程序很簡單,進度完全可以看到,資料的延遲也可以很直觀的看到:

遷移結束之后,DRS提供了資料對比,其實資料對比以前我做遷移的時候,我們都是通過對比資料庫行數去做的,因為沒這樣的遷移工具,我發現了很暖心的一點就是內容對比,這一點讓我很驚喜,因為行數的對比還是不夠嚴謹,修改的日志如果缺失行數的對比也是沒用的,

img
img
img
img

等待對比完成,點擊“查看對比報表”,可以了解對比詳情,詳情頁面如圖所示:

上面提到的網路安全問題,我也在DRS找到了答案,他們會使用特定的加密協議進行資料傳輸,還可以用特定的VPN掛載網路傳輸:

DRS還做了遷移監控,可以看到實時進度,讓整個遷移進度比較可視化,中間的例外也一目了然,說實話工具真的就是香,以前想都不敢想,我們熬夜就生怕一個環節出錯,而且經常還是后知后覺的,可視化的流程會你對遷移有一種掌控感,

遷移完成:

從我開始遷移到結束,整個流程其實不到2小時,這個放在以前是不敢想的,這波體驗我是很滿意的,讓我一個開發就做到了以前DBA才能做的事情,說著說了旁邊的DBA的眼角也濕潤了....

小結

整個體驗我覺得是很不錯的,我總結幾個我覺得DRS獨特的設計和使用場景:

  1. 遷移限速,根據限定時間段設定遷移速度上限

應用場景:

  • 有些流量型app,比如游戲廠商等客戶, 遷移時源資料庫的公網、VPN不能打滿(打滿將影響其對外業務,或者影響共用VPN 帶寬)

  • 有些業務負載較重,或著客戶無法接受 業務時間應用程式因為遷移帶來額外負載

  1. 用戶遷移(權限、密碼、 definer),完整繼承源權限體系

應用場景:

  • 市面上的遷移產品均不支持用戶的遷移, 也就是說如果用戶沒有注意,或者不懂用戶遷移,那么遷移后業務必然報錯, DRS提供了全套的用戶權限繼承設計, 可以將權限、密碼、definer保留遷移至目標資料庫,確保遷移后權限安全、業務穩定,可以讓不熟悉資料庫的客戶遷移時,仍然可以完成一場精細的、高質量的資料庫遷移,
  1. 引數對比,遷移后業務穩定

應用場景:

  • 市面上的遷移產品均不支持引數的遷移,而資料庫引數不一樣,這將直接導致業務程式 運行報錯(舉個簡單例子session數遷移后變小了),DRS選定了業務和性能強相關關鍵的引數,避免了這些引數后續因為沒有繼承源環境設定,而導致業務報錯或性能下降, 可以讓不熟悉資料庫的客戶遷移時,仍然可以完成一場精細的、高質量的資料庫遷移,
  1. 資料校對平臺,割接好幫手

應用場景:

  • 市面上的遷移產品均不支持資料的對比,校對作業留給用戶測,DRS提供了豐富的對比功能:

  • 物件對比

  • 資料級對比

  • 對比可定時,可取消

    利用對比定時任務,可以選擇凌晨等業務低峰期 進行資料一致性對比,第二天可以查看資料對比結果,對于遷移情況做到完全掌握, 可以讓不熟悉資料庫的客戶遷移時,仍然可以完成一場精細的、高質量的資料庫遷移,

  1. 觸發器、事件的遷移

應用場景:

  • 市面上的遷移產品均不支持觸發器、事件的遷移,精通遷移的用戶關注這些細節,因 為觸發器和事件也是資料庫的一部分,觸發器和事件存在關鍵的業務邏輯,這些物件 不支持遷移,業務必然報錯,甚至造成不可挽回的損失,
  • 可以讓不熟悉資料庫的客戶遷移時,仍然可以完成一場精細的、高質量的資料庫遷移,

注:【部分圖片來源網路 侵刪】

總結

其實給大家介紹這樣DRS的一個背景和技術,主要是希望跟大家跟我一起做一次完整資料遷移,一起去探討技術背后的場景,以及場景背后我們應該有技術思考,

不過這次體驗真的,讓我不得不感慨技術的便捷性,以前資料庫遷移都是團隊開發以及測驗一個團隊熬夜守著資料庫遷移,最后驗證測驗才能走的,所有人拖著疲憊的身軀看著升起的太陽,眼角都濕了...

現在我自己看看教程動動手指就完成了一場大規模的資料庫遷移演練,在享受技術給我帶來方便的同時,也讓我對技術背后的具體實作和人生的意義陷入了深深的思考,

或許這就是技術的價值吧,或許這就是這么多工程師日日夜夜辛苦的意義吧,或許...

我是敖丙,你知道的越多,你不知道的越多,我們下期見!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/146911.html

標籤:Java

上一篇:阿里為什么不用 Zookeeper 做服務發現?

下一篇:Spring MVC 接收請求引數所有方式總結!

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more