『壹』 如果有幾百億條數據,如何在hbase表中存放
1、首先你有沒有那麼多台伺服器的集群,如果只是幾台,你要想夠不夠,你的hbase 有幾百億,那麼你hdfs上的數據可能要有兩個備份,你這幾百億條是如何生成的,肯定是maprece跑出來導入到hbase中把,那麼原始數據你要不要留,如果留,加上備份就要三份,所以節點的多少要確定。
2、幾百億其實挺多的,hbase 的設計一定要跟你的業務相關,hbase他不能完全像關系型資料庫那樣去隨意查詢,到達一定量級,如果設計的不好也是非常之慢的,甚至將hbase搞到崩潰。所以你先去網上看看rowkey的設計原則,比如長度原則等等,然後根據自己業務,哪些查詢經常用到,哪些不會用到,想要用hbase實現那種非常靈活的類似關系資料庫的查詢是不理智的。
3、樓上的兄弟說得對,還有region熱點的問題,如果你的hbase數據不是那種每天增量的數據,建議跑個maprece對你的數據進行各評判,看看如何能將數據盡可能均勻的分配到每個region中,當然這需要預先分配region
4、幾百億條數據,如果對rowkey進行模糊過濾一定非常非常之慢,所以可以考慮二級索引或者協處理器
『貳』 tidb 好不好用
摘要 TiDB 是一款結合了傳統的關系型資料庫和 NoSQL 資料庫特性的新型分布式資料庫。
『叄』 DB2千萬或億級的數據如何存儲性能才最好
db2 list db directory $disk $disk 換成你的D:盤或者E:盤,DB2 Windows只允許安裝在盤符根目錄下,這樣就可以查看到盤里是否有資料庫,如果發現了catalog一下資料庫就回來了
『肆』 影像數據是每年增長最快的數據之一,如何有效提高影像數據的存儲管理
隨著最近幾年科技的發展,各類數據呈幾何級增長,影像數據在智慧城市、電力、醫療等行業尤其增長迅速,所以企業面臨著一個巨大的問題:影像數據該如何存儲管理?
面對海量的影像數據,傳統的存儲方式已經無法滿足存儲需求了,杉岩數據推出的海量對象存儲MOS,完美地解決了這個難題:
杉岩海量對象存儲MOS,採用去中心化、分布式技術架構,支持百億級文件及EB級容量存儲,
具備高效的數據檢索、智能化標簽和分析能力,輕松應對大數據和雲時代的存儲挑戰,為企業發展提供智能決策。
1、容量可線性擴展,單名字空間達EB級
SandStone MOS可在單一名字空間下實現海量數據存儲,支持業務無感知的存儲伺服器橫向擴容,為爆炸式增長的視頻、音頻、圖片、文檔等不同類型的非結構化數據提供完美的存儲方案,規避傳統NAS存儲的單一目錄或文件系統存儲空間無法彈性擴展難題
2、海量小文件存儲,百億級文件高效訪問
SandStone MOS基於完全分布式的數據和元數據存儲架構,為海量小文件存儲而生,將企業級NAS存儲的千萬文件量級提升至互聯網規模的百億級別,幫助企業從容應對幾何級增長的海量小文件挑戰。
3、中心靈活部署,容災匯聚分發更便捷
SandStone MOS支持多數據中心靈活部署,為企業數據容災、容災自動切換、多分支機構、數據就近訪問等場景提供可自定義的靈活解決方案,幫助企業實現跨地域多活容災、數據流轉、就近讀寫等,助力業務高速發展。
4、支持大數據和AI,統一數據存儲和分析
SandStone MOS內置文件智能化處理引擎,實現包括語音識別、圖片OCR識別、文件格式轉換等批量處理功能,結合標簽檢索能力還可實現語音、證件照片檢索,從而幫助企業更好地管理非結構化數據。同時,SandStone MOS還支持與Hadoop、Spark等大數據分析平台對接,一套存儲即可滿足企業數據存儲、管理和挖掘的需求。
『伍』 C語言中怎麼存放100億以上的數字
#include <stdio.h>
#define SIZE 500/* 有效位500 */
void main(void)
{
int i, j, k;
int count;/* 記數變數 */
int flag;/* 記數變數 */
int lenMax;/* 記錄數組sum的長度變數 */
int sum[SIZE] = { 0 };/* 過度數組 */
int [SIZE] = { 0 };/* 將數字拆分保存在裡面 */
int tmp[SIZE][SIZE] = { 0 };/* 過度數組 */
char result[SIZE] = {'1', '\0'};/* 保存結果 */
int num;/* 冪 */
char data[SIZE] = { '\0' };/* 數 */
printf("數 : ");
gets(data);
printf("冪 : ");
scanf("%d", &num);
/******************************************/
/*****************核心演算法*****************/
for (k=0; k<num; k++)/* 冪 */
{
for (i=0; i<SIZE; i++)/* 初始化sum成員(用於累加) */
{
sum[i] = 0;
}//endfor
lenMax = 0;/* 初始化 */
for (i=0; result[i]!='\0'; i++)
{
for (j=0; data[j]!='\0'; j++)
{
tmp[i][j] = (data[j] - '0') * (result[i] - '0');/* 字元形轉整形 */
sum[i+j] += tmp[i][j];/* 保存sum[0]到sum[lenMax]值 */
if (lenMax < (i + j))
{
lenMax = i + j;/* 記錄數組sum長度 */
}//endif
}//endfor
}//endfor
for (i=lenMax; i>0; i--)/* 對數據進行處理 */
{
if (sum[i] > 9)
{
sum[i-1] += (sum[i] / 10);
sum[i] %= 10;
}//endif
}//endfor
flag = 0;/* 初始化 */
for (i=0; i<=lenMax; i++)
{
count = 0;/* 初始化 */
if (sum[i] < 10)
{
result[flag++] = sum[i] + '0';/* 賦值 */
}//endif
else/* if (sum[i] >= 10)對數據進行拆分 */
{
for ( ; sum[i]>0; sum[i]/=10)
{
[count++] = sum[i] % 10;
}//endfor
for (count--; count>=0; count--)
{
result[flag++] = [count] + '0';/* 賦值 */
}//endfor
}//endelse
}//endfor
result[flag] = '\0';/* 將save做成完整字元串 */
for (i=0; result[i]!='\0'; i++)/* 為驗證結論正確列印所有過程以便觀察 */
{
putchar(result[i]);
putchar(' ');
}//endfor
printf("\n");
}//endfor
/*******************************************/
printf("\nResult : ");
for (i=0; result[i]!='\0'; i++)/* 最後結果 */
{
putchar(result[i]);
}//endfor
printf("\n\n\n\n\n");
}
『陸』 Redis百億級Key存儲設計方案
該應用場景為DMP緩存存儲需求,DMP需要管理非常多的第三方id數據,其中包括各媒體cookie與自身cookie(以下統稱supperid)的mapping關系,還包括了supperid的人口標簽、移動端id(主要是idfa和imei)的人口標簽,以及一些黑名單id、ip等數據。
在hdfs的幫助下離線存儲千億記錄並不困難,然而DMP還需要提供毫秒級的實時查詢。由於cookie這種id本身具有不穩定性,所以很多的真實用戶的瀏覽行為會導致大量的新cookie生成,只有及時同步mapping的數據才能命中DMP的人口標簽,無法通過預熱來獲取較高的命中,這就跟緩存存儲帶來了極大的挑戰。
經過實際測試,對於上述數據,常規存儲超過五十億的kv記錄就需要1T多的內存,如果需要做高可用多副本那帶來的消耗是巨大的,另外kv的長短不齊也會帶來很多內存碎片,這就需要超大規模的存儲方案來解決上述問題。
人⼝標簽主要是cookie、imei、idfa以及其對應的gender(性別)、age(年齡段)、geo(地域)等;mapping關系主要是媒體cookie對supperid的映射。以下是數據存儲⽰示例:
媒體編號-媒體cookie=>supperid
supperid => { age=>年齡段編碼,gender=>性別編碼,geo=>地理位置編碼 }
imei or idfa => { age=>年齡段編碼,gender=>性別編碼,geo=>地理位置編碼 }
顯然PC數據需要存儲兩種key=>value還有key=>hashmap,⽽而Device數據需要存儲⼀一種
key=>hashmap即可。
存儲吃緊的一個重要原因在於每天會有很多新數據入庫,所以及時清理數據尤為重要。主要方法就是發現和保留熱數據淘汰冷數據。
網民的量級遠遠達不到幾十億的規模,id有一定的生命周期,會不斷的變化。所以很大程度上我們存儲的id實際上是無效的。而查詢其實前端的邏輯就是廣告曝光,跟人的行為有關,所以一個id在某個時間窗口的(可能是一個campaign,半個月、幾個月)訪問行為上會有一定的重復性。
數據初始化之前,我們先利用hbase將日誌的id聚合去重,劃定TTL的范圍,一般是35天,這樣可以砍掉近35天未出現的id。另外在Redis中設置過期時間是35天,當有訪問並命中時,對key進行續命,延長過期時間,未在35天出現的自然淘汰。這樣可以針對穩定cookie或id有效,實際證明,續命的方法對idfa和imei比較實用,長期積累可達到非常理想的命中。
Hash表空間大小和Key的個數決定了沖突率(或者用負載因子衡量),再合理的范圍內,key越多自然hash表空間越大,消耗的內存自然也會很大。再加上大量指針本身是長整型,所以內存存儲的膨脹十分可觀。先來談談如何把key的個數減少。
大家先來了解一種存儲結構。我們期望將key1=>value1存儲在redis中,那麼可以按照如下過程去存儲。先用固定長度的隨機散列md5(key)值作為redis的key,我們稱之為BucketId,而將key1=>value1存儲在hashmap結構中,這樣在查詢的時候就可以讓client按照上面的過程計算出散列,從而查詢到value1。
過程變化簡單描述為:get(key1) -> hget(md5(key1), key1) 從而得到value1。
如果我們通過預先計算,讓很多key可以在BucketId空間里碰撞,那麼可以認為一個BucketId下面掛了多個key。比如平均每個BucketId下面掛10個key,那麼理論上我們將會減少超過90%的redis key的個數。
具體實現起來有一些麻煩,而且用這個方法之前你要想好容量規模。我們通常使用的md5是32位的hexString(16進制字元),它的空間是128bit,這個量級太大了,我們需要存儲的是百億級,大約是33bit,所以我們需要有一種機制計算出合適位數的散列,而且為了節約內存,我們需要利用全部字元類型(ASCII碼在0~127之間)來填充,而不用HexString,這樣Key的長度可以縮短到一半。
下面是具體的實現方式
參數bit決定了最終BucketId空間的大小,空間大小集合是2的整數冪次的離散值。這里解釋一下為何一個位元組中只有7位可用,是因為redis存儲key時需要是ASCII(0~127),而不是byte array。如果規劃百億級存儲,計劃每個桶分擔10個kv,那麼我們只需2^30=1073741824的桶個數即可,也就是最終key的個數。
碎片主要原因在於內存無法對齊、過期刪除後,內存無法重新分配。通過上文描述的方式,我們可以將人口標簽和mapping數據按照上面的方式去存儲,這樣的好處就是redis key是等長的。另外對於hashmap中的key我們也做了相關優化,截取cookie或者deviceid的後六位作為key,這樣也可以保證內存對齊,理論上會有沖突的可能性,但在同一個桶內後綴相同的概率極低(試想id幾乎是隨機的字元串,隨意10個由較長字元組成的id後綴相同的概率*桶樣本數=發生沖突的期望值<<0.05,也就是說出現一個沖突樣本則是極小概率事件,而且這個概率可以通過調整後綴保留長度控制期望值)。而value只存儲age、gender、geo的編碼,用三個位元組去存儲。
另外提一下,減少碎片還有個很low但是有效的方法,將slave重啟,然後強制的failover切換主從,這樣相當於給master整理的內存的碎片。
推薦Google-tcmalloc, facebook-jemalloc內存分配,可以在value不大時減少內存碎片和內存消耗。有人測過大value情況下反而libc更節約。
1)kv存儲的量級必須事先規劃好,浮動的范圍大概在桶個數的十到十五倍,比如我就想存儲百億左右的kv,那麼最好選擇30bit 31bit作為桶的個數。也就是說業務增長在一個合理的范圍(10 15倍的增長)是沒問題的,如果業務太多倍數的增長,會導致hashset增長過快導致查詢時間增加,甚至觸發zip-list閾值,導致內存急劇上升。
2)適合短小value,如果value太大或欄位太多並不適合,因為這種方式必須要求把value一次性取出,比如人口標簽是非常小的編碼,甚至只需要3、4個bit(位)就能裝下。
3)典型的時間換空間的做法,由於我們的業務場景並不是要求在極高的qps之下,一般每天億到十億級別的量,所以合理利用CPU租值,也是十分經濟的。
4)由於使用了信息摘要降低了key的大小以及約定長度,所以無法從redis裡面random出key。如果需要導出,必須在冷數據中導出。
5)expire需要自己實現,目前的演算法很簡單,由於只有在寫操作時才會增加消耗,所以在寫操作時按照一定的比例抽樣,用HLEN命中判斷是否超過15個entry,超過才將過期的key刪除,TTL的時間戳存儲在value的前32bit中。
6)桶的消耗統計是需要做的。需要定期清理過期的key,保證redis的查詢不會變慢。
人口標簽和mapping的數據100億條記錄。
優化前用2.3T,碎片率在2左右;優化後500g,而單個桶的平均消耗在4左右。碎片率在1.02左右。查詢時這對於cpu的耗損微乎其微。
另外需要提一下的是,每個桶的消耗實際上並不是均勻的,而是符合多項式分布的。
上面的公式可以計算桶消耗的概率分布。公式是唬人用的,只是為了提醒大家不要想當然的認為桶消耗是完全均勻的,有可能有的桶會有上百個key。但事實並不沒有那麼誇張。試想一下投硬幣,結果只有兩種正反面。相當於只有兩個桶,如果你投上無限多次,每一次相當於一次伯努利實驗,那麼兩個桶必然會十分的均勻。概率分布就像上帝施的魔咒一樣,當你面對大量的桶進行很多的廣義的伯努利實驗。桶的消耗分布就會趨於一種穩定的值。接下來我們就了解一下桶消耗分布具體什麼情況:
通過采樣統計
31bit(20多億)的桶,平均4.18消耗
100億節約了1.8T內存。相當於節約了原先的78%內存,而且桶消耗指標遠沒有達到預計的底線值15。
對於未出現的桶也是存在一定量的,如果過多會導致規劃不準確,其實數量是符合二項分布的,對於2 30桶存儲2 32kv,不存在的桶大概有(百萬級別,影響不大):
Math.pow((1 - 1.0 / Math.pow(2, 30)), Math.pow(2, 32)) * Math.pow(2, 30);
對於桶消耗不均衡的問題不必太擔心,隨著時間的推移,寫入時會對HLEN超過15的桶進行削減,根據多項式分布的原理,當實驗次數多到一定程度時,桶的分布就會趨於均勻(硬幣投擲無數次,那麼正反面出現次數應該是一致的),只不過我們通過expire策略削減了桶消耗,實際上對於每個桶已經經歷了很多的實驗發生。
總結:信息摘要在這種場景下不僅能節約key存儲,對齊了內存,還能讓Key按照多項式分布均勻的散列在更少量的key下面從而減少膨脹,另外無需在給key設置expire,也很大程度上節約了空間。
這也印證了時間換空間的基本理論,合理利用CPU租值也是需要考慮的。
關注分布式存儲技術以及分布式計算方法
『柒』 非結構化數據的雲計算與非結構化數據
據IDC的一項調查報告中指出:企業中80%的數據都是非結構化數據,這些數據每年都按指數增長60%。非結構化數據,顧名思義,是存儲在文件系統的信息,而不是資料庫。據報道指出:平均只有1%-5%的數據是結構化的數據。如今,這種迅猛增長的從不使用的數據在企業里消耗著復雜而昂貴的一級存儲的存儲容量。如何更好的保留那些在全球范圍內具有潛在價值的不同類型的文件,而不是因為處理它們卻干擾日常的工作?當然你可以采購更多的就地存儲設備,但這總會有局限性的。雲存儲是越來越多的IT公司正在使用的存儲技術。下面的分段解釋了一些關於存儲在雲中的商業信息的關鍵要點。員工面臨新挑戰 數據如何被管理?
當企業參與到全球經濟競爭中,IT員工面臨著讓分布在全球的員工能夠有效訪問重要數據的新挑戰。全球分布的團隊需要共享對大型的文件和數據集的讀寫訪問,但這顯然增加了數據管理的復雜性。另外不斷地採用數據同步功能和精確度的問題都影響企業的工作效率。
雲存儲業務外包 降低成本是否可行?
隨著基於雲存儲服務項目的增長,各種類型的企業都有能力將數據存儲業務外包。利用這些外包服務,企業能大幅減少存儲基礎架構成本,在減少人工管理非結構化數據所需時間的同時增加了存儲的靈活性,這在以前的企業中從未被使用過。另外,雲服務也帶來了巨大的經濟效益。
雲存儲有多大 價格是否更合理?
大多數服務提供商對於雲存儲的定價都是根據實際使用了多少存儲容量而決定的。支付多少錢就享用多少容量。因此不再需要存儲架構師,也不再需要安裝和管理存儲設備。
如果你使用200TB的存儲容量,你就只需支付200TB存儲的這部分錢即可。如果你的公司突然需要在明天增加34TB的存儲容量,你不需要增加任何存儲設備,只需要在開賬單的周期支付存儲多增加出來的錢即可。如果其中一部分存儲容量只是暫時性的話,你可以輕松地從雲中刪除不需要的數據,以減少使用的容量,並送交最終的賬單。但本地的存儲基礎設施並沒有這些功能。
數據中心安全第一 有害訪問強制隔離
如果你曾配置過數據中心,必須要保證物理安全。未經授權的人通過各種層級的物理安全獲得數據的機會是幾乎不可能的。檢查存儲供應商提供的服務,你會發現這些數據中心不僅是保障不能出現有害的物理訪問,還在於保護通過任何自然和人為操作所產生的災難
雲存儲網關發威 惡意訪問皆退散
物理安全對於企業去阻止惡意訪問來說是非常重要的。越來越多的廠商提供雲存儲網關(cloud storage gateway)應用,無論是在傳輸中還是在靜止中都能夠保證高級別的數據安全。網關能夠處理前端數據的存儲進程。數據實際被存儲在服務商提供的基礎設施中,像是Rackspace、AT&T、i365、Amazon S3等等。
備份記錄復雜昂貴雲存儲簡單方便
隨著備份和災難恢復的處理和要求變得越來越復雜、昂貴以及耗費時間。雲存儲服務能夠大大地減少這種復雜性和成本。當在雲中存儲一個大數據集的時候,答案可以像復制數據到多重地理分布位置一樣的簡單。
單一技術非萬能 分析思考更有效
像任何技術一樣,根本不存一個萬能的解決方案,雲存儲也是如此。仔細地檢查當前的存儲基礎設施,創建數據的應用以及數據的用戶。只有更仔細的分析,才能更加的清楚:基於雲的存儲通常完美適用於第二層級(Tier 2)的數據,以及那些需要在多個位置共享的數據。
『捌』 企業非結構化數據存儲用哪家的比較好要國內的廠商
杉岩、星辰天合、元核雲等,這些國內的存儲廠商都做得挺好的,也能滿足你問題中的需求。
『玖』 什麼是結構化數據,非結構化數據
(1)結構化數據,簡單來說就是資料庫。結合到典型場景中更容易理解,比如企業ERP、財務系統;醫療HIS資料庫;政府行政審批;其他核心資料庫等。這些應用需要哪些存儲方案呢?基本包括高速存儲應用需求、數據備份需求、數據共享需求以及數據容災需求。
(2)非結構化資料庫是指其欄位長度可變,並且每個欄位的記錄又可以由可重復或不可重復的子欄位構成的資料庫,用它不僅可以處理結構化數據(如數字、符號等信息)而且更適合處理非結構化數據(全文文本、圖像、聲音、影視、超媒體等信息)。
面對海量非結構數據存儲,杉岩海量對象存儲MOS,提供完整解決方案,採用去中心化、分布式技術架構,支持百億級文件及EB級容量存儲,具備高效的數據檢索、智能化標簽和分析能力,輕松應對大數據和雲時代的存儲挑戰,為企業發展提供智能決策。
『拾』 海量數據存儲有哪些方式與方法
杉岩海量對象存儲MOS,針對海量非結構化數據存儲的最優化解決方案,採用去中心化、分布式技術架構,支持百億級文件及EB級容量存儲,
具備高效的數據檢索、智能化標簽和分析能力,輕松應對大數據和雲時代的存儲挑戰,為企業發展提供智能決策。
1、容量可線性擴展,單名字空間達EB級
SandStone MOS可在單一名字空間下實現海量數據存儲,支持業務無感知的存儲伺服器橫向擴容,為爆炸式增長的視頻、音頻、圖片、文檔等不同類型的非結構化數據提供完美的存儲方案,規避傳統NAS存儲的單一目錄或文件系統存儲空間無法彈性擴展難題
2、海量小文件存儲,百億級文件高效訪問
SandStone MOS基於完全分布式的數據和元數據存儲架構,為海量小文件存儲而生,將企業級NAS存儲的千萬文件量級提升至互聯網規模的百億級別,幫助企業從容應對幾何級增長的海量小文件挑戰。
3、中心靈活部署,容災匯聚分發更便捷
SandStone MOS支持多數據中心靈活部署,為企業數據容災、容災自動切換、多分支機構、數據就近訪問等場景提供可自定義的靈活解決方案,幫助企業實現跨地域多活容災、數據流轉、就近讀寫等,助力業務高速發展。
4、支持大數據和AI,統一數據存儲和分析
SandStone MOS內置文件智能化處理引擎,實現包括語音識別、圖片OCR識別、文件格式轉換等批量處理功能,結合標簽檢索能力還可實現語音、證件照片檢索,從而幫助企業更好地管理非結構化數據。同時,SandStone MOS還支持與Hadoop、Spark等大數據分析平台對接,一套存儲即可滿足企業數據存儲、管理和挖掘的需求。