【學習筆記】大數據技術原理與應用(MOOC視頻、廈門大學林子雨)

来源:https://www.cnblogs.com/yongestcat/archive/2019/08/13/11340392.html
-Advertisement-
Play Games

1 大數據概述大數據特性:4v volume velocity variety value 即大量化、快速化、多樣化、價值密度低 數據量大:大數據摩爾定律 快速化:從數據的生成到消耗,時間視窗小,可用於生成決策的時間非常少;1秒定律,這和傳統的數據挖掘技術有著本質區別(谷歌的dremel可以在1秒內... ...


1 大數據概述

大數據特性:4v volume velocity variety value 即大量化、快速化、多樣化、價值密度低

  數據量大:大數據摩爾定律

  快速化:從數據的生成到消耗,時間視窗小,可用於生成決策的時間非常少;1秒定律,這和傳統的數據挖掘技術有著本質區別(谷歌的dremel可以在1秒內調動上千台伺服器處理PB級數據)

  價值密度低,商業價值高

大數據影響:

  對科學研究影響:出現科學研究第四方式數據(前三個分別是實驗、理論、計算)

  對思維方式影響:全樣而非抽樣、效率而非準確、相關而非因果

大數據應用:無人駕駛、智能醫療…

大數據一般指數據和大數據技術的綜合

大數據技術,是指伴隨著大數據的採集、存儲、分析和應用的相關技術,是一系列使用非傳統的工具來對大量的非結構化、半結構化、結構化數據進行處理,從而獲得分析和預測結果的一系列數據處理和分析技術

大數據兩大核心關鍵技術:分散式存儲+分散式處理

image

雲計算:通過網路以服務的方式為用戶提供廉價IT資源

雲計算典型特征:虛擬化和多租戶

三種:IaaS、PaaS、SaaS

2 大數據處理架構Hadoop

2.1 Hadoop簡介

Hadoop是Apache軟體基金會旗下的頂級項目,開源分散式計算平臺

為普通用戶屏蔽大數據底層實現細節

是java開發的,但是支持多種編程語言寫應用

不是單一技術,是一整套解決方案的統稱,是一個項目

Hadoop兩大核心:分散式文件系統HDFS+分散式並行框架MapReduce

Hadoop創始人:Doug Cutting

谷歌發佈多種大數據技術:

  2003年,谷歌發佈了分散式文件系統GFS(Google File System),2004年Hadoop就把它納入自己名下進行開源實現,HDFS是GFS的開源實現

  2004年,谷歌發佈了分散式並行編程框架MapReduce,2005年Hadoop也把它納入自己的平臺

隨著Hadoop發展,各種相關項目獨立脫離出來,成為獨立子項目,2008年1月Hadoop正式成為Apache頂級項目

2008年4月,Hadoop用910節點構成集群去做計算,對1T數據做排序只用了209秒,由此而火

特性:

  高可靠性,整個Hadoop平臺採用冗餘副本機制,當某些機器故障剩餘機器仍可提供服務

  高效性

  高可擴展性

  成本低

imageHadoop不同版本,Apache Hadoop版本分為兩代

image

Hadoop1.0到2.0變化:

  將資源調度管理部分單獨抽離出來成為YARN框架(Yet Another Resource Negotiator),2.0由HDFS、MapReduce和YARN三個分支構成,MapReduce只做數據處理工作效率提高,MapReduce是架構在YARN之上的第一個計算框架,YARN也可以支持其他計算框架比如流計算框架Storm批處理計算Spark(Spark採用和MapReduce一樣邏輯但是是採用記憶體計算)等等;

  HDFS1.0的可擴展性不好,2.0提出NN Federation技術,是名稱節點,做數據目錄服務,外界訪問都是訪問這個服務再去取數據,1.0只有一個名稱節點擴展性不好,2.0設置多個名稱節點進行分區管理;2.0還增加HA,對NameNode做了個熱備份;

知名的其他Hadoop開源版本:Hortonworks企業版,CDH(Cloudera Distribution Hadoop)、MapR、星環 等等

推薦企業來講用CDH,個人學習就用Apache Hadoop

imageimage

2.2 Hadoop項目結構

從最初的兩大核心項目演化出非常多子項目成為一個生態圈

image

HDFS負責分散式文件存儲

YARN框架負責資源管理和調度

MapReduce是做離線計算和批處理,不能做實時計算

Tez負責DAG計算,把很多MapReduce作業進行分析優化,構建成一個有向無環圖,可以保證最好的處理效率,分清有些先做有些後做有些不要重覆做

Spark的邏輯和MapReduce一樣,但是是基於記憶體計算,而MapReduce是基於磁碟的計算,所以Spark的性能比MapReduce高一個數量級

Hive是數據倉庫,是架構在MapReduce之上,SQL會被轉化為一堆的MapReduce作業再去執行

Pig是幫你實現流數據處理的,屬於輕量級的分析,提供類似sql的語法叫Pig Latin

Oozie是作業流調度系統

Zookeeper是做分散式協調一致性服務的,負責分散式鎖、集群管理等等

HBase 列式資料庫,非關係型分散式資料庫,支持隨機讀寫和實時應用,HDFS是做順序讀寫的,但在實際應用中很多需要隨機讀寫,就由HBase完成

Flume專門做日誌收集的

Sqoop是在Hadoop和關係資料庫做數據導入導出的

Ambari是個安裝部署工具,幫你在一個集群上面非常智能化的部署和管理監控一整套Hadoop平臺各種套件

2.3 Hadoop的安裝與使用

Hadoop的安裝模式:單機模式(預設)、偽分散式模式、分散式模式

HDFS節點:NameNode、DataNode

MapReduce節點:JobTracker、TaskTracker

NameNode管理各種元數據,裡面很多數據都是直接保存在記憶體中,記憶體要大並且通道優化,帶寬需求更大

SecondaryNameNode,是HDFS中的組件,是冷備份,小的集群直接和NameNode放同一臺機器即可,大的集群要獨立出來

Hadoop集群基準測試:

  自帶基準測試程式;

  用TestDFSIO基準測試,來測試HDFS的IO性能;

  用排序測試MapReduce:Hadoop自帶一個部分排序的程式,測試過程都會通過Shuffle傳輸至Reduce,可以充分測試MapReduce各個組件的性能

3 分散式文件系統HDFS

塊:不同於文件系統中的塊,大很多,預設64M,也可以更大,但是如果太大也會影響MapReduce的性能,是為了降低定址開銷

  支持大規模文件存儲,突破單機存儲容量上限

  簡化系統設計,使元數據設計非常簡單

  適合數據備份

NameNode:負責元數據,整個HDFS的管家,相當於數據目錄

DataNode:具體負責存儲實際數據

元數據包含文件是什麼、文件被分成多少塊、塊與文件的映射關係、塊被存在哪個伺服器等信息

NameNode兩大數據結構FsImage、Editlog

FsImage保存系統文件樹以及文件樹中所有文件和文件夾的元數據(包括文件的複製等級、修改訪問時間、塊大小以及組成文件的塊),FsImage中沒有具體記錄塊在哪個數據節點存儲的,這個信息是單獨在記憶體中維護的,至於塊到底被放到哪個節點中去,這個信息是DataNode彙報而來實時維護的

Editlog記錄對數據的操作如創建、刪除、重命名等

每次啟動時候從磁碟載入FsImage和Editlog到記憶體中,得到最新的元數據FsImage,舊的刪除,同時創建新的空的Editlog,這個模式能夠提高系統效率

當系統運行一段時間後,Editlog變得非常大的時候,系統效率又變慢了,此時第二名稱節點Secondera NameNode開始作用幫助解決Editlog不斷增大的問題,先請求NameNode停止使用Editlog並生成edits.new,然後SeconderaNamenode通過HTTP Get方式把Editlog和FsImage下載到本地進行合併操作得到新的FsImage,再發送給NameNode,然後NameNode把edits.new改為Editlog

HDFS的數據冗餘保存,冗餘因數預設3,當用偽分散式的時候冗餘因數只能是1,能夠加快數據傳輸速度,互為備份能夠方便檢查數據錯誤,高可靠

寫策略:如果是集群內部機器的請求,就把第一個塊放到本節點,如果來自集群外部請求,就會挑選一個磁碟不太慢cpu不太忙的節點來存放,第二個塊就放到與第一個塊不同機架的節點,第三個塊會放到與第一個塊相同機架的不同節點上,如果4、5、6.等塊就會隨機演算法計算

讀策略:一個基本原則是就近讀取,HDFS提供一個API可以確定數據節點所屬的機架id,客戶端也可以調取API獲取自己所屬機架ID,確定遠近關係,當客戶端讀取數據時,從NameNode獲得數據塊不同副本的存放位置列表,列表中包含了副本所在的數據節點,可以調用API來確定客戶端和這些數據節點所屬機架id,當發現同機架id時候優先讀取該副本,否則隨機選擇

容錯:

  如果NameNode出錯整個HDFS實例將失效,會暫停服務一段時間,從SeconderaNameNode恢復過來後再提供服務,1.0是這樣,2.0有熱備HA

  如果DataNode出錯,運行期間DataNode會發送心跳給NameNode,如果故障,把故障機的塊冗餘因數恢復,除了故障可以改變冗餘副本位置,負載不均衡時候也可以Rebalance

  如果數據出錯,校驗碼機制,塊創建的時候同時創建校驗碼保存在同個目錄,讀取時候重新計算校驗碼和保存的校驗碼對比,不一致說明數據出錯,即進行冗餘副本的再次複製

HDFS讀寫數據過程

imageimage

hadoop fs 命令:-ls  -mkdir –cat

把本地文件複製到hdfs中hadoop fs –cp 本地路徑 hdfs路徑

50070埠可以web方式看到hdfs信息,用的比較少

image

java API方式與HDFS交互

Hadoop為HDFS和MapReduce提供基礎JAR包,叫hadoop common

4 分散式資料庫HBase

4.1 簡介

HBase是BigTable的一個開源實現,BigTable最初是為解決谷歌公司內部大規模網頁搜索問題的,BigTable是架構在GFS之上,具有非常好的性能(可以支持PB級別的數據),具有非常好的擴展性

HBase是一個高性能 高可靠列式可伸縮的分散式資料庫,特長是用來存儲非結構化和半結構化的鬆散數據,目標是通過水平擴展存儲海量數據

image

這個架構之上的pig hive等都是可以訪問HBase的數據

為啥有了關係資料庫 HDFS等等還要搞個HBase呢,原因:  雖然已經有了HDFS和MapReduce,但Hadoop主要解決大規模數據離線批量處理,Hadoop沒辦法滿足大數據實時處理需求,而傳統關係資料庫擴展能力沒法應對爆炸式數據增長,即使是讀寫分離分庫分表等操作也有不便利效率低等缺陷,只有HBase能夠滿足不斷增長的數據存儲需求

和傳統關係資料庫區別:

  不是使用關係模型設置各種欄位類型,而是直接存儲未經解釋的二進位數據,由應用程式開發人員來對數據做解釋

  傳統資料庫對數據增刪改等多種操作在HBase中避免了,比如連接操作,這是非常低效的操作

  存儲模式方面基於列

  只支持對行鍵的簡單索引

  在關係資料庫中更新數據時候舊數據刪除掉,HBase中舊的版本還在,每新加的版本會生成新的時間戳標識

  可伸縮性方面,關係資料庫很難水平擴展,最多實現縱向擴展

HBase訪問介面:Java API:Shell、Thrift Gateway(異構系統線上訪問HBase)、REST Gateway(REST風格的HTTP API);SQL類型介面:Pig、Hive

4.2 HBase數據模型

HBase是一個稀疏的多維度的排序的映射表,是列式資料庫

通過行鍵、列族、列限定符、時間戳四個元素表示,HBase中每個值都是未經解釋的字元串也就是Byte數組,由程式員自行對列類型解析

image

和關係資料庫不同,和關係資料庫不同的地方,列族支持動態擴展,且更新數據時候保留舊版本(與HDFS只允許追加不允許修改的特性相關)

以大表的形式來組織,不同於關係資料庫遵循第一範式第二範式第三範式等規範化分解來降低數據的冗餘存儲,查詢的時候不需要多表關聯,追求的是分析的效率,用空間來換取表連接的時間

數據坐標:關係資料庫通過行列定位,HBase是通過四維坐標定位,如果把四維坐標聯合來看也可以當成鍵值資料庫

概念試圖:是一個稀疏表,很多地方是空

物理視圖:底層是按照列族方式存儲

列式資料庫優點:每列數據類型相似可以帶來很高的數據壓縮率、分析效率高

4.3 HBase實現原理

HBase功能組件:

  庫函數:用於鏈接每個客戶端

  Master伺服器:管家,實現對錶的分區信息維護和管理;維護了一個Region伺服器列表;整個集群當中有哪些Region伺服器在工作;負責對Region進行分配;負載均衡

  Region伺服器:負責存取Region

客戶端並不依賴於Master去獲取信息

表會分多個Region,大Region會不斷分裂,分裂的過程不設計底層物理數據,只是修改了它的指向信息而已非常快速,訪問的還是舊的Region,後臺會有合併過程把拆分的數據進行重新操作最終寫到新的文件中得到新的Region,2006以前推薦一個Region大小100到200MB,現在一般最佳是1G到2G,實際取決於單台伺服器的有效處理能力

同一個Region是不會拆分到不同的Region伺服器上的,實際中每個Region伺服器能存儲10-1000個Region

HBase定址:三層結構,首先構建一個元數據表稱.META.表,當.META.表增大後分區由-ROOT-表來維護(-ROOT-表不允許分裂只有1個Region,-ROOT-表的地址寫死在ZooKeeper文件中),為了加快數據存儲速率,元數據表都是放在記憶體中,所以記憶體大小限制了Region個數從而限制了整個HBase的數據大小,但是是滿足企業需求的

為了加速,客戶端會緩存,第一次需要三級定址,後面就不依賴於Master了實現更快的訪問,同時要解決緩存失效問題,HBase採用惰性解決機制,每次都按照緩存信息找,當無法找到數據時候才去更新緩存再次經歷三級定址過程

image

4.4 HBase運行機制

image

客戶端:訪問HBase的介面,為了加快訪問,將已經訪問過的信息緩存

ZooKeeper伺服器:實現協同管理服務,實現分散式協調一致性,被大量用於分散式文件系統,提供配置維護、功能變數名稱服務、分散式同步服務等等,在HBase中就是提供管家功能維護和管理整個HBase集群,動物園管理員,可以確保任何時候只有一個HMaster在運行

Master(主伺服器):負責HBase中表和Region的管理工作,比如對錶的增刪改查都是通過Master進行管理的,同時對不同Region伺服器負載均衡,負責調整分裂、合併後Region的分佈,負責重新分配故障、失效的Region伺服器

Region伺服器:負責用戶數據的存儲和管理

image

每個Region伺服器可以存儲10-1000個region,共用一個日誌文件HLog,每個列族單獨構成一個Store,Store數據不是直接寫到底層,要先寫到MemStore緩存中,緩存滿後刷寫到磁碟文件StoreFile,StoreFile是HBase中的表現形式底層是藉助於HDFS來存儲的是通過HFile文件存儲的

用戶讀寫數據過程:寫數據時候先到Region伺服器,先寫緩存寫MemStore,為了保護數據,必須先寫日誌HLog,只有HLog完整寫入磁碟才允許調用返回給客戶端;讀數據也是先訪問MemStore再找StoreFile,因為最新數據都在MemStore而不是磁碟StoreFile中

緩存刷新:系統會周期性把MemStrore緩存中的內容寫入磁碟StoreFile中,清空緩存,併在HLog寫入個標記,每次刷寫都會生成一個StoreFile,所以一個Store會包含多個StoreFile文件;每個Region伺服器啟動都檢查HLog文件確認最近一次執行緩存刷新操作之後是否有新的寫入操作,如果發現更新則先寫入MemStore再刷寫到StoreFile最後刪除舊的HLog文件,開始為用戶提供服務

StoreFile合併:當StoreFile數量多的時候索引數據變慢,達到一定閾值執行合併為大的StoreFile,這個合併操作相當占用資源;當StoreFile合併大到一定程度後又會引發分裂操作

imageHLog工作原理:就是通過日誌來保護數據,ZooKeeper負責監視整個集群,檢測到故障,會告訴Master伺服器,Master會處理故障,Master伺服器會把故障機器的遺留的HLog拉去過來,然後把各個Region的操作分拆出來,再分配給各個Region日誌重做

4.5 HBase應用方案

性能優化方法:

  時間靠近的數據都存在一起   時間戳(升序排序、越到後時間戳越大,長整型64位),可以用系統最大的整型值減去時間戳long.MAX_VALUE-timestamp作為行鍵,排序就反過來了從而改變排序順序,保證最新寫的數據讀的時候很快命中

  如果對實時性較高,將相關數據放到伺服器緩存來提升讀寫性能,可以在創建表的時候設置HColumnDescriptor.setInMemory選項為true,這樣可以把相關表放入region伺服器緩存中加快io

  設置HColumnDescriptor.setMaxVersions可以設置最大版本數,設置1,就不會保存過期版本,可以節省空間

  沒有達到最大版本數的數據想清理掉咋辦,設置TimeToLive參數,一旦超過生命周期就稱為過期數據,就自動被系統刪除掉,如果只需要最近兩天的數據設置setTimeToLive(2*24*60*60),超過2天的數據自動清空

檢測性能:

  Master-status是HBase自帶工具通過web方式可以查詢HBase運行狀態

  Ganglia是UC Berkeley發起的一個開源集群監視項目用於監控系統性能也支持對HBase進行性能監控

  OpenTSDB可以從大規模集群中獲取相關的性能參數,然後存儲索引並可視化的方式提供給管理員

  Ambari是Hadoop架構上的產品,作用是創建管理,監視整個集群,HBase也是集群一部分,所以也可以對HBase進行監視

sql引擎Hive去整合HBase,另外一個產品叫Phoenix

  Hive0.6.0版本開始已經具備和HBase的整合功能,它們的介面互相通信即可實現對HBase的訪問

  Phoenix是致命SaaS提供商Salesforce的產品,開源,是構建在Apache Hadoop之上的一個SQL中間層,通過它允許開發者在HBase上執行SQL查詢

構建HBase二級索引(輔助索引)

  原生HBase是不支持二級索引的,預設索引只有行鍵,HBase原生產品只有通過單個行鍵或者行鍵起始結束點或者全表掃描三種方式來訪問

  HBase0.92版本以後的新特性叫Coprocessor,充分利用這個特性幫助建立二級索引,比如華為的Hindex、Redis Solr等等

  怎麼利用特性構建二級索引Coprocessor提供2個實現:endpoint、observe(endpoint相當於關係資料庫的存儲過程,observe相當於觸發器),在更新表的同時觸發器或者存儲過程去維護索引表即二級索引,這不是HBase資料庫自身的索引,優點是非侵入性,既沒有對HBase做任何改動也不需要對上層應用做任何妥協,缺點是同時維護索引對集群壓力倍增耗時也是倍增

  華為的Hindex是java編寫的支持多個表索引也支持多個列索引,而且也支持基於部分列值的索引

  HBase+Redis,Redis是鍵值資料庫,能高效管理鍵值對,在Redis資料庫中管理索引,再定期把索引更新到HBase底層數據中,效率更高

  HBase+Solr,Solr是高性能基於Lucene的全文搜索伺服器,Solr構建的是其他列和行鍵之間的對應關係,這種方式也是很高效的

4.6 HBase的安裝配置和常用Shell命令

下載HBase安裝文件,然後解壓到/usr/local,如果是單機版本解壓即可用,如果是偽分散式需要配置,bin目錄加入到path中

HBase配置有三種:單機(解壓即可用)、偽分散式(讓HBase通過HDFS存取數據)、分散式(用多台機器存取)

偽分散式:要配置JAVA_HOME;要配置Hadoop,實現無密碼SSH登錄;要先啟動hadoop再啟動HBase,關閉也是;修改配置文件時候有個選項hbase.managers.zk,這是配置ZooKeeper的,可以單獨安裝ZooKeeper組件服務來支撐HBase,也可以用HBase自帶的ZooKeeper組件來提供服務

SHELL命令:create、list、put、get、drop

imageimageimageimage

4.7 常用Java API 

HBase是java開發的,有原生java api,也支持其他語言的編程

首先要導入jar包,到hbase安裝目錄中lib目錄所有jar包導入(註意不要導入上節課的hadoop的jar包,會發生版本衝突)

imageimageimageimageimageimageJava 和shell的功能是一樣的

5 NoSQL資料庫

5.1 概述

NoSQL:not only sql  是關係資料庫的有益補充,有靈活的可擴展性、靈活的數據模型、和雲計算緊密結合

傳統資料庫缺陷:

  無法滿足web2.0的需求:沒有辦法滿足海量數據需求、沒有滿足高併發需求、無法滿足高可擴展性和高可用性

  數據模型的局限性:用一個模型適應所有業務場景是不行的,hadoop針對離線分析、mongoDB和Redis都是針對線上業務,這些都是拋棄了關係模型

  web2.0關係資料庫許多特性無法發揮,事務機制和高效的查詢機制這兩個關係資料庫的突出特性在web2.0時代成為雞肋,

    web2.0通常是不要求嚴格資料庫事務的,比如發個微博失敗與否關係不大,不像銀行這些,事務機制需要很高額外開銷,

    web2.0一般不要求嚴格的讀寫實時性

    web2.0不包含大量複雜sql查詢,web2.0設計時候就避免了多表連接,連接操作是代價很高的,去結構化非規範化,寧可適當冗餘來換來更好的性能

5.2 NoSQL資料庫和關係資料庫比較

關係資料庫有完備的關係代數理論作為基礎,NoSQL資料庫缺乏統一理論基礎

RDBMS是很難橫向擴展,縱向擴展也有限,NoSQL有很強的水平擴展性能

關係資料庫要事先定義嚴格的數據模式,NoSQL數據模型靈活

關係資料庫在適當數據量的時候查詢效率高,數據量級增大後查詢效率下降,NoSQL未構建面向複雜查詢的索引,查詢性能差

事務一致性方面,關係資料庫遵循ACID事務模型可以保證事務強一致性,NoSQL在設計時候放鬆一致性要求,採用BASE模型,BASE模型也是NoSQL資料庫三大理論之一(CAP、BASE、最終一致性)

數據完整性,關係資料庫具有保證完整性的完備機制來實現實體完整性參照完整性用戶自定義完整性等,NoSQL不能實現完整性約束

可擴展性,關係資料庫很差,NoSQL很好

可用性,關係資料庫在小規模數據時候可用性還可以,數據量級大後可用性削弱,因為關係資料庫設計之初優先保證嚴格的一致性,NoSQL有非常好的可用性,能夠迅速返回所需結果

標準化方面,關係資料庫遵循SQL標準,標準化完善,NoSQL未形成通用的行業標準,2015圖領獎獲得者邁克爾·斯通佈雷克就認為NoSQL缺乏統一標準會在後面發展受到拖累

技術支持方面,關係資料庫很多是商業資料庫,能夠獲得強大的技術支持和後續服務支持,NoSQL很多是開源產品處於起步階段,技術支持不如rdbms

可維護性,關係資料庫需要dba維護,NoSQL維護更加複雜,因為它沒有成熟的基礎和實踐操作規範,維護較為複雜

RDBMS:理論完備、有嚴格標準、支持事務一致性、可以藉助索引機制實現高效查詢,可擴展性差,尤其不具備水平可擴展性,無法支持海量數據存儲,數據模型定義嚴格無法滿足web2.0應用需求;用於電信銀行的關鍵業務系統

NoSQL:支持超大規模的數據存儲、數據模型靈活,缺乏底層基礎理論支撐,不支持事務強一致性,導致無法用於關鍵業務;用於互聯網企業以及傳統企業的非關鍵性業務

無法互相取代,甚至有時候需要混合架構

5.3 NoSQL資料庫的四大類型

鍵值資料庫、文檔資料庫、列資料庫、圖資料庫

image

鍵值資料庫:

  代表產品Redis、Memcached(Redis之前比較火的是Memcached,現在越來越多企業轉向Redis)、SimpleDB(亞馬遜在雲中產品提供的鍵值資料庫)

  數據模型:鍵是一個字元串對象,值是任意類型數據,比如整型字元數組列表集合等等

  典型應用:涉及頻繁讀寫、擁有簡單數據模型的應用;內容緩存,如會話、配置文件、參數、購物車等;存儲配置和用戶數據信息等移動應用

  優點是擴展性好理論上有無上限的擴展空間,靈活性好,大量讀操作性能高

  缺點是無法存儲結構化信息,條件查詢效率低,鍵值資料庫根本不允許對它的值索引,值是對用戶透明的,只能一個個找到key後訪問value,也無法鍵與鍵之間關聯,實現不了複雜查詢

  不適用:鍵值資料庫根本沒有通過值查詢的路徑,如果不是通過鍵而是通過值來查詢,就不要用;不能通過兩個或以上的鍵關聯數據;一些鍵值資料庫中,產生故障時不能回滾

  使用者:百度雲資料庫(Redis)

實際生產中,鍵值資料庫是理想的緩存層解決方案

image

列族資料庫:

  代表產品:BigTable、HBase(master slave結構)、Cassandra (不同於HBase,是對等結構,是p2p結構)

  數據模型:簡單,就是列族

  典型應用:分散式數據存儲和管理;數據在地理上分佈於多個數據中心的應用;可以容忍副本中存在短期不一致情況的應用;擁有動態欄位的應用

  優點:可擴展性強,查詢速度快,複雜性低

  缺點:功能少,缺乏事務一致性支持,HBase有些人說是支持一致性,但是Cassandra就不支持

  不適用:需要ACID事務特性的情形Cassandra就不適用

  使用者:Facebook(HBase),Yahoo(HBase)

5.4 NoSQL三大理論基石 CAP理論、BASE、最終一致性

CAP理論:C consistency 一致性,A availability 可用性,P partition tolerance 分區容忍性(當出現網路分區的情況時,即系統中的一部分節點無法和其他節點通信,分離的系統也能正常運行)

理想的分散式系統是同時滿足CAP特性,但是理論研究和實踐證明這是做不到的,不能魚和熊掌兼得,只能三者取其二,必須犧牲一個性質成就另外兩個性質

image

BASE:Basically Available Soft state 和Eventual consistency的簡寫

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

Soft state:硬狀態是資料庫一直保持一致性,軟狀態指可以有一定的滯後性

Eventual consistency最終一致性:一致性包含強一致性和弱一致性,二者區別在於高併發的數據訪問操作下,後續操作能否獲取最新的數據,最終一致性是弱一致性的一個特例

imageimageimageimage

對於HBase而言,底層是藉助HDFS的,而HDFS採用強一致性,在數據沒有同步到N個節點前是不會返回的,而對於Cassandra而言都可以設置三者的值,來選擇最終一致性,這些資料庫產品還會提供最終一致性的支持

5.5 從NoSQL到NewSQL資料庫

和NewSQL對應的是OldSQL,傳統資料庫設計都期望One Size Fits All,但是這種理想狀態被證明是不可實現的

轉而對改變為對不同應用場景使用不同資料庫,事務性應用用OldSQL,互聯網應用用NoSQL,分析型應用用NewSQL

image

NewSQL充分吸收了OldSQL和NoSQL的各自優點,仍然採用關係模型提供強事務一致性,同時借鑒NoSQL有非常好的水平擴展支持海量數據存儲

典型產品:亞馬遜的RDS、微軟SQL Azure(底層還是sql server相關技術)

image

5.6 文檔資料庫MongoDB

文檔資料庫是介於關係資料庫和NoSQL之間的產品,最像關係資料庫,是當前最熱門的產品

MongoDB是C++編寫的基於分散式文件存儲的開源資料庫系統

高負載情況添加更多節點保證數據服務性能,水平擴展能力強

MongoDB旨在為WEB應用提供可擴展的高性能數據存儲解決方案

MongoDB將數據存儲為一個文檔,數據結構由鍵值對組成MongoDB文檔類似JSON對象,欄位值可以包含其他文檔、數組及文檔數組,文檔格式叫BSON,是Binary類型的JSON文檔

特點是:

  提供面向文檔的存儲,操作簡單容易;

  相對於鍵值資料庫有個很好的特性,它可以針對不同的任何的屬性索引,實現更快的排序;

  較好的水平擴展能力;

  有豐富的查詢表達式可查詢文檔中內嵌的對象和數組;

  可替換已完成文檔的某個指定的數據欄位;

  MongoDB中MapReduce主要是用來對數據進行批量處理和聚合操作

  安裝簡單

術語和關係資料庫差不多

imageimage

關係資料庫中一般遵循範式設計,查詢時候需要多表查詢,MongoDB不需要跨表連接,一個文檔即可完整表述,提供併發性易用性

一個MongoDB可以建立多個資料庫,預設資料庫“DB”,存儲在data目錄,MongoDB的單個實例可以容納多個資料庫,每個都有自己的集合和許可權和自己的文件

MongoDB不需要設置相同的欄位,並且相同欄位不需要相同數據類型

提供shell和java api訪問方式

6 雲資料庫

6.1 概述

雲計算是通過網路以服務的方式為用戶提供非常廉價的IT資源

雲計算優勢:按需服務、隨時服務、通用性、高可靠性、極其廉價、規模龐大

IaaS、PaaS、SaaS

雲資料庫是部署和虛擬化在雲計算環境當中的數據

雲資料庫繼承了雲計算的特點:動態可擴展、高可用、廉價、易用性、免維護、高性能、安全

image

雲資料庫只是關係資料庫NoSQL資料庫在雲端的實現,並不是新的資料庫,也沒有全新的數據模型

6.2 雲資料庫產品

image

最知名的是亞馬遜Amazon的雲數據服務,主要是鍵值資料庫Dynamo和簡單的資料庫存儲服務SimpleDB以及關係資料庫RDS,也有分散式緩存服務的Amazon ElastiCache,也提供雲中數據倉庫服務Redshift

谷歌也有雲資料庫產品叫Google Cloud SQL,是基於MySQL的,支持雲中事務,提供帶JDBC和DB-API支持的傳統MySQL環境,對開發者而言,Google Cloud SQL有個優勢是和Google APP Engine(PaaS層)集成的

微軟SQL Azure,基於SQL server,在推出之前很多雲資料庫都是NoSQL,所以微軟推出雲關係資料庫是很有貢獻的,很多企業需要事務支持,同時它也支持存儲過程,SQL Server的產品無需更改可以直接部署到SQL Azure了,但是SQL Azure的事務是局部事務而不是分散式事務

oracle也有Oracle Cloud

雅虎的PNUTS

國內的阿裡騰訊百度都有自己的雲資料庫,但是底層都是國外的這些資料庫,百度提供了以鍵值模型為基礎的雲資料庫採用的就是Redis

6.3 雲資料庫系統架構

雲資料庫架構多樣,選取一種介紹,就是阿裡巴巴開發的通用MySQL集群,就是UMP(Unified MySQL Platform),在阿裡內部得到廣泛使用,突出特點是低成本高性能

UMP在設計時原則:

  整個系統保持單一的對外訪問入口

  消除單點故障,保證服務的高可用

  具有良好的可伸縮性,可以根據外部負載動態的增加減少計算資源

  可以實現資源之間的相互隔離

多租戶共用資料庫,可能出現某個用戶消耗的資源過多影響其他租戶導致整個系統不穩定,UMP在設計時候就有資源之間隔離限制避免此種情況發生

image

Mnesia:

  UMP本質上就是個分散式資料庫,分散式資料庫不需要團隊從0開發,Mnesia就是基於Erlang語言開發的分散式資料庫管理系統,專門針對電信領域開發的資料庫管理系統

  具有非常好的特性,支持事務,支持透明的數據分片,利用兩階段鎖實現分散式事務,可以線性擴展到至少50節點

  Schema可在運行時動態配置

RabbitMQ:

  是一個工業級的消息隊列產品,比較常見的商業的消息隊列產品如IBM WEBSPHERE MQ,消息隊列是用來傳遞不同組件之間的消息,一個大的分散式系統有各種組件,組件之間的消息傳遞肯定不能是面向連接的,面向連接的資源消耗大效率低,一般都是非同步,面向連接的是是同步傳輸,分散式系統為了提高效率都是採用非同步傳輸,採用消息隊列來保證消息生產者到消息消費者

ZooKeeper:

  HBase中提過,典型功能是高效可靠的協調服務包括統一命名服務、狀態同步服務、集群管理、分散式鎖等等,在UMP系統中ZooKeeper發揮三個作用:

    作為全局的配置伺服器,一旦某個伺服器的配置更改,ZooKeeper監聽到,就通知其他伺服器把最新的配置取走,減少許多人工干預,實現多個伺服器配置一致性

    提供分散式鎖(選出一個集群的“總管”),UMP系統設計收有Controller(管家角色),為了避免單點故障,有多個管家,但是某個時候只有一個管家能起作用

    監控所有MySQL實例,發生故障後及時探測到並報告給管家

LVS:將一組伺服器構建為高性能高可用的虛擬伺服器,對用戶在看只有一個ip一個伺服器,但是後面是整個集群,只不過通過負載均衡技術把請求引導到集群各個節點

  Linux Virtual Server,是一個虛擬機的伺服器集群系統,是一個通用的集群負載均衡框架,  UMP系統藉助LVS實現集群內部的負載均衡,有故障機也能屏蔽掉

  LVS集群採用IP負載均衡技術基於內容請求分發技術

調度器是LVS集群系統的唯一入口

  整個集群結構對用戶來講是透明的

Controller伺服器:UMP集群的總管,實現各種管理服務,集群成員的管理、元數據的存儲、MySQL實例管理、故障恢復、備份遷移擴容等等功能,上面運行了一組Mnesia分散式資料庫服務,這裡面有些元數據,包括集群成員、用戶的配置和狀態信息,“路由表”(記錄了用戶名到後端MySQL的映射關係),其他的組件就可能找管家要這些元數據,同時為了避免單點故障,整個系統設置了多個Controller伺服器,在某個時刻有且只有一個管家提供服務,由ZooKeeper伺服器來幫你選定唯一管家

WEB控制台:允許用戶通過web方式管理訪問平臺

Proxy伺服器:向用戶提供訪問MySQL資料庫的服務,實現了MySQL協議,用戶的認證信息、資源的配額信息(QPS、IOPS、最大連接數等等)、後臺MySQL實例的地址,具有這樣的路由功能

Agent伺服器:也是個代理,部署在各個MySQL伺服器上管理MySQL,由該組件負責管理這個伺服器並和其他伺服器通信

日誌分析伺服器:對整個日誌分析,慢日誌分析

信息統計伺服器:統計到系統運營數據,包括用戶連接數,每秒查詢數QPS,MySQL實例的進程狀態,這些都可以通過web界面可視化實時展現,這些信息不僅可以給用戶和管理員看,也可作為系統後期彈性資源分配的依據和自動化的MySQL實例遷移的依據

愚公系統:功能簡單也很強大,就是做數據遷移的,允許系統不停機的情況下實現動態擴容、縮容、遷移

6.4 UMP系統功能

容災、讀寫分離、分庫分表、資源管理、資源調度、資源隔離、數據安全

容災:UMP系統會為每個用戶創建2個MySQL實例一主一從,主庫從庫狀態也是由ZooKeeper伺服器維護,一旦發生故障啟動主從切換,首先Controller伺服器要修改路由表,然後把主庫標記不可用,通過消息中間件RabbitMQ告知所有Proxy伺服器,整個過程對用戶透明,切換完成後主庫恢復,主庫追到和從庫一致,Controller伺服器命令從庫鎖定,然後再次追到一致,再次切換回來,整個過程有少許故障時間

讀寫分離:利用主從實例完成讀寫分離,寫操作發到主庫,讀操作被均衡的發送到主庫和從庫

分庫分表:UMP系統支持對用戶透明的分庫分表,指的是系統運行過程中動態自動的分庫分表,但是在之前需要人工定義分庫分表規則,當採用分庫分表時,系統查詢過程是,Proxy伺服器解析SQL語句,提取出重寫和分發SQL語句需要的信息,對SQL語句進行重寫,得到針對像一個的MySQL實例的子語句,分發到各個MYSQL實例執行,最後接受各個mysql實例執行結果合併最終結果給用戶

資源管理:整個UMP系統採用資源池機制對所有資源進行管理

負載均衡:負載較輕的伺服器來創建MySQL實例

資源調度:UMP系統三種用戶,數據量流量都很小、中等規模、大規模需要分片分表的用戶,對於小規模用戶,一般多個用戶共用一個MySQL實例,中等規模用戶獨占一個MySQL實例,大規模的用戶占用多個MySQL實例

資源隔離:2中方式隔離

image安全機制:SSL資料庫連接;提供數據訪問IP白名單;記錄用戶操作日誌;SQL攔截

6.5 Amazon AWS和雲資料庫

很多雲計算相關的概念和服務都源於亞馬遜,別看他是電子商務,但是為雲計算的發展具有里程碑意義的開拓性的貢獻

亞馬遜開創的雲計算的服務模式:把IT資源作為一種服務出租給美國中小企業,他高峰期和低峰期不一樣,低峰期的時候把資源通過雲計算的方式出租給中小企業,2006年推出這種方式的時候獲得非常好的市場認可,06年還沒有雲計算的概念,他的業務量相當於谷歌微軟這些的總和,每年帶來幾十億美金收入,成為亞馬遜主營收入,全球用了12個區域性的數據中心,擁有非常多的用戶,在資料庫方面也如火如荼,和oracle也產生了全面競爭,Amazon RDS已經有了10萬多活躍用戶,近期推出的自己開發的關係資料庫Aurora,成長速度非常快

亞馬遜在IaaS、PaaS、SaaS三層都提供服務

imageimageimage

區域region   12個 每個區域自成體系

可用區Availability Zone  在region之下,類似一個個數據中心機房

邊緣節點Edge Locations,負責內容分髮網絡CDN,CDN服務是為了加快用戶訪問速度

網路層提供直連服務,也提供VPN方式連接,Route 53(提供高可用高可伸縮的雲功能變數名稱解析系統)

計算層:EC2,Elastic Compute Cloud,彈性計算雲;ELB,提供負載均衡器

存儲:S3:簡單對象存儲服務;EBS,Elastic Block Storage,彈性塊存儲服務專門針對EC2虛擬機設置;Glacier,用於較少使用的文檔存儲和備份,價格便宜;

資料庫:SimpleDB:基於雲端的鍵值數據存儲服務;DynamoDB:性能高,容錯性強,支持分散式;RDS:支持MySQL,SQL Server和Oracle等資料庫;Amazon ElastiCache,資料庫緩存服務

應用程式層:企業搜索服務;隊列服務;工作流服務;內容分發服務;彈性MapReduce

部署和管理服務:可以進行自動化一鍵式的相關部署

產品分類:

  計算類:彈性計算雲EC2,EC2提供了雲端的虛擬機;彈性MapReduce,在雲環境中部署Hadoop MapReduce環境,通過EC2虛擬機動態執行MapReduce計算任務

  存儲類:彈性塊存儲EBS;簡單消息存儲SQS;Blob對象存儲S3;NoSQl資料庫;關係資料庫RDS

image

EC2最大特點:允許用戶根據需求動態調整運行實例的類型和數量,實現按需付費

EC2平臺主要幾大部分:EC2實例(AMI),彈性塊存儲,彈性負載均衡

如何部署到虛擬機:需要把自己的應用程式和配置文件製成亞馬遜機器鏡像文件AMI,Amazon machine Image,然後複製到EC2實例,EC2實例是彈性伸縮的組;數據存到EBS,要加備份的話可以存到S3

image

EC2本地存儲是實例自帶的磁碟空間,不是持久化的,下麵情況會清空:本地磁碟里的相關服務已不用了;服務故障;

為瞭解決本地存儲不可靠的問題,必須用EBS;

EBS通過捲來組織數據,每個EBS捲只能掛在到一個EC2實例

EBS捲不是與實例綁定而是與賬號綁定

imageimageimage

SimpleDB:AWS上第一個NoSQL資料庫服務,鍵值資料庫,性能不是很好,現在很少用了,支持數據多副本存儲,支持高併發讀取,比較適合小型的碎片化的零散數據

  由於它涉及上的很多缺陷它有很多限制,明顯限制是單表限制,每個域最多存儲10G,沒辦法滿足大規模數據存儲需求,

  性能不穩定,可以輔助索引,更新操作由於索引開銷更大,

  它採用最終一致性,更新操作只能針對主副本進行,但可以快速傳播到其他副本,也沒有辦法滿足一些用戶需求

DynamoDB:因為SimpleDB這麼多缺陷,亞馬遜推出另外的產品DynamoDB,

  吸收優點並改進,尤其提供一致性讀功能,而不是最終一致性

  根據主鍵去操作記錄不允許進行批量更新,不是SimpleDB那樣可以設置多列所以降低性能,這個時候它可以取得更好的性能

  全部採用固態盤進行存儲

RDS:關係數據服務,目前支持MySQL,Oracle,SQL Server,PG,MariaDB,Aurora,其中Aurora是最近幾年推出來的

RDS建立3T數據,帶3萬個DB實例

6.5 微軟雲資料庫SQL Azure

針對行組實現事務,分區,但是不支持跨分區事務,跨了行組事務就不支持了

每個分區都是冗餘副本,一般是3,一個主副本2個從副本

image

通常一個資料庫被分散存到3-5個實例中

6.6 雲資料庫實踐

阿裡雲RDS:安全穩定、數據可靠、自動備份、管理透明

RDS實例是用戶購買的基本單位

imageimage

7 MapReduce

7.1 概述

MapReduce是一種分散式並行編程框架

摩爾定律05年後逐漸失效,因為cpu製作工藝是有上限天花板的,單位面積能夠集成的晶體管數量實際上有上限,集成到一定程度後,佈線過密會導致互相之間收到熱效應磁場效應干擾,cpu不再像以前一樣每18月性能翻倍

雖然cpu摩爾定律失效,但是數據增長卻依然遵循摩爾定律,所以一個增長一個停止增長,所以在數據處理計算能力方面的矛盾實際上就很突出,業界學術界都開始尋求其他方式提升數據處理能力,有兩條路線:一種是單核cpu到雙核到四核到8核,另外一種就是分散式並行編程

Hadoop MapReduce對谷歌的MapReduce做了開源實現,並優化

實際上谷歌MapReduce之前也有其他的並行編程框架,比如MPI,消息傳遞介面,一種非常典型的並行編程框架,再比如OpenCL或者CUDA

image

MapReduce模型把整個系統複雜的計算任務高度抽象為兩個函數Map和Reduce,屏蔽所有底層細節,極大降低分散式編程難度

策略:分而治之

理念:計算向數據靠攏而不是數據向計算靠攏

imageimage架構上 採用Master/Slave架構

imageimageimage

7.2 MapReduce體繫結構

image

client:通過客戶端提交用戶程式給JobTracker;客戶端也可以通過它提供的一些介面查看作業運行狀態

JobTracker作業跟蹤器:負責資源的監控和作業的調度;監控底層其他的TaskTracker以及當前運行的Job的健康狀況;一旦探測到失敗就把這個任務轉移到其他節點繼續執行;它還會跟蹤作業執行進度和資源使用量,它會把這些信息發送給任務調度器Task Scheduler,Task Scheduler負責具體任務調度,是個可插拔模塊,就是允許用戶自己編寫調度模塊,就是採用自己的任務調度策略去實現

TaskTracker:執行具體任務,一般接受JobTracker的命令;把自己的資源使用情況以及任務的執行進度通過心跳方式heartbeat發送給JobTracker

  在MapReduce設計中,TaskTracker以槽的概念slot,slot是一種資源調度的單位,把整個機器上面所有cpu記憶體資源打包,然後等分為很多slot,slot分為兩種,一種是map類型的slot,就是專門給map任務用的slot,一種是reduce類型的slot,就是專門給reduce任務用的slot,兩種slot是不通用的,這個不通用性也是設計缺陷,這個缺陷在hadoop2.0中有修複

Task任務:一種是map任務,專門執行map函數,另外一種是reduce任務,專門執行reduce函數

7.3 MapReduce工作流程

image

大概流程:在hdfs中數據集是各種分片split,為每個split單獨啟動一個map任務,這些map任務輸入是很多key和value,輸出也是很多key和value,然後map的結果分成很多區發送到不同的reduce上後續處理,分多少區一般取決於reduce機器,這個把map輸出結果進行排序歸併合併,這個過程叫做shuffle,這個中間包含數據分發的過程,最後reduce處理後保存到hdfs中

不同的map任務是不會互相通信的,不同的reduce任務之間也不會發生信息交換,用戶也不能顯式的從一臺機器發送消息給另外機器,所有的都是由MapReduce框架自身實現的,不需要用戶參與,大大降低應用程式開發難度

image

假設就2個節點,來分析下MapReduce各個階段

註意InputFormat模塊的Split是邏輯的,並不是實際物理上分片

RR:Record Reader 記錄閱讀器,根據分片的長度信息起始位置去底層HDFS找到各個塊,並讀出來為Key value形式

map由用戶自己編寫

shuffle洗牌:分區 排序 歸併 合併,之後才能發給相對應的reduce處理

reduce也是由用戶編寫的 完成分析

OutFormat模塊對輸出檢查並寫入到HDFS

邏輯分片不是越大越好或越小越好,肯定有個理想值,越小,導致啟動map任務過多,map任務切換等等都會占用過多管理資源導致效率低下,如果分片過小也會影響並行度,一般實際應用中用一個塊的大小作為一個split大小64M或者128M

map數量就是分片數量決定

最優的reduce任務個數取決於集群可用的reduce slot數量,但是一般略少些,可以預留些給可能發生的錯誤

7.4 shuffle過程原理

shuffle過程是理解MapReduce過程的核心

image

map結果先寫到緩存,緩存滿的時候發生溢寫,溢寫中有分區、排序和可能發生的合併操作之後保存到磁碟文件,溢寫是多次,生成多個磁碟文件,多個磁碟文件要歸併為大的磁碟文件,那麼這

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

-Advertisement-
Play Games
更多相關文章
  • 接業務需求,有一個MongoDB的簡單查詢,太耗時了,執行了 70S 左右,嚴重影響用戶的體驗。。 查詢代碼主要如下: 此集合在欄位OPTime上有索引idx_OPTime;在"Tags"數組中的內嵌欄位"SN"有索引idx_TSN;兩者都是獨立的索引。此集合存放的是執行Log,相對Size較大。 ...
  • Spark Scala當中reduceByKey(_+_) reduceByKey((x,y) => x+y)的用法 ...
  • 公司系統升級的時候需要數據遷移,遇到一個問題:新表的數據結構和舊表異構,舊表是流水號,新表是聯合主鍵(業務號碼+業務號碼序號) 最後發現用視窗函數 row_number() + partition by 就可以完美的實現,這裡記錄下,本人膽子比較小以至於例子中的表名和欄位名都是瞎寫的,嘻嘻,以後再遇 ...
  • 本文用的是Oracle 10g資料庫,利用PL/SQL Developer的集成開發環境(安裝可以自行百度)Oracle資料庫 > 資料庫實例 > 表空間(邏輯單位)(用戶) > 數據文件(物理單位)可以理解為下麵地球 > 一個國家 > 省份(邏輯單位)(公民) > 山川河流(物理單位)通常情況下, ...
  • 對於所有的需求,當你不知道怎麼處理的時候,你就先用最簡單的方法,或者說的明白一點,用最原始的方法,先實現業務需求再說。 一、對提現隊列數據表“ims_checkout_task”進行彙總統計,按月彙總統計每個月的提現總額,提現總次數。 1、SQL操作如下: 2、資料庫返回如下: 3、關鍵詞:case ...
  • 【發現問題】 【問題分析】 Ⅰ、在前端界面查詢,發現了庫存中存在這樣的數量值。但是在資料庫中查詢時顯示正常。即6.999999999999997 為 7。 Ⅱ、至於這種小數產生,我以為是oracle存儲過程計算的時候也會失真?後來發現我這是由於其他問題造成的。 🌂對於前端和資料庫的查詢結果不一致, ...
  • 二、主從搭建 2.1測試目標 測試postgresql主從搭建安裝過程 2.2環境準備 實例級別的複製 流複製主庫可讀寫,但從庫只允許查詢不允許寫人, 而邏輯複製的從庫可讀寫 流複製實驗環境 主機 主機名 Ip地址 操作系統 Postgresql版本 主節點 pgsql 192.168.231.13 ...
  • ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...