1. 程式人生 > >資料中心儲存架構-劉新民(資料中心 儲存)

資料中心儲存架構-劉新民(資料中心 儲存)

資料中心儲存架構

文/劉新民

儲存系統是資料中心IT環境的核心基礎架構,是資料中心資料訪問的最終承載體。儲存在雲端計算、虛擬化、大資料等相關技術進入後已經發生了巨大的改變,塊儲存、檔案儲存、物件儲存支撐起多種資料型別的讀取;集中式儲存已經不再是資料中心的主流儲存架構,海量資料的儲存訪問,需要擴充套件性、伸縮性極強的分散式儲存架構來實現。

在新的IT發展過程中,資料中心建設已經進入雲端計算時代,企業IT儲存環境已經不能簡單的從一般性業務運營需求來構建雲端計算的資料中心儲存環境。雲端計算資料中心的建設不是為了滿足某一個業務系統的特殊目標,是為了實現所有業務系統在雲平臺上能夠實現靈活的資源排程、良好的伸縮性、業務擴充套件的彈性以及快速交付性。因此,是一種自下而上的建設模式(如圖1所示),基於雲端計算平臺的建設先於應用系統需求,並不再與具體的業務捆綁,應用系統的建設、擴容、升級主要以軟體為主,硬體物理資源向資源池申請,儲存系統成為雲資料中心的可分配、可排程的資源,在這種情況下,有助於消除瓶頸、提高處理速度,使得業務系統穩定、高效、持久執行。


圖1 資料中心的系統建設發展

1     資料中心儲存架構的演進

隨著資料中心從最初的孤立系統企業級應用,發展到網際網路化階段的大規模雲端計算服務,其儲存架構也不斷髮展(如圖2所示)。從滿足關鍵系統的效能與容量需求,到以虛擬化架構來整合資料中心儲存資源,提供按需的儲存服務和自動化運維,並進一步向儲存系統的智慧化、敏捷化演進,應用需求的變化是儲存架構不斷改進提升的驅動力,豎井式、虛擬化、雲端儲存三種架構並存是當前現狀,軟體定義儲存架構的出現則是後雲端計算時代的儲存發展階段。


圖2 儲存系統系統架構和管理演進

ž  豎井式架構

對於早期的系統,在主機架構下,資料和邏輯是一體的,採用面向過程的設計方法,每個應用是一個孤立的系統,維護相對容易,難於相互整合;客戶機/伺服器架構將邏輯與資料進行了分離(不論C/S還是B/S模式,本質都是客戶機/伺服器架構),同樣採用面向物件的設計方法,每個應用是一個孤立的系統,提供了一定後臺整合的能力。這種架構的儲存也隨著系統的建設形成了自身的獨立性,業務平臺的硬體裝置按照規劃期內最大使用者數來配置,而在業務初期和業務發展情況難預測的情況下,無法真實評估儲存的規模與效能要求,這往往會浪費不少硬體裝置資源和空間、動力等資源,並且硬體資源不能靈活排程。每個業務上線都需要經過軟體選型、評估資源、硬體選型、採購和實施等環節,業務上線流程長、時間跨度大,不利於業務發展。

即使是企業資料中心進入雲端計算時代,大量的應用逐步向雲的環境遷移,但因為某些系統獨特的技術要求,這種豎井式架構也會長期存在。

ž  儲存虛擬化

隨著業務發展,資料中心儲存不可避免形成大量的異構環境,標準化的管理流程難以實施。儲存虛擬化架構實現對不同結構的儲存裝置進行集中化管理,統一整合形成一個儲存池,向伺服器層遮蔽儲存裝置硬體的特殊性,虛擬化出統一的邏輯特性,從而實現了儲存系統集中、統一而又方便的管理。使得儲存池中的所有儲存卷都擁有相同的屬性,如效能、冗餘特性、備份需求或成本,並實現自動化(如LUN管理)以及基於策略的集中儲存管理。

