數據存儲實驗
『壹』 求數據結構試驗 線性表的順序存儲結構
#include<iostream.h>
#include<stdlib.h>
#include <malloc.h>
#define OVERFLOW 0
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100//線性表存儲空間的初始增量
#define LISTINCREMENT 10 // ?
typedef struct{
int * elem;// 存儲空間基址
int length;//當前長度
int listsize;//當前分配的存儲容量
}sqlist;
SqList L;
int InitList_Sq(SqList & L){
//構造一個新的線性表。
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem)exit(OVERFLOW);//存儲容量失敗
L.length=0; //空表長度為0
L.listsize=LIST_INIT_SIZE;//存儲初始容量
return OK;
}//InitList_Sq
int LIstInsert_Sq(SqList & L,int i,int e){
//在順序線性表L中第i位置之前插入新的元素e
if(i<1||i>L.length+1) return ERROR;
if(L.length>=L.listsize){
int * newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
int * q=&(L.elem[i-1]);
for(int * p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
int ListDelete_Sq(SqList&L,int i,int &e)
{
if((i<1)||(i>L.length))return ERROR;
int *p=&(L.elem[i-1]);
e=*p;
int *q=L.elem+L.length-1;
for(++p;p<=q;++p)*(p-1)=*p;
--L.length;
return OK;
}
void main()
{
SqList L;
int i,n;
int e;
cout<<"輸入順序表的個數:"<<endl;
cin>>n;
int *p=(int *)malloc(n*sizeof(int));
InitList_Sq(L);
cout<<"輸入線性表"<<n<<"個元素的值"<<endl;
for(i=0;i<n;i++)
{
cin>>p[i];
L.elem[i]=p[i];
}
cout<<endl;
L.length=i;
cout<<endl;
cout<<"輸入要插入元素的值"<<endl;
cin>>e;
cout<<endl;
cout<<"輸入要插入的位置"<<endl;
cin>>i;
LIstInsert_Sq( L, i, e);
for(i=0;i<n+1;i++)
cout<<L.elem[i];
cout<<endl;
cout<<"輸入要刪除的位置"<<endl;
cin>>i;
ListDelete_Sq(L,i,e)
;for(i=0;i<n;i++)
cout<<L.elem[i];
free(p);
『貳』 kubernetes(十一) 數據存儲(掛載卷管理)
在前面已經提到,容器的生命周期可能很短,會被頻繁地創建和銷毀。那麼容器在銷毀時,保存在容器中的數據也會被清除。這種結果對用戶來說,在某些情況下是不樂意看到的。為了持久化保存容器的數據,kubernetes引入了Volume的概念。
Volume是Pod中能夠被多個容器訪問的共享目錄,它被定義在Pod上,然後被一個Pod里的多個容器掛載到具體的文件目錄下,kubernetes通過Volume實現同一個Pod中不同容器之間的數據共享以及數據的持久化存儲。Volume的生命容器不與Pod中單個容器的生命周期相關,當容器終止或者重啟時,Volume中的數據也不會丟失。
kubernetes的Volume支持多種類型,比較常見的有下面幾個:
EmptyDir是最基礎的Volume類型,一個EmptyDir就是Host上的一個空目錄。
EmptyDir是在Pod被分配到Node時創建的,它的初始內容為空,並且無須指定宿主機上對應的目錄文件,因為kubernetes會自動分配一個目錄,當Pod銷毀時, EmptyDir中的數據也會被永久刪除。 EmptyDir用途如下:
接下來,通過一個容器之間文件共享的案例來使用一下EmptyDir。
在一個Pod中准備兩個容器nginx和busybox,然後聲明一個Volume分別掛在到兩個容器的目錄中,然後nginx容器負責向Volume中寫日誌,busybox中通過命令將日誌內容讀到控制台。
創建一個volume-emptydir.yaml
EmptyDir中數據不會被持久化,它會隨著Pod的結束而銷毀,如果想簡單的將數據持久化到主機中,可以選擇HostPath。
HostPath就是將Node主機中一個實際目錄掛在到Pod中,以供容器使用,這樣的設計就可以保證Pod銷毀了,但是數據依據可以存在於Node主機上。
創建一個volume-hostpath.yaml:
HostPath可以解決數據持久化的問題,但是一旦Node節點故障了,Pod如果轉移到了別的節點,又會出現問題了,此時需要准備單獨的網路存儲系統,比較常用的用NFS、CIFS。
NFS是一個網路文件存儲系統,可以搭建一台NFS伺服器,然後將Pod中的存儲直接連接到NFS系統上,這樣的話,無論Pod在節點上怎麼轉移,只要Node跟NFS的對接沒問題,數據就可以成功訪問。
1)首先要准備nfs的伺服器,這里為了簡單,直接是master節點做nfs伺服器
2)接下來,要在的每個node節點上都安裝下nfs,這樣的目的是為了node節點可以驅動nfs設備
3)接下來,就可以編寫pod的配置文件了,創建volume-nfs.yaml
4)最後,運行下pod,觀察結果
前面已經學習了使用NFS提供存儲,此時就要求用戶會搭建NFS系統,並且會在yaml配置nfs。由於kubernetes支持的存儲系統有很多,要求客戶全都掌握,顯然不現實。為了能夠屏蔽底層存儲實現的細節,方便用戶使用, kubernetes引入PV和PVC兩種資源對象。
PV(Persistent Volume)是持久化卷的意思,是對底層的共享存儲的一種抽象。一般情況下PV由kubernetes管理員進行創建和配置,它與底層具體的共享存儲技術有關,並通過插件完成與共享存儲的對接。
PVC(Persistent Volume Claim)是持久卷聲明的意思,是用戶對於存儲需求的一種聲明。換句話說,PVC其實就是用戶向kubernetes系統發出的一種資源需求申請。
使用了PV和PVC之後,工作可以得到進一步的細分:
PV是存儲資源的抽象,下面是資源清單文件:
PV 的關鍵配置參數說明:
實驗
使用NFS作為存儲,來演示PV的使用,創建3個PV,對應NFS中的3個暴露的路徑。
1.准備NFS環境
2.創建pv.yaml
PVC是資源的申請,用來聲明對存儲空間、訪問模式、存儲類別需求信息。下面是資源清單文件:
PVC 的關鍵配置參數說明:
實驗
1.創建pvc.yaml,申請pv
2.創建pods.yaml, 使用pv
PVC和PV是一一對應的,PV和PVC之間的相互作用遵循以下生命周期:
ConfigMap是一種比較特殊的存儲卷,它的主要作用是用來存儲配置信息的。
創建configmap.yaml,內容如下:
接下來,使用此配置文件創建configmap
接下來創建一個pod-configmap.yaml,將上面創建的configmap掛載進去
在kubernetes中,還存在一種和ConfigMap非常類似的對象,稱為Secret對象。它主要用於存儲敏感信息,例如密碼、秘鑰、證書等等。
1.首先使用base64對數據進行編碼
2.接下來編寫secret.yaml,並創建Secret
3.創建pod-secret.yaml,將上面創建的secret掛載進去:
至此,已經實現了利用secret實現了信息的編碼。
『叄』 資料庫實驗-sql存儲過程
CREATE PROCEDURE P1
@XH VARCHAR(10) AS
IF @XH NOT IN(SELECT 學號 FROM 選課) INSERT 選課 VALUES(@XH,'1',0)
ELSE IF NOT EXISTS(SELECT * FROM 選課 WHERE 學號=@XH AND 成績>=60)
DELETE FROM 選課 WHERE 學號=@XH
ELSE SELECT * FROM 選課 WHERE 學號=@XH
『肆』 鑽石真的可以儲藏數據嗎
根據最近發表在《科學高級》上的一篇文章,鑽石可以用來長期存儲數據。實驗數據顯示,一顆鑽石的長度只有一粒米的一半,比一張紙還薄,它的數據存儲量是DVD的數百倍。與世界上不斷增長的數據和信息相比,這種存儲能力並不算太強。未來,物理學家有望將鑽石的存儲容量提高到DVD的一百萬倍甚至更多。
這些空穴通常儲存電子,使鑽石帶負電。然而,研究人員可以通過發射激光將鑽石變成中性。吸收激光後,小孔的特性將發生變化:它們在光線下不會再次閃爍,但始終保持深色。這種變化是可逆的,並且持續很長時間,弱光不會干擾它。研究結果表明,鑽石可以以負電荷和中性電荷的形式存儲數據,然後用激光讀、寫、擦、寫。接下來,domcal和他的同事將繼續探索如何從金剛石晶體的納米結構中讀寫數據。他說:鑽石晶元的數據存儲密度將遠高於傳統硬碟"