列式存儲原理
1. 計算機的存儲程序工作原理是什麼
計算機的基本原理是:
存儲程序和程序控制。
預先要把指揮計算機如何進行操作的指令序列(稱為程序)和原始數據通過輸入設備輸送到計算機內存貯器中。
每一條指令中明確規定了計算機從哪個地址取數,進行什麼操作,然後送到什麼地址去等步驟。
1計算機在運行時,先從內存中取出第一條指令,通過控制器的解碼,按指令的要求,從存儲器中取出數據進行指定的運算和邏輯操作等加工,然後再按地址把結果送到內存中去。
2接下來,再取出第二條指令,在控制器的指揮下完成規定操作。依此進行下去。直至遇到停止指令。
3程序與數據一樣存貯,按程序編排的順序,一步一步地取出指令,自動地完成指令規定的操作是計算機最基本的工作原理。
4這一原理最初是由美籍匈牙利數學家馮.諾依曼於1945年提出來的,故稱為馮.諾依曼原理。
2. 什麼是資料庫列存儲,原理是怎樣的
資料庫列存儲不同於傳統的關系型資料庫,其數據在表中是按行存儲的,列方式所帶來的重要好處之一就是,由於查詢中的選擇規則是通過列來定義的,因 此整個資料庫是自動索引化的。
按列存儲每個欄位的數據聚集存儲,在查詢只需要少數幾個欄位的時候,能大大減少讀取的數據量,一個欄位的數據聚集存儲,那就 更容易為這種聚集存儲設計更好的壓縮/解壓演算法。這張圖講述了傳統的行存儲和列存儲的區別:
3. 網路存儲技術的工作原理是什麼有圖解釋么
網路存儲技術(Network Storage Technologies)是基於數據存儲的一種通用網路術語。網路存儲結構大致分為三種:直連式存儲(DAS:Direct Attached Storage)、網路存儲設備(NAS:Network Attached Storage)和存儲網路(SAN:Storage Area Network)。
網路存儲技術
直連式存儲(DAS):這是一種直接與主機系統相連接的存儲設備,如作為伺服器的計算機內部硬體驅動。到目前為止,DAS 仍是計算機系統中最常用的數據存儲方法。 DAS即直連方式存儲,英文全稱是Direct Attached Storage。中文翻譯成「直接附加存儲」。顧名思義,在這種方式中,存儲設備是通過電纜(通常是SCSI介面電纜)直接到伺服器的。I/O(輸入/輸入)請求直接發送到存儲設備。DAS,也可稱為SAS(Server-Attached Storage,伺服器附加存儲)。它依賴於伺服器,其本身是硬體的堆疊,不帶有任何存儲操作系統。
DAS的適用環境為:
1) 伺服器在地理分布上很分散,通過SAN(存儲區域網路)或NAS(網路直接存儲)在它們之間進行互連非常困難時(商店或銀行的分支便是一個典型的例子); 2) 存儲系統必須被直接連接到應用伺服器(如Microsoft Cluster Server或某些資料庫使用的「原始分區」)上時; 3) 包括許多資料庫應用和應用伺服器在內的應用,它們需要直接連接到存儲器上,群件應用和一些郵件服務也包括在內。 典型DAS結構如圖所示: 典型DAS結構如圖所示
對於多個伺服器或多台PC的環境,使用DAS方式設備的初始費用可能比較低,可是這種連接方式下,每台PC或伺服器單獨擁有自己的存儲磁碟,容量的再分配困難;對於整個環境下的存儲系統管理,工作煩瑣而重復,沒有集中管理解決方案。所以整體的擁有成本(TCO)較高。目前DAS基本被NAS所代替。下面是DAS與NAS的比較。 DAS與NAS的比較圖
網路存儲設備(NAS):NAS 是一種採用直接與網路介質相連的特殊設備實現數據存儲的機制。由於這些設備都分配有 IP 地址,所以客戶機通過充當數據網關的伺服器可以對其進行存取訪問,甚至在某些情況下,不需要任何中間介質客戶機也可以直接訪問這些設備。
NAS網路存儲器
1. 最大存儲容量
最存儲大存儲容量是指NAS存儲設備所能存儲數據容量的極限,通俗的講,就是NAS設備能夠支持的最大硬碟數量乘以單個硬碟容量就是最大存儲容量。這個數值取決於NAS設備的硬體規格。不同的硬體級別,適用的范圍不同,存儲容量也就有所差別。通常,一般小型的NAS存儲設備會支持幾百GB的存儲容量,適合中小型公司作為存儲設備共享數據使用,而中高檔的NAS設備應該支持T級別的容量(1T=1000G)。
2. 處理器
同普通電腦類似,NAS產品也都具有自己的處理器(CPU)系統,來協調控制整個系統的正常運行。其採用的處理器也常常與台式機或伺服器的CPU大體相同。目前主要有以下幾類。 (1)Intel系列處理器 (4)AMD系列處理器 (5)PA-RISC型處理器 (6)PowerPC處理器 (7)MIPS處理器 一般針對中小型公司使用NAS產品採用AMD的處理器或Intel PIII/PIV等處理器。而大規模應用的NAS產品則使用Intel Xeon處理器、或者RISC型處理器等。但是也不能一概而論,視具體應用和廠商規劃而定。
3. 內存
NAS從結構上講就是一台精簡型的電腦,每台NAS設備都配備了一定數量的內存,而且大多用戶以後可以擴充。在NAS設備中,常見的內存類型由SDRAM(同步內存)、FLASH(快閃記憶體)等。不同的NAS產品出廠時配備的內存容量不同,一般為幾十兆到數GB(1GB=1000MB)容量不等,這取決於NAS產品的應用范圍,一般來講,應用在小規模的區域網當中的NAS,如果只是應付幾台設備的訪問,64M以下內存容量即可。如果是上百個節點以上的訪問,就得需要上G容量的內存。當然,這不是絕對的因素,NAS產品的綜合性能發揮還取決於它的處理器能力、硬碟速度及其網路實際環境等因素的制約。總之,選購NAS產品時,應該綜合考慮各個方面的性能參數。
4. 介面
NAS產品的外部介面比較簡單,由於只是通過內置網卡與外界通訊,所以一般只具有乙太網絡介面,通常是RJ45規格,而這種介面網卡一般都是100M網卡或1000M網卡。另外,也有部分NAS產品需要與SAN(存儲區域網路)產品連接提供更為強大的功能,所以也可能會有FC(Fiber Channel光纖通道)介面。
5. 預置軟體系統
預制操作系統是指NAS產品出廠時隨機帶的操作系統或者管理軟體。目前NAS產品一般帶有以下幾種系統軟體。 精簡的WINDOWS2000系統 這類系統只是保留了WINDOWS2000 SERVER系統核心網路中最重要的部分,能夠驅動NAS產品正常工作。我們可以把它理解為WINDOWS2000的「精簡版」。 FreeBSD嵌入式系統 FreeBSD是類UNIX系統,在網路應用方面具備極其優異的性能。 Linux嵌入式系統 Linux系統類似於UNIX操組系統,但相比之下具有界面友好、內核升級迅速等特點。常常用來作為電器等產品的嵌入式控制系統。
6. 網路管理
網路管理,是指網路管理員通過網路管理程序對網路上的資源進行集中化管理的操作,包括配置管理、性能和記賬管理、問題管理、操作管理和變化管理等。一台設備所支持的管理程度反映了該設備的可管理性及可操作性。 一般的網路滿足SNMP MIB I / MIB II統計管理功能。常見的網路管理方式有以下幾種: (1)SNMP管理技術 (2)RMON管理技術 (3)基於WEB的網路管理 SNMP是英文「Simple Network Management Protocol」的縮寫,中文意思是「簡單網路管理協議」。SNMP首先是由Internet工程任務組織(Internet Engineering Task Force)(IETF)的研究小組為了解決Internet上的路由器管理問題而提出的。 SNMP是目前最常用的環境管理協議。SNMP被設計成與協議無關,所以它可以在IP,IPX,AppleTalk,OSI以及其他用到的傳輸協議上被使用。SNMP是一系列協議組和規范(見下表),它們提供了一種從網路上的設備中收集網路管理信息的方法。SNMP也為設備向網路管理工作站報告問題和錯誤提供了一種方法。 目前,幾乎所有的網路設備生產廠家都實現了對SNMP的支持。領導潮流的SNMP是一個從網路上的設備收集管理信息的公用通信協議。設備的管理者收集這些信息並記錄在管理信息庫(MIB)中。這些信息報告設備的特性、數據吞吐量、通信超載和錯誤等。MIB有公共的格式,所以來自多個廠商的SNMP管理工具可以收集MIB信息,在管理控制台上呈現給系統管理員。 通過將SNMP嵌入數據通信設備,如交換機或集線器中,就可以從一個中心站管理這些設備,並以圖形方式查看信息。目前可獲取的很多管理應用程序通常可在大多數當前使用的操作系統下運行,如Windows3.11、Windows95 、Windows NT和不同版本UNIX的等。 一個被管理的設備有一個管理代理,它負責向管理站請求信息和動作,代理還可以藉助於陷阱為管理站提供站動提供的信息,因此,一些關鍵的網路設備(如集線器、路由器、交換機等)提供這一管理代理,又稱SNMP代理,以便通過SNMP管理站進行管理。
7. 網路協議
網路協議即網路中(包括互聯網)傳遞、管理信息的一些規范。如同人與人之間相互交流是需要遵循一定的規矩一樣,計算機之間的相互通信需要共同遵守一定的規則,這些規則就稱為網路協議。 一台計算機只有在遵守網路協議的前提下,才能在網路上與其他計算機進行正常的通信。網路協議通常被分為幾個層次,每層完成自己單獨的功能。通信雙方只有在共同的層次間才能相互聯系。常見的協議有:TCP/IP協議、IPX/SPX協議、NetBEUI協議等。在區域網中用得的比較多的是IPX/SPX.。用戶如果訪問Internet,則必須在網路協議中添加TCP/IP協議。 TCP/IP是「transmission Control Protocol/Internet Protocol」的簡寫,中文譯名為傳輸控制協議/互聯網路協議)協議, TCP/IP(傳輸控制協議/網間協議)是一種網路通信協議,它規范了網路上的所有通信設備,尤其是一個主機與另一個主機之間的數據往來格式以及傳送方式。TCP/IP是INTERNET的基礎協議,也是一種電腦數據打包和定址的標准方法。在數據傳送中,可以形象地理解為有兩個信封,TCP和IP就像是信封,要傳遞的信息被劃分成若干段,每一段塞入一個TCP信封,並在該信封面上記錄有分段號的信息,再將TCP信封塞入IP大信封,發送上網。在接受端,一個TCP軟體包收集信封,抽出數據,按發送前的順序還原,並加以校驗,若發現差錯,TCP將會要求重發。因此,TCP/IP在INTERNET中幾乎可以無差錯地傳送數據。 對普通用戶來說,並不需要了解網路協議的整個結構,僅需了解IP的地址格式,即可與世界各地進行網路通信。 IPX/SPX是基於施樂的XEROX』S Network System(XNS)協議,而SPX是基於施樂的XEROX』S SPP(Sequenced Packet Protocol:順序包協議)協議,它們都是由novell公司開發出來應用於區域網的一種高速協議。它和TCP/IP的一個顯著不同就是它不使用ip地址,而是使用網卡的物理地址即(MAC)地址。在實際使用中,它基本不需要什麼設置,裝上就可以使用了。由於其在網路普及初期發揮了巨大的作用,所以得到了很多廠商的支持,包括microsoft等,到現在很多軟體和硬體也均支持這種協議。 NetBEUI即NetBios Enhanced User Interface ,或NetBios增強用戶介面。它是NetBIOS協議的增強版本,曾被許多操作系統採用,例如Windows for Workgroup、Win 9x系列、Windows NT等。NETBEUI協議在許多情形下很有用,是WINDOWS98之前的操作系統的預設協議。總之NetBEUI協議是一種短小精悍、通信效率高的廣播型協議,安裝後不需要進行設置,特別適合於在「網路鄰居」傳送數據。所以建議除了TCP/IP協議之外,區域網的計算機最好也安上NetBEUI協議。另外還有一點要注意,如果一台只裝了TCP/IP協議的WINDOWS98機器要想加入到WINNT域,也必須安裝NetBEUI協議。
8. 網路文件協議
網路文件系統是基於網路的分布式文件系統,其文件系統樹的各節點可以存在於不同的聯網計算機甚至不同的系統平台上,可以用來提供跨平台的信息存儲與共享。 當今最主要的兩大網路文件系統是Sun提出的NFS(Network File System)以及由微軟、EMC和NetApp提出的CIFS(Common Internet File System),前者主要用於各種Unix平台,後者則主要用於Windows平台,我們熟悉的「網上鄰居」的文件共享方式就是基於CIFS系統的。其他著名的網路文件系統還有Novell公司的NCP(網路控制協議)、Apple公司的AFP以及卡內基-梅隆大學的Coda等,NAS的主要功能之一便是通過各種網路文件系統提供存儲服務。
9. 網路備份軟體
目前在數據存儲領域可以完成網路數據備份管理的軟體產品主要有Legato公司的NetWorker、IBM公司 的Tivoli、Veritas公司 的NetBackup等。另外有些操作系統,諸如Unix的tar/cpio、Windows2000/NT的Windows Backup、Netware的Sbackup也可以作為NAS的備份軟體。
NetBackup
NetBackup是Veritas公司推出的適用於中型和大型的存儲系統的備份軟體,可以廣泛的支持各種開放平台。另外該公司還推出了適合低端的備份軟體Backup Exec。
NetWorker
NetWorker是Legato公司推出的備份軟體,它適用於大型的復雜網路環境,具有各種先進的備份技術機制,廣泛的支持各種開放系統平台。值得一提的是, NetWorker中的Cellestra技術第一個在產品上實現了Serverless Backup(無伺服器備份)的思想。
IBM Tivoli
IBM Tivoli是IBM公司推出的備份軟體,與Veritas的NetBackup和Legato的NetWorker相比,Tivoli Storage Manager更多的適用於IBM主機為主的系統平台,其強大的網路備份功能可以勝任大規模的海量存儲系統的備份需要。 此外,CA公司原來的備份軟體ARCServe,在低端市場具有相當廣泛的影響力。其新一代備份產品--BrightStor,定位直指中高端市場,也具有不錯的性能。 選購備份軟體時,應該根據不同的用戶需要選擇合適的產品,理想的網路備份軟體系統應該具備以下功能:
集中式管理
網路存儲備份管理系統對整個網路的數據進行管理。利用集中式管理工具的幫助,系統管理員可對全網的備份策略進行統一管理,備份伺服器可以監控所有機器的備份作業,也可以修改備份策略,並可即時瀏覽所有目錄。所有數據可以備份到同備份伺服器或應用伺服器相連的任意一台磁帶庫內。
全自動的備份
備份軟體系統應該能夠根據用戶的實際需求,定義需要備份的數據,然後以圖形界面方式根據需要設置備份時間表,備份系統將自動啟動備份作業,無需人工干預。這個自動備份作業是可自定的,包括一次備份作業、每周的某幾日、每月的第幾天等項目。設定好計劃後,備份作業就會按計劃自動進行。
資料庫備份和恢復
在許多人的觀念里,資料庫和文件還是一個概念。當然,如果你的資料庫系統是基於文件系統的,當然可以用備份文件的方法備份資料庫。但發展至今,資料庫系統已經相當復雜和龐大,再用文件的備份方式來備份資料庫已不適用。是否能夠將需要的數據從龐大的資料庫文件中抽取出來進行備份,是網路備份系統是否先進的標志之一。
在線式的索引
備份系統應為每天的備份在伺服器中建立在線式的索引,當用戶需要恢復時,只需點取在線式索引中需要恢復的文件或數據,該系統就會自動進行文件的恢復。
歸檔管理
用戶可以按項目、時間定期對所有數據進行有效的歸檔處理。提供統一的Open Tape Format 數據存儲格式從而保證所有的應用數據由一個統一的數據格式作為永久的保存,保證數據的永久可利用性。
有效的媒體管理
備份系統對每一個用於作備份的磁帶自動加入一個電子標簽,同時在軟體中提供了識別標簽的功能,如果磁帶外面的標簽脫落,只需執行這一功能,就會迅速知道該磁帶的內容。
滿足系統不斷增加的需求
備份軟體必須能支持多平台系統,當網路上連接上其它的應用伺服器時,對於網路存儲管理系統來說,只需在其上安裝支持這種伺服器的客戶端軟體即可將數據備份到磁帶庫或光碟庫中。
10. 網站瀏覽器支持
網站瀏覽器支持是指能否夠通過WEB(就是WWW,俗稱互聯網)手段對NAS產品進行管理,以及管理時使用的瀏覽器類型。絕大部分的NAS產品都支持WEB管理,這樣的好處是管理方便,用戶在任何地方只要能夠上網就可以輕松的管理NAS設備。 目前NAS產品支持的常用瀏覽器有微軟的IE(Internet Explorer)瀏覽器以及網景公司的Netscape瀏覽器。
11. 網路服務
網路服務是指NAS產品在運行時系統能夠提供何種服務。典型的網路服務有DHCP、DNS、FTP、Telnet、WINS、SMTP等。
DHCP
DHCP的全名是「Dynamic Host Configuration Protocol」,即動態主機配置協議。在使用DHCP的網路里,用戶的計算機可以從DHCP伺服器那裡獲得上網的參數,幾乎不需要做任何手工的配置就可以上網。 一般情況下,DHCP伺服器會盡量保持每台計算機使用同一個IP地址上網。如果計算機長時間沒有上網或配置為使用靜態地址上網,DHCP伺服器就會把這個地址分配給其他計算機。
WINS
WINS是「Windows Internet Name Service」的簡稱,中文為Windows網際命名服務,WINS伺服器主要用於NetBIOS名字(計算機名稱)服務,它處理的是NetBIOS計算機名(Computer Name),所以也被稱為NetBIOS名字伺服器(NBNS,NetBIOS Name Server)。WINS伺服器可以登記WINS-enabled工作站(下面簡稱為「WINS工作站」)的計算機名、IP地址、DNS域名等數據,當工作站查詢名字時,它又可以將這些數據提供給工作站。
DNS
DNS,Domain Name System或者Domain Name Service(域名系統或者余名服務)。域名系統為Internet上的主機分配域名地址和IP地址。用戶使用域名地址,該系統就會自動把域名地址轉為IP地址。域名服務是運行域名系統的Internet工具。執行域名服務的伺服器稱之為DNS伺服器,通過DNS伺服器來應答域名服務的查詢。
FTP
文件傳輸協議FTP(File Transfer Protocol)是Internet傳統的服務之一。FTP使用戶能在兩個聯網的計算機之間傳輸文件,它是Internet傳遞文件最主要的方法。使用匿名(Anonymous)FTP, 用戶可以免費獲取Internet豐富的資源。除此之外,FTP還提供登錄、目錄查詢、文件操作及其他會話控制功能。
SMTP
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP協議屬於TCP/IP協議族,它幫助每台計算機在發送或中轉信件時找到下一個目的地。通過SMTP協議所指定的伺服器,我們就可以把E-mail寄到收信人的伺服器上了,整個過程只要幾分鍾。SMTP伺服器則是遵循SMTP協議的發送郵件伺服器,用來發送或中轉你發出的電子郵件。
Telnet
有的時候我們需要運行一些很大的程序,而自己的PC又達不到運行這個程序所必須的配置,在這種情況下,我們可以通過網路連接上一台功能強大的計算機,並且把自己的PC模擬成那台計算機的終端,進而達到在該計算機上運行程序的目的。這種利用網路遠程登錄到其他計算機上,並且以虛擬終端方式遙控程序運行的做法就是TELNET。隨著計算機硬體的發展,目前TELNET在一般網路用戶中已經不是很普遍了,但是對於網路管理員來說,它仍然是個得力助手。
12. 網路安全
網路安全是指網路系統的硬體、軟體及其系統中的數據受到保護,不受偶然的或者惡意的原因而遭到破壞、更改、泄露,系統連續可靠正常地運行,網路服務不中斷。 網路安全實際上包括兩部分:網路的安全和主機系統的安全。網路安全主要通過設置防火牆來實現,也可以考慮在路由器上設置一些數據包過濾的方法防止來自Internet上的黑客的攻擊。至於系統的安全則需根據不同的操作系統來修改相關的系統文件,合理設置用戶許可權和文件屬性。 NAS產品的網路安全應具有以下四個方面的特徵: 保密性:信息不泄露給非授權用戶、實體或過程,或供其利用的特性。 完整性: 數據未經授權不能進行改變的特性。即信息在存儲或傳輸過程中保持不被修 改、不被破壞和丟失的特性。 可用性:可被授權實體訪問並按需求使用的特性。即當需要時能否存取所需的信息。例 如網路環境下拒絕服務、破壞網路和有關系統的正常運行等都屬於對可用性的攻擊; 可控性:對信息的傳播及內容具有控制能力。
13. NAS
NAS是英文「Network Attached Storage」的縮寫, 中文意思是「網路附加存儲」。按字面簡單說就是連接在網路上, 具備資料存儲功能的裝置,因此也稱為「網路存儲器」或者「網路磁碟陣列」。 從結構上講,NAS是功能單一的精簡型電腦,因此在架構上不像個人電腦那麼復雜,在外觀上就像家電產品,只需電源與簡單的控制鈕, 結構圖如下: NAS是一種專業的網路文件存儲及文件備份設備,它是基於LAN(區域網)的,按照TCP/IP協議進行通信,以文件的I/O(輸入/輸出)方式進行數據傳輸。在LAN環境下,NAS已經完全可以實現異構平台之間的數據級共享,比如NT、UNIX等平台的共享。 一個NAS系統包括處理器,文件服務管理模塊和多個硬碟驅動器(用於數據的存儲)。 NAS 可以應用在任何的網路環境當中。主伺服器和客戶端可以非常方便地在NAS上存取任意格式的文件,包括SMB格式(Windows)NFS格式(Unix, Linux)和CIFS(Common Internet File System)格式等等。典型的NAS的網路結構如下圖所示: 存儲網路(SAN):SAN 是指存儲設備相互連接且與一台伺服器或一個伺服器群相連的網路。其中的伺服器用作 SAN 的接入點。在有些配置中,SAN 也與網路相連。SAN 中將特殊交換機當作連接設備。它們看起來很像常規的乙太網絡交換機,是 SAN 中的連通點。SAN 使得在各自網路上實現相互通信成為可能,同時並帶來了很多有利條件。 SAN英文全稱:Storage Area Network,即存儲區域網路。它是一種通過光纖集線器、光纖路由器、光纖交換機等連接設備將磁碟陣列、磁帶等存儲設備與相關伺服器連接起來的高速專用子網。 SAN由三個基本的組件構成:介面(如SCSI、光纖通道、ESCON等)、連接設備(交換設備、網關、路由器、集線器等)和通信控制協議(如IP和SCSI等)。這三個組件再加上附加的存儲設備和獨立的SAN伺服器,就構成一個SAN系統。SAN提供一個專用的、高可靠性的基於光通道的存儲網路,SAN允許獨立地增加它們的存儲容量,也使得管理及集中控制(特別是對於全部存儲設備都集群在一起的時候)更加簡化。而且,光纖介面提供了10 km的連接長度,這使得物理上分離的遠距離存儲變得更容易.
4. 分布式搜索引擎elasticsearch的架構原理
分布式搜索引擎:把大量的索引數據拆散成多塊,每台機器放一部分,然 後利用多台機器對分散之後的數據進行搜索,所有操作全部是分布在多台機器上進行,形成了 完整的分布式的架構。
近實時,有兩層意思:
集群包含多個節點,每個節點屬於哪個集群都是通過一個配置來決定的,
Node 是集群中的一個節點,節點也有一個名稱,默認是隨機分配的。默認節點會去加入一個名 稱為 elasticsearch 的集群。如果直接啟動一堆節點,那麼它們會自動組成一個elasticsearch 集群,當然一個節點也可以組成 elasticsearch 集群。
文檔是 es 中最小的數據單元,一個 document 可以是1條客戶數據、1條商品分類數據、1條 訂單數據,通常用json 數據結構來表示。每個 index 下的 type,都可以存儲多條 document。
1個 document 裡面有多個 field,每個 field 就是1個數據欄位。
es 集群多個節點,會自動選舉1個節點為 master 節點,這個 master 節點其實就是干一些管理 的工作的,比如維護索引元數據、負責切換 primary shard 和 replica shard 身份等。要是 master 節點宕機了,那麼會重新選舉1個節點為 master 節點。 如果是非 master節點宕機了,那麼會由 master 節點,讓那個宕機節點上的 primary shard 的身 份轉移到其他機器上的 replica shard。接著你要是修復了那個宕機機器,重啟了之後,master 節點會控制將缺失的 replica shard 分配過去,同步後續修改的數據之類的,讓集群恢復正常。 說得更簡單1點,就是說如果某個非 master 節點宕機了,那麼此節點上的 primary shard 不就 沒了。那好,master 會讓 primary shard 對應的 replica shard(在其他機器上)切換為 primary shard。如果宕機的機器修復了,修復後的節點也不再是 primary shard,而是 replica shard。
索引可以拆分成多個 shard ,每個 shard 存儲部分數據。拆分多個 shard是有好處的,一是支持橫向擴展,比如你數據量是 3T,3 個 shard,每個 shard 就 1T 的數據, 若現在數據量增加到 4T,怎麼擴展,很簡單,重新建1個有 4 個 shard 的索引,將數據導進 去;二是提高性能,數據分布在多個 shard,即多台伺服器上,所有的操作,都會在多台機器 上並行分布式執行,提高了吞吐量和性能。 接著就是這個 shard 的數據實際是有多個備份,就是說每個 shard 都有1個 primary shard ,負責寫入數據,但是還有多個 replica shard 。 primary shard 寫入數據之後, 會將數據同步到其他幾個 replica shard上去。
通過這個 replica 的方案,每個 shard 的數據都有多個備份,如果某個機器宕機了,沒關系啊, 還有別的數據副本在別的機器上,這樣子就高可用了。
總結:分布式就是兩點,1.通過shard切片實現橫向擴展;2.通過replica副本機制,實現高可用
基本概念
寫數據過程:客戶端通過hash選擇一個node發送請求,這個node被稱做coordinating node(協調節點),協調節點對docmount進行路由,將請求轉發給到對應的primary shard,primary shard 處理請求,將數據同步到所有的replica shard,此時協調節點,發現primary shard 和所有的replica shard都處理完之後,就反饋給客戶端。
客戶端發送get請求到任意一個node節點,然後這個節點就稱為協調節點,協調節點對document進行路由,將請求轉發到對應的node,此時會使用隨機輪詢演算法,在primary shard 和replica shard中隨機選擇一個,讓讀取請求負載均衡,接收請求的node返回document給協調節點,協調節點,返回document給到客戶端
es最強大的是做全文檢索,就是比如你有三條數據
1.java真好玩兒啊
2.java好難學啊
3.j2ee特別牛
你根據java關鍵詞來搜索,將包含java的document給搜索出來。
更新/刪除數據過程,首先還是write、merge操作,然後flush過程中:
1、write過程和上面的一致;
2、refresh過程有點區別
所謂的倒排索引,就是把你的數據內容先分詞,每句話分成一個一個的關鍵詞,然後記錄好每一個關鍵詞對應出現在了哪些 id 標識的數據。
然後你可以從其他地根據這個 id 找到對應的數據就可以了,這個就是倒排索引的數據格式 以及搜索的方式,這種利倒排索引查找數據的式,也被稱之為全文檢索。
Inverted Index就是我們常見的倒排索引, 主要包括兩部分:
一個有序的數據字典 Dictionary(包括單詞 Term 和它出現的頻率)。
與單詞 Term 對應的 Postings(即存在這個單詞的文件)
當我們搜索的時候,首先將搜索的內容分解,然後在字典里找到對應 Term,從而查找到與搜索相關的文件內容。
本質上,Stored Fields 是一個簡單的鍵值對 key-value。默認情況下,Stored Fields是為false的,ElasticSearch 會存儲整個文件的 JSON source。
哪些情形下需要顯式的指定store屬性呢?大多數情況並不是必須的。從_source中獲取值是快速而且高效的。如果你的文檔長度很長,存儲 _source或者從_source中獲取field的代價很大,你可以顯式的將某些field的store屬性設置為yes。缺點如上邊所說:假設你存 儲了10個field,而如果想獲取這10個field的值,則需要多次的io,如果從Stored Field 中獲取則只需要一次,而且_source是被壓縮過 的。
這個時候你可以指定一些欄位store為true,這意味著這個field的數據將會被單獨存儲(實際上是存兩份,source和 Stored Field都存了一份)。這時候,如果你要求返回field1(store:yes),es會分辨出field1已經被存儲了,因此不會從_source中載入,而是從field1的存儲塊中載入。
Doc_values 本質上是一個序列化的 列式存儲,這個結構非常適用於聚合(aggregations)、排序(Sorting)、腳本(scripts access to field)等操作。而且,這種存儲方式也非常便於壓縮,特別是數字類型。這樣可以減少磁碟空間並且提高訪問速度,ElasticSearch 可以將索引下某一個 Document Value 全部讀取到內存中進行操作.
Doc_values是存在磁碟的
在es中text類型欄位默認只會建立倒排索引,其它幾種類型在建立倒排索引的時候還會建立正排索引,當然es是支持自定義的。在這里這個正排索引其實就是Doc Value。
即上文所描述的動態索引
往 es 寫的數據,實際上都寫到磁碟文件里去了,查詢的時候,操作系統會將磁碟文件里的數據自動緩存到 filesystem cache 中去。
es 的搜索引擎嚴重依賴於底層的 filesystem cache ,你如果給 filesystem cache 更多的 內存,盡量讓內存可以容納所有的 idx segment file 索引數據文件,那麼你搜索的時候就 基本都是走內存的,性能會非常高。 性能差距究竟可以有多大?我們之前很多的測試和壓測,如果走磁碟一般肯定上秒,搜索性能 絕對是秒級別的,1秒、5秒、10秒。但如果是走 filesystem cache ,是走純內存的,那麼一 般來說性能比走磁碟要高一個數量級,基本上就是毫秒級的,從幾毫秒到幾百毫秒不等。
那如何才能節約filesystem cache這部分的空間呢?
當寫數據到ES時就要考慮到最小化數據,當一行數據有30幾個欄位,並不需要把所有的數據都寫入到ES,只需要把關鍵的需要檢索的幾列寫入。這樣能夠緩存的數據就會越多。 所以需要控制每台機器寫入的數據最好小於等於或者略大於filesystem cache空間最好。 如果要搜索海量數據,可以考慮用ES+Hbase架構。用Hbase存儲海量數據,然後ES搜索出doc id後,再去Hbase中根據doc id查詢指定的行數據。
當每台機器寫入的數據大於cache os太多時,導致太多的數據無法放入緩存,那麼就可以把一部分熱點數據刷入緩存中。
對於那些你覺得比較熱的、經常會有人訪問的數據,最好做個專門的緩存預熱系統,就是 對熱數據每隔一段時間,就提前訪問一下,讓數據進入 filesystem cache 里去。這樣下 次別人訪問的時候,性能肯定會好很多。
把熱數據和冷數據分開,寫入不同的索引里,然後確保把熱索引數據刷到cache里。
在ES里最好不要用復雜的關聯表的操作。當需要這樣的場景時,可以在創建索引的時候,就把數據關聯好。比如在mysql中需要根據關聯ID查詢兩張表的關聯數據:select A.name ,B.age from A join B where A.id = B.id,在寫入ES時直接去把相關聯數據放到一個document就好。
es 的分頁是較坑的,為啥呢?舉個例子吧,假如你每頁是 10 條數據,你現在要查詢第 100 頁,實際上是會把每個 shard 上存儲的前 1000 條數據都查到1個協調節點上,如果你有個 5 個 shard,那麼就有 5000 條數據,接著協調節點對這 5000 條數據進行一些合並、處理,再獲取到 最終第 100 頁的 10 條數據。
分布式的,你要查第 100 頁的 10 條數據,不可能說從 5 個 shard,每個 shard 就查 2 條數據, 最後到協調節點合並成 10 條數據吧?你必須得從每個 shard 都查 1000 條數據過來,然後根據 你的需求進行排序、篩選等等操作,最後再次分頁,拿到裡面第 100 頁的數據。你翻頁的時 候,翻的越深,每個 shard 返回的數據就越多,而且協調節點處理的時間越長,非常坑爹。所 以用 es 做分頁的時候,你會發現越翻到後面,就越是慢。
我們之前也是遇到過這個問題,用 es 作分頁,前幾頁就幾十毫秒,翻到 10 頁或者幾十頁的時 候,基本上就要 5~10 秒才能查出來一頁數據了。
解決方案嗎?
1)不允許深度分頁:跟產品經理說,你系統不允許翻那麼深的頁,默認翻的越深,性能就越差;
2)在APP或者公眾號里,通過下拉來實現分頁,即下拉時獲取到最新頁,可以通過scroll api來實現;
scroll 會1次性給你生成所有數據的1個快照,然後每次滑動向後翻頁就是通過游標 scroll_id 移動獲取下一頁,性能會比上面說的那種分頁性能要高很多很 多,基本上都是毫秒級的。 但是,唯1的缺點就是,這個適合於那種類似微博下拉翻頁的,不能隨意跳到任何一頁的場 景。也就是說,你不能先進到第 10 頁,然後去第 120 頁,然後再回到第 58 頁,不能隨意亂跳 頁。所以現在很多APP產品,都是不允許你隨意翻頁的,也有一些網站,做的就是你只能往 下拉,一頁一頁的翻。
初始化時必須指定 scroll 參數,告訴 es 要保存此次搜索的上下文多長時間。你需要確保用戶不會持續不斷翻頁翻幾個小時,否則可能因為超時而失敗。
除了用 scroll api ,也可以用 search_after 來做, search_after 的思想是使用前一頁的結果來幫助檢索下一頁的數據,顯然,這種方式也不允許你隨意翻頁,你只能一頁一頁往後 翻。初始化時,需要使用一個唯1值的欄位作為 sort 欄位。
5. 計算機組成原理中的存儲陣列是什麼意思
存儲陣列:由大量的存儲單元組成,每個存儲單元能存放1位二值數據(0,1)。通常存儲單元排列成N行×M列矩陣形式。
它是把多個磁碟組成一個陣列,當作單一磁碟使用,它將數據以分段(striping)的方式儲存在不同的磁碟中,存取數據時,陣列中的相關磁碟一起動作,大幅減低數據的存取時間,同時有更佳的空間利用率。磁碟陣列所利用的不同的技術,稱為RAID level ,不同的level 針對不同的系統及應用,以解決數據安全的問題。
一般高性能的磁碟陣列都是以硬體的形式來達成,進一步的把磁碟快取控制及磁碟陣列結合在一個控制器(RAID controler)或控制卡上,針對不同的用戶解決人們對磁碟輸出/入系統的四大要求:
增加存取速度。
容錯(fault tolerance ),即安全性。
有效的利用磁碟空間。
盡量的平衡CPU,內存及磁碟的性能差異,提高電腦的整體工作性能。
RAID0為例子,如果我用兩個硬組成,500G兩個,總容量1000G,讀寫速度理論是單個的兩倍。不過缺點是一個硬碟壞了,全部數據都找不回來
6. 內存的原理
內存可以分為隨機訪問存儲器和只讀存儲器。隨機訪問存儲器,只有當開機加電後才能存儲信息,斷電後所有存儲的信息就會消失。一般程序必須首先裝入到內存中才可以由中央處理器來打開。只讀存儲器的信息不會丟失,但存儲的量很小,通常只是存儲一些電腦自身所必需的重要信息。
一般電腦上使用的內存,都是以插條的形式插在主板上,叫做單列直插式內存模塊,俗稱內存條。內存條與主板插接時引腳個數叫做線,主板上插內存條的插槽有幾個引腳,就決定了只能插幾根線的內存條。
內存存取數據的速度,以納秒來計算,十億分之一秒就是一納秒,數字越小,存取速度就越高,在內存的晶元上可以看出來。
只讀存儲器中,一般存儲固定的信息,如自檢程序等。
希望我能幫助你解疑釋惑。
7. 請問存儲陣列的定義是什麼呢謝謝!!!
磁碟陣列簡稱RAID(Rendant Arrays of Inexpensive Disks,RAID),有「價格便宜且多餘的磁碟陣列」之意。其原理是利用數組方式來作磁碟組,配合數據分散排列的設計,提升數據的安全性。磁碟陣列主要針對硬碟,在容量及速度上,無法跟上CPU及內存的發展,提出改善方法。磁碟陣列是由很多便宜、容量較小、穩定性較高、速度較慢磁碟,組合成一個大型的磁碟組,利用個別磁碟提供數據所產生的加成效果來提升整個磁碟系統的效能。同時,在儲存數據時,利用這項技術,將數據切割成許多區段,分別存放在各個硬碟上。