同時,儲存資源的自動化管理為使用者提供更高層次策略的選擇。在儲存池中可以定義多種儲存工具來代表不同業務領域或儲存使用者的不同服務等級。另外,還允許使用者以單元的方式管理每一儲存池內部的儲存資源,根據需要新增、刪除或改變,同時保持對應用伺服器業務系統的透明性。基於策略的儲存虛擬化能夠管理整個儲存基礎機構,保持合理分配儲存資源,高優先順序的應用有更高的儲存優先順序,使用效能最好的儲存,低優先順序的應用使用便宜的儲存。

ž  雲端儲存架構

雲端儲存架構伴隨著大規模雲端計算的資料時代的到來,將儲存作為雲的服務提供,不論是企業私有云還是公有云的儲存,都著重於大量儲存資料的建立和分佈,並關注快速通過雲獲得資料的訪問。雲端儲存架構需要支援大規模的資料負載的儲存、備份、遷移、傳輸,同時要求巨大的成本、效能和管理優勢。

雲端儲存的技術部署,通過叢集應用或分散式檔案系統等功能,網路中大量各種不同型別的儲存裝置通過應用軟體集合起來協同工作,共同對外提供資料儲存和業務訪問功能的一個系統,保證資料的安全性,並節約儲存空間。

在大規模系統支撐上,分散式檔案系統、分散式物件儲存等技術,為雲端儲存的各種應用提供了高度可伸縮、可擴充套件和極大的彈性支撐和強大的資料訪問效能,並且因為這些分散式技術對標準化硬體的支援,使得大規模雲端儲存得以低成本的建設和運維。

雲端儲存不是要取代現有的盤陣,而是為了應付高速成長的資料量與頻寬而產生的新形態儲存系統,因此雲端儲存在構建時重點考慮的三點:擴容簡便、效能易於增長、管理簡易。

ž  軟體定義儲存

軟體定義儲存當前還未有確切的定義,但軟體定義儲存代表了一種趨勢,即儲存架構中軟體和硬體的分離,也就是資料層和控制層的分離。對於資料中心使用者而言,通過軟體來實現對儲存資源的管理和排程,如靈活的卷遷移等而無需考慮硬體裝置本身。

通過軟體定義儲存實現儲存資源的虛擬化、抽象化、自動化,能夠完整的實現資料中心儲存系統的部署、管理、監控、調整等多個要求,使得儲存系統具備靈活、自由和高可用等特點。

傳統儲存的虛擬化、自動化都是由專用的儲存裝置來實現,許多廠商虛擬化儲存都要使用自己定製的裝置,或者是在特定伺服器上載入的一款軟體來支援。軟體定義儲存將儲存服務從儲存系統中抽象出來,且可同時向機械硬碟及固態硬碟提供儲存服務,軟體定義儲存消除硬體裝置的限制,採用開放的儲存架構,提供儲存的效能、可管理性,增強儲存系統的智慧性和敏捷的服務能力,同時軟體定義儲存也以分散式技術如分散式檔案儲存、物件儲存等大規模可擴充套件架構為資料基礎,對上支援靈活的控制管理,這將是儲存領域發展的大趨勢。

2      資料中心儲存的技術架構

2.1     資料型別

資料中心的儲存資料型別發生了很大的變化,按照結構化程度來分,可以大致分為以下三種。

¡  結構化資料的儲存及應用。這是一種使用者定義的資料型別,它包含了一系列的屬性,每一個屬性都有一個數據型別,儲存在關係資料庫裡。一般的業務系統都有大量的結構化資料,一般儲存在Oracle或MySQL的等的關係型資料庫中,在企業級資料中心,一般在集中儲存架構中儲存,或成為主儲存系統,以塊儲存訪問為主。

¡  非結構化資料的儲存及應用。相對於結構化資料而言,不方便用資料庫二維邏輯表來表現的資料即稱為非結構化資料,包括所有格式的辦公文件、文字、圖片、XML、HTML、各類報表、影象和音訊/視訊資訊等等,分散式檔案系統是實現非結構化資料儲存的主要技術。

¡  半結構化資料的儲存及應用。介於完全結構化資料(如關係型資料庫、面向物件資料庫中的資料)和完全無結構的資料(如聲音、影象檔案等)之間的資料,半結構化資料模型具有一定的結構性,但較之傳統的關係和麵向物件的模型更為靈活。半結構資料模型完全不基於傳統資料庫模式的嚴格概念,這些模型中的資料都是自描述的。由於半結構化資料沒有嚴格的語義定義,所以不適合用傳統的關係型資料庫進行儲存,適合儲存這類資料的資料庫被稱作“NoSQL”資料庫。

2.2     塊、檔案、物件

ž  塊儲存

對於儲存系統,塊讀寫一般是在儲存介質上的資料概念,對於磁碟來說,塊資料的儲存單元是一個或多個磁碟扇區。因此塊級資料的讀寫,是面向最底層的物理層的,資料操作基於起始扇區編號、操作碼(讀、寫等)、連續扇區數量等,塊資料訪問介面是SCSI介面。有兩種常用的兩種塊儲存方式。

¡  DAS(Direct Attach STorage)。是直接連線於主機伺服器的一種儲存方式,每一臺主機伺服器有獨立的儲存裝置,每臺主機伺服器的儲存裝置無法互通,需要跨主機存取資料時,必須經過相對複雜的設定,若主機伺服器分屬不同的作業系統,要存取彼此的資料,更是複雜,有些系統甚至不能存取。通常用在單一網路環境下且資料交換量不大,效能要求不高的環境下,是早期的技術實現。

¡  SAN(Storage Area Network)。是一種用高速網路聯接主機伺服器與儲存裝置的一種儲存方式,儲存系統會位於主機群的後端,它使用高速I/O網路聯結方式,以FC、iSCSI、FCOE為當前主流形式。一般而言,SAN應用在對網路速度要求高、對資料的可靠性和安全性要求高、對資料共享的效能要求高的應用環境中,特點是代價高,效能好。它採用SCSI 塊I/O的命令集,在SAN網路級的資料訪問提供高效能的隨機I/O和資料吞吐率,具有高頻寬、低延遲的優勢,但是由於SAN系統的價格較高,且不具備大規模可擴充套件性,不能滿足大型雲端計算資料中心的儲存需求。

ž  檔案儲存

對於檔案,是“按名存取”的,為了區分磁碟上各個不同的檔案,需要給每個檔案取一個確定的名字,稱為檔名,它用來表示磁碟上的檔案,以便於在磁碟上能夠“按名查詢”這些檔案。檔案的資料操作基於檔名、偏移量、讀寫位元組數等,但是檔案本身並無檔案自身的屬性、元資料資訊。基於對不同環境的檔案儲存發展了多種形式的檔案系統(如表1所示)。


表1 幾種檔案系統

ž  物件儲存

物件是自完備的,包含元資料、資料和屬性,可以進行自我管理,物件本身是平等的。也就是說,物件分佈在一個平坦的空間中,而非檔案系統那樣的樹狀邏輯結構之中,物件儲存以ID為基礎,根據ID可以直接訪問資料,核心是將資料通路(資料讀或寫)和控制通路(元資料)分離,並且基於物件儲存裝置(Object-based Storage Device,OSD)構建儲存系統,每個物件儲存裝置具有一定的智慧,能夠自動管理其上的資料分佈。典型代表:Swift、CEPH

ž  從裝置級別看塊、檔案、物件儲存(如表2所示)


表2塊、檔案、物件儲存的裝置級訪問比較

2.3     主儲存架構

主儲存是資料中心的重要儲存系統,通常稱為Tier1儲存,用於儲存活動資料(經常需要訪問的資料)以及要求高效能、低延遲、高可用性的資料。主儲存通常用於支撐資料中心關鍵任務程式(如資料庫、電子郵件和事務處理)。大多數重要程式採用隨機資料訪問模式,具有不同的訪問要求,但是都能產生大量資料,企業可以利用這些資料完成業務。

即使在虛擬領域中出現越來越多的新的資料儲存技術,傳統的主儲存系統仍然普遍。DAS是最早的主儲存架構,但SAN已經成為當前使用最廣泛、也最為主流的儲存架構。而NAS則在資料中心用於檔案共享應用,並且也在後端採用了SAN的擴充套件。在資料中心領域,絕大多數廠商也均以SAN架構來部署面向高階使用者的主儲存解決方案,以及在此基礎上相關的容災備份方案和儲存虛擬化方案(如圖3所示)。


圖3 資料中心主儲存架構

SAN的特點是效能高、穩定性強、價格高。在一些需要集中儲存的資料庫等實時服務要求高的重要應用領域,依然是當前的主流的技術,在儲存應用中,需要集中儲存的高階應用由SAN來承擔,基於檔案的小規模應用由NAS承擔更合適,使得SAN與NAS成為互補儲存架構出現。

最初的資料中心,大部分資料都是主資料。隨著資料的存在時間增長,大量資料會通常移動到次級和三級儲存。因此,隨著儲存各方面技術發展和業務的成熟,資料中心逐步開始尋求能夠減少主儲存的途徑,以充分利用容量,降低整個資料生命週期的成本。

2.4     分散式檔案儲存架構

分散式檔案系統主要的功能是用於儲存文件、影象、視訊之類的非結構化資料,該系統建立在網路之上的,以全域性方式管理系統資源,它可以任意排程網路中的儲存資源,並且排程過程是“透明”的。

分散式儲存系統採用可擴充套件的系統結構,利用多臺儲存伺服器分擔儲存負荷,利用位置伺服器定位儲存資訊,不但提高了系統的可靠性、可用性和存取效率,還易於擴充套件。以高效能、高容量為主要特性的分散式儲存系統,一般滿足以下四個條件:

¡  應用於網路環境中;

¡  單個檔案資料分佈存放在不同的節點上;

¡  支援多個終端多個程序併發存取;

¡  提供統一的目錄空間和訪問名稱。

HDFS(Hadoop Distributed File System)是開源專案Hadoop的家族成員,是谷歌檔案系統GoogleFS(Google File System)的開源實現,以下僅簡單介紹HDFS工作模式。

HDFS被設計成適合執行在通用硬體上的分散式檔案系統,是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的資料訪問,非常適合大規模資料集上的非結構化資料、半結構化應用。執行在HDFS之上的程式有很大量的資料集,典型的HDFS檔案大小是GB到TB的級別,因此,HDFS被調整成支援大檔案。一個HDFS叢集是有一個Namenode和一定數目的Datanode組成(如圖4所示):

¡  NameNode(名稱節點)是一個或一組中心伺服器,是HDFS的中樞,負責管理檔案系統的目錄名字空間資訊(namespace)和客戶端對檔案的訪問,並且管理所有的DataNode;

¡  DataNode(資料節點)在HDFS中負責管理本節點上附帶的儲存Block(資料塊)。在HDFS內部,檔案不是放在一塊磁碟上,一個檔案其實分成多個block(資料塊),這些block儲存分散在Datanode組成的叢集中,NameNode記錄block對應在不同的DataNode上的對映關係。

NameNode接受客戶端的元資料請求,然後對DataNode發出Block Ops(塊操作)指令,檔案的建立、刪除和複製操作,同時決定block到具體Datanode節點的對映。Datanode在Namenode的管理下進行block的建立、刪除和複製。


圖4 HDFS經典體系架構圖示

HDFS可靠性和效能主要通過資料塊的副本來實現,並且HDFS採用一種稱之為Rack-aware(機架感知)的策略來改進資料的可靠性、有效性和網路頻寬的利用。

在通常副本數為3的情況下,HDFS的策略將一個副本存放在本地機架上,一個副本放在同一個機架上的另一個節點,最後一個副本放在不同機架上的一個節點。在讀取時,為了降低整體的頻寬消耗和讀延時,如果客戶端同一個機架上有一個副本,那麼就讀該副本。

HDFS依然是主從結構,Namenode成為整個系統的瓶頸和關鍵故障點,因此,眾多使用分散式檔案系統的使用者均在此基礎上不斷完善其高可用性,比如發展出無中心儲存架構。

2.5     分散式物件儲存架構

在物件儲存中,儲存的不僅是資料,還有與豐富的資料相關的屬性資訊。系統會給每一個物件分配一個唯一的OID(Object ID)。物件本身是平等的,所有的OID都屬於一個平坦的地址空間,而並非檔案系統那樣的樹狀邏輯結構。物件儲存空間訪問物件只通過一個唯一的OID標識即可,不需要複雜的路徑結構,沒有“路徑”他“資料夾”的概念。物件儲存架構有以下組成部分。

ž  物件

物件是系統中資料儲存的基本單位。一個物件實際上就是檔案的資料和一組屬性資訊(Meta Data)的組合(如圖5所示),這些屬性資訊可以定義基於檔案的RAID引數、資料分佈和服務質量等;而傳統的儲存系統中用檔案或塊作為基本的儲存單位,在塊儲存系統中還需要始終追蹤系統中每個塊的屬性,物件通過與儲存系統通訊維護自己的屬性。在儲存裝置中,所有物件都有一個物件標識,通過物件標識命令訪問該物件。通常有多種型別的物件,儲存裝置上的根物件標識儲存裝置和該裝置的各種屬性,組物件是儲存裝置上共享資源管理策略的物件集合等。


圖5 物件儲存資料

ž  物件儲存裝置(OSD,Object Storage Device)

OSD有自己的CPU、記憶體、網路和磁碟系統,和塊裝置的區別不在於儲存介質,而在於兩者提供的訪問介面。OSD的主要功能包括資料儲存和安全訪問,目前國際上通常採用標準化計算單元結構實現物件儲存裝置。OSD執行從物件到塊的對映,這個動作允許本地實體以最佳方式決定怎樣儲存一個物件,OSD儲存節點不僅具備儲存功能,還包括智慧化的高階能力。傳統的儲存驅動只是作為Target響應客戶端的I/O請求,而物件儲存裝置是智慧裝置,它能同時執行Target和Initiator的功能,支援與其他物件儲存裝置的通訊和協作,如資料分配、複製與恢復。

ž  元資料伺服器(MDS ,Metadata Server)

元資料伺服器的工作就是管理檔案系統的名稱空間、控制客戶端與OSD物件的互動,快取和同步分散式元資料。雖然元資料和資料兩者都儲存在物件儲存叢集,但兩者分別管理,支援可擴充套件性。

ž  物件儲存系統的客戶端Client

為了有效支援Client支援訪問OSD上的物件,需要在計算節點實現物件儲存系統的Client,通常提供POSIX檔案系統介面,允許應用程式像執行標準的檔案系統操作一樣。

在客戶端,使用者使用檔案系統是透明的,Linux通過核心虛擬檔案系統交換(VFS)來進行底層的操作訪問。終端使用者訪問大容量的儲存系統,無需知道下面聚合成大容量儲存池的元資料伺服器、監視器、獨立的物件儲存裝置。檔案系統的智慧化處理分佈在節點上,這簡化了客戶端介面,可以支撐大規模動態擴充套件能力。

物件儲存構築在標準硬體儲存基礎設施之上,無需採用RAID(磁碟冗餘陣列),通過在軟體層面引入一致性雜湊技術和資料冗餘性,犧牲一定程度的資料一致性來達到高可用性和可伸縮性,支援多租戶模式、容器和物件讀寫操作,適合解決網際網路的應用場景下非結構化資料儲存問題。

與通常的分散式檔案系統一樣,放入物件儲存叢集中的檔案是條帶化的,依據特定的資料分散式演算法放入叢集節點中。應用程式可以通過RESTful介面與各OSD節點其通訊,將物件直接儲存在叢集中.

以OpenStack中的物件儲存元件Swift為例。從Swift的架構與特性來看,除了極高的資料永續性,各個儲存的節點完全對等,是對稱的系統架構;擴容的時候只需簡單的增加機器,擴充套件性很好;沒有主從結構,不存在單節點故障,任意一個節點出現故障時,資料並不會丟失。如圖6所示分別表示了上傳檔案PUT和下載檔案GET請求的資料流,兩個請求操作的是同一個物件。上傳檔案時,PUT請求通過負載均衡挑選一臺Proxy Server,將請求轉發到後者,後者通過查詢本地的Ring檔案,選擇3個不同Zone中的後端來儲存這個檔案,再給使用者返回檔案寫成功的訊息。下載檔案時,GET請求也通過負載均衡挑選一臺ProxyServer,後者上的Ring檔案能查詢到這個檔案儲存在哪三個節點中,然後同時去向後端查詢,ProxyServer從中選擇一個節點下載檔案。

 

圖6 物件儲存Swift的部署與檔案存取

3      結束語

企業及網際網路資料以每年50%的速率在增長,新增資料中結構化資料總量有限,多數為非結構化、半結構化資料,資料中心儲存架構隨著業務發展需要極強的彈性適應能力,低成本、大容量(海量)擴充套件、高併發效能是面向大型雲資料中心運營儲存架構的基本技術屬性。如何進行數量龐大且雜亂無章的資料儲存與深度應用處理,並迅速提取有價值的資訊,形成迅速商業決策成為各型別企業生存基礎是今後儲存以及圍繞儲存架構不斷衍生的業務發展方向。因此資料儲存技術變革方向必然是分散式並行檔案系統,並行資料庫、高效統一的資料裝載及存取,多介面、靈活擴充套件、多業務承載的解決方案能力是大容量、海量儲存技術架構的關鍵。

相關推薦

資料中心儲存架構-新民資料中心 儲存

資料中心儲存架構 文/劉新民 儲存系統是資料中心IT環境的核心基礎架構,是資料中心資料訪問的最終承載體。儲存在雲端計算、虛擬化、大資料等相關技術進入後已經發生了巨大的改變,塊儲存、檔案儲存、物件儲存支撐起多種資料型別的讀取;集中式儲存已經不再是資料中心的主流儲存架構,海量資

資料中心網路架構淺談

構建一個數據中心網路時,除了考慮網路硬體裝置的架構,2-7層網路設計也需要考慮。這兩者其實不能完全分開,硬體架構有時候決定了網路設計,網路設計有時候又限制了硬體架構。從應用場景,例如SDN/NFV來看,網路設計是最直接需要考慮的。所以這部分說說網路設計。**傳統

資料中心網路架構淺談

上一篇說了傳統三層網路架構,這一次來看看近些年開始流行的Fabric網路架構。**Fabric** Fabric一詞來源於網路交換機。網路交換機就是將輸入埠的資料,經過判斷,轉發到輸出埠。其架構大體如下圖所示: 交換機內部連線輸入輸出埠的是Switch Fab

JS儲存物件或陣列資料引用修改前和修改後的資料

在 JS 中有一些基本型別像是Number、String、Boolean,而物件就是像這樣的東西{ name: ‘Larry’, skill: ‘Node.js’ },物件跟基本型別最大的不同就在於他們的傳值方式。 基本型別是按值傳遞,像是這樣:在修改a時並不會改到b

資料開發、架構工程師面試

1、hadoop 工作原理(最常見的問題):     a.首先 概括裡面的角色(HDFS 、Mapreduce)     b.講解各個角色的整體架構     HDFS:     概念:     分

資料和雲端計算技術週報第8期:NoSQL特輯

寫在第8期特輯 “大資料” 三個字事實上是個marketing語言,從技術角度看,包括範圍非常廣。計算、儲存、網路都涉及。 為了滿足眾多同學學習和工作的須要。後面社群依據情況逐漸推出專門的分類集錦。希望大家喜歡! 究竟什麼是NoSQL?公眾號一系列

資料結構C語言第二版53頁作業

#include<iostream> using namespace std; typedef struct //定義順序表 { int *elem; int length; }SqList; typedef struct LNode //定義單向連結串列 { int dat

資料之效能調優方面資料傾斜、shuffle、JVM等方面

一、對於資料傾斜的發生一般都是一個key對應的資料過大,而導致Task執行過慢,或者記憶體溢位(OOM),一般是發生在shuffle的時候,比如reduceByKey,groupByKey,sortByKey等,容易產生資料傾斜。 那麼針對資料傾斜我們如何解決呢?我們可以首先觀看log日誌,以為log日誌報

Java中的基本資料型別、型別轉換規則自動、強制、原反補碼、使用者自定義識別符號

基本資料型別 資料型別指明瞭變數和表示式的狀態和行為。 基本資料型別 關鍵字 記憶體中佔用位元組數 取值範圍 布林型 boolean 1位元組(8bit)

python資料分析:關聯規則學習Association rule learning

何為關聯規則學習 關聯規則學習是一種基於規則的機器學習方法,用於發現大型資料庫中變數之間的有趣關係。它旨在使用一些有趣的度量來識別在資料庫中發現的強規則。這種基於規則的方法在分析更多資料時也會生成新規則。假設資料集足夠大,最終目標是幫助機器模擬人類大腦的特徵提取和新未分類資料的抽象關

【Java】 大話資料結構(18) 排序演算法(5) 直接插入排序 資料結構與演算法合集 資料結構與演算法合集

本文根據《大話資料結構》一書,實現了Java版的直接插入排序。 更多:資料結構與演算法合集 基本概念   直接插入排序思路:類似撲克牌的排序過程,從左到右依次遍歷,如果遇到一個數小於前一個數,則將該數插入到左邊所有比自己大的數之前,也就是說,將該數前面的所有更大的數字都後移一位,空出來的位置放入該數。

資料結構那點事--棧鏈式結構

#include<iostream> #include<stdlib.h> using namespace std; typedef int ElemType; typedef int Status; #define OK 1 #def

資料分析筆試——常見概率題from牛客

1、殺人遊戲,6個人互相投票,有一個人被其他5個人一起投死的概率是多少()?假設每個人都不會投自己,投其他每個人是等概率的。 答:分母:每個人可以投其他5個人,共5^6種可能;分子:C(1,6)六種可能,六個人選一個死,所以p=6/3125 2、20個員工被安排為4排,每

資料結構那點事--佇列鏈式結構

#include<iostream> using namespace std; typedef int QEueue; #define OK 1 #define ERROR 0 typedef int QElemType; typedef int

資料結構課程設計-檢查網路並查集

檢查網路 給定一個計算機網路以及機器間的雙向連線列表,每一條連線與允許兩端的計算機進行直接的檔案傳輸,其他計算機間若存在一條連通路徑,也可以進行間接的檔案傳輸。 要求實現功能: 任意指定兩臺計算機,判斷整個網路中是否任意兩臺機器間都可以檔案傳輸?若不可以,請給出當前網路

小白的資料結構與演算法學習筆記二十六----廣義表

 一、廣義表的概述 首先回憶一下原子型別和結構型別,簡單說來,原子型別就是不可再分的型別,結構型別就是可以再分的型別。我們前面講的線性表要求每個元素都是原子型別,而廣義表作為線性表的推廣,它的元素可以是原子型別,也可以是個表。元素是原子型別,叫原子結點;元素是表,叫表結點。

Ikaros的資料結構之二叉樹基礎概念部分

二叉樹(Binary Tree) 在瞭解二叉樹之前你需要了解如下內容: 1.樹(Tree):是一種非線性資料結構(非線性資料結構包含樹和圖) ①樹的資料結構: 相關術語 a.根節點(root):樹中沒有前驅的結點 注:一棵樹中只有一個根節點 b.葉子結點(le

python中如何遍歷資料夾及其子資料夾中的所有檔案附實現程式碼

【時間】2018.10.27 【題目】python中如何遍歷資料夾及其子資料夾中的所有檔案 目錄 概述 概述       本文提供了python中如何遍歷資料夾及其子資料夾中的所有檔案的兩種方法。兩者均返回檔名列表(可以選擇檔名列表或者是包含完整路徑的檔名列

資料結構——約瑟夫環迴圈連結串列

n個數據元素構成一個環,從環中任意位置開始計數,計到m將該元素從表中取出,重複上述過程,直至表中只剩下一個元素。 提示:用一個無頭結點的迴圈單鏈表來實現n個元素的儲存。 樣例: 輸入: 10 3 1 //分別為總數,出列的人數到的數字,開始數的人的編號。 輸出:

日本大資料應用環境和發展狀況附PPT下載

本篇選自野村綜合研究所數字基礎開發部部門經理、高階研究員城田真琴先生近日在“大資料應用中日交流論壇”上所做的題為《日本的大資料應用環境和發展狀況》的演講。 公眾號後臺回覆"181206"即可獲取PPT原文 本篇主要分為四點與大家分享: 日本大資料發