1. 大數據興起 重復數據刪除4項注意
大數據興起 重復數據刪除4項注意
根據全球市場的反饋來看,IT技術推動公司的歷程性進步,繼續著信息革命時代的傳奇。重復數據刪除技術目前已成為存儲行業最為熱門的技術,不僅眾多廠商極力推薦其重復數據刪除產品,廣大用戶也在熱切的關注著重復數據刪除技術。
從全球企業界興起的這種熱鬧局面,主要是由當前經濟大環境不景氣的外部原因,以及企業自身數據飛速增長的內部原因共同形成。作為重復數據刪除產品越來越受用戶關注的同時,其功能作用也被過分的放大,成為廠商推銷其產品的賣點和噱頭。就此問題,用戶在選擇重復數據刪除產品時還需要謹慎起見。
重復數據刪除對你是否有意義?
那用戶首先需要問自己的就是是否真的需要重復數據刪除技術。就目前的一些調查情況來看:一些類似醫療影像處理的數據並不適合進行重復數據刪除,另外金融、電信等對數據可靠性要求比較高的行業對重復數據刪除也需要謹慎對待。用戶如果趕時髦、追潮流,不考慮自身企業的數據情況,購買重復數據刪除產品只能取得適得其反的結果。
事實上,這種只保存數據單一實例的技術早已存在,只是在備份領域中才被突顯出來,並定名為重復數據刪除。正是由於企業在備份過程中存儲了大量的重復數據、浪費了大量存儲空間,最終才催化出重復數據刪除技術。重復數據刪除的宗旨就是為企業用戶的備份解決方案服務,使得企業備份解決方案更加完善、高效。如果脫離這個宗旨,廠商一味強調重復數據刪除的一些優點,卻忽視企業在數據安全性和備份等方面可能做出的巨大犧牲,那麼毫無疑問,這種本末倒置的作法最終受害的將是用戶。
因此,用戶在選購重復數據刪除產品時需要思考重復數據刪除是否對你有意義?你的企業是否真的需要重復數據刪除?如果廠商不顧你的現實情況,不負責任的向你推銷其重復數據刪除產品,那麼恭喜你,你遇到「騙子」了……
重復數據刪除對現有備份環境是否造成影響?影響有多大?
企業用戶備份做兩次全備份時間間隔一般不長,通常只有不超過5%的數據是不同的,剩餘大部分數據都是相同的,因此,重復數據刪除絕對可以給企業備份系統帶來很大的好處。從而衍生出這樣一個問題:重復數據刪除是否會對企業現有備份環境造成影響?可能會造成什麼樣的影響?這種影響有多大?
如果你的備份環境已經有比較長的時間了,各項備份機制都趨於完善,這個時候你應該考慮加入重復數據刪除解決方案。那麼你要選擇什麼樣的重復數據刪除產品呢?是選擇在線處理方式(In-line)的重復數據刪除產品,還是選擇後處理方式(Post-Processing)的重復數據刪除產品呢?這里需要告誡你的是:In-line方式可能並不適合你當前的備份環境。因為In-line方式可能給你的備份環境帶來很大的改變,不僅可能你的備份軟體需要升級、備份設備需要更換,還可能出現備份機制、備份習慣的通通改變。更有可能出現,改變現有備份環境會使備份處理的速度變的很慢,甚至引發無法預計且不可恢復的數據丟失。所以如果用戶不仔細考慮重復數據刪除產品對現有備份環境的影響,則很可能將已有的備份環境做出巨大改變,而這種巨大的改變也犯了IT建設之大忌。
因此,用戶在選購重復數據刪除產品之前必須對所選產品對現有備份環境的影響進行評估,盡量選擇那些對已有備份環境沒有影響的產品。
單一不重復數據的安全性該如何保障?
當用戶選擇好重復數據刪除產品進行重復數據刪除操作後會猛然發現這么一個問題:進行完重復數據刪除後,我的數據只剩下單一不重復數據,更為要命的是單一不重復數據是集中保存在一個存儲區域中。單一不重復數據的安全性瞬間就成為用戶最為棘手問題,用戶會發現自己把寶都押在同一個地方,彷彿就是把所有雞蛋都放在了同一個籃子里。這時候,VTL在重復數據刪除解決方案中的重要性就顯現出來了。用戶可以在VTL中再拷貝一份單一不重復數據,還可以通過遠程鏡像技術將數據鏡像到不同地域的不同存儲設備上。另外,還可以通過這種高可用性(HA)架構來消除單點故障(SPOF),提高VTL系統自身的高可靠性,使整個備份系統更安全。
你想把自己所有雞蛋都放在一個籃子里,然後終日過著如履薄冰、膽戰心驚、誠惶誠恐的日子嗎?如果不想,那麼請你在選擇重復數據刪除解決方案時,仔細思考一下單一不重復數據安全的安全性問題!如果廠商解決方案不能夠很好解決這個重要問題,毫無疑問的恭喜你,你可能又遇到一個「大忽悠」!
擴展性與成本對於重復數據刪除技術很重要嗎?
用戶選擇了重復數據刪除技術並不意味著以後就萬事大吉,數據量該增長還得增長,存儲容量該增加還得增加,用戶還得去面對存儲解決方案可擴展性的問題。
從長遠的角度來看,單台重復數據刪除設備根本無法滿足企業的需求,企業將來也必然會面對多台重復數據刪除設備,這就凸現出下面的情況:企業考慮用多台重復數據刪除設備來完成備份,那麼每台重復數據刪除設備能否識別自身已備份的數據在其他設備上是否也已經備份了?出現這種情況是否會影響到整個備份系統的重復數據刪除比?是否會增加維護的難度?
因此企業將來面對的集群架構必須具有良好的擴展能力和集群式的重復數據刪除技術。集群架構應該是通過統一性的添加VTL節點來擴展,還需要能夠做到任意時間添加存儲而不出現中斷處理的情況。只有這樣才能夠具有最優的管理能力和擴展能力。如果廠商不能夠提供很好的擴展方案,那麼極易形成備份孤島,那時,用戶的設備采購成本、管理復雜性和管理成本都將加大的增加。
綜上所述,用戶選購重復數據刪除產品時,應該以正確的心態去面對它,本文上面提到重復數據刪除產品選購四大注意事項:重復數據刪除是否對你有意義、重復數據刪除對現有備份環境有多大影響、重復數據安全性如何保障、重復數據刪除的擴展性和成本,正是從用戶自身角度來看待重復數據刪除產品。專家表示,相信用戶只要很好的遵循這四個角度去選購重復數據刪除產品,一定能夠選購到最適合自己的產品,也一定能夠讓用戶的備份環境得到更好的優化。
2. C語言大數據問題
給你提個思路吧,這種大數據都必須用數組來做的。把數字直接定內義成數組,然後將容轉換規則寫成代碼,而不是直接用取余或取整來做。我給你上傳一個大數加法的代碼,給你些啟發吧。想要代碼可以先採納我,然後我給你寫一個進制轉換的代碼。你這分太少,多些我會直接給你寫個代碼的。
3. 大數據經典演算法解析(1)一C4.5演算法
姓名:崔升 學號:14020120005
【嵌牛導讀】:
C4.5作為一種經典的處理大數據的演算法,是我們在學習互聯網大數據時不得不去了解的一種常用演算法
【嵌牛鼻子】:經典大數據演算法之C4.5簡單介紹
【嵌牛提問】:C4.5是一種怎麼的演算法,其決策機制靠什麼實現?
【嵌牛正文】:
決策樹模型:
決策樹是一種通過對特徵屬性的分類對樣本進行分類的樹形結構,包括有向邊與三類節點:
根節點(root node),表示第一個特徵屬性,只有出邊沒有入邊;
內部節點(internal node),表示特徵屬性,有一條入邊至少兩條出邊
葉子節點(leaf node),表示類別,只有一條入邊沒有出邊。
上圖給出了(二叉)決策樹的示例。決策樹具有以下特點:
對於二叉決策樹而言,可以看作是if-then規則集合,由決策樹的根節點到葉子節點對應於一條分類規則;
分類規則是 互斥並且完備 的,所謂 互斥 即每一條樣本記錄不會同時匹配上兩條分類規則,所謂 完備 即每條樣本記錄都在決策樹中都能匹配上一條規則。
分類的本質是對特徵空間的劃分,如下圖所示,
決策樹學習:
決策樹學習的本質是從訓練數據集中歸納出一組分類規則[2]。但隨著分裂屬性次序的不同,所得到的決策樹也會不同。如何得到一棵決策樹既對訓練數據有較好的擬合,又對未知數據有很好的預測呢?
首先,我們要解決兩個問題:
如何選擇較優的特徵屬性進行分裂?每一次特徵屬性的分裂,相當於對訓練數據集進行再劃分,對應於一次決策樹的生長。ID3演算法定義了目標函數來進行特徵選擇。
什麼時候應該停止分裂?有兩種自然情況應該停止分裂,一是該節點對應的所有樣本記錄均屬於同一類別,二是該節點對應的所有樣本的特徵屬性值均相等。但除此之外,是不是還應該其他情況停止分裂呢?
2. 決策樹演算法
特徵選擇
特徵選擇指選擇最大化所定義目標函數的特徵。下面給出如下三種特徵(Gender, Car Type, Customer ID)分裂的例子:
圖中有兩類類別(C0, C1),C0: 6是對C0類別的計數。直觀上,應選擇Car Type特徵進行分裂,因為其類別的分布概率具有更大的傾斜程度,類別不確定程度更小。
為了衡量類別分布概率的傾斜程度,定義決策樹節點tt的不純度(impurity),其滿足:不純度越小,則類別的分布概率越傾斜;下面給出不純度的的三種度量:
其中,p(ck|t)p(ck|t)表示對於決策樹節點tt類別ckck的概率。這三種不純度的度量是等價的,在等概率分布是達到最大值。
為了判斷分裂前後節點不純度的變化情況,目標函數定義為信息增益(information gain):
I(⋅)I(⋅)對應於決策樹節點的不純度,parentparent表示分裂前的父節點,NN表示父節點所包含的樣本記錄數,aiai表示父節點分裂後的某子節點,N(ai)N(ai)為其計數,nn為分裂後的子節點數。
特別地,ID3演算法選取 熵值 作為不純度I(⋅)I(⋅)的度量,則
cc指父節點對應所有樣本記錄的類別;AA表示選擇的特徵屬性,即aiai的集合。那麼,決策樹學習中的信息增益ΔΔ等價於訓練數據集中 類與特徵的互信息 ,表示由於得知特徵AA的信息訓練數據集cc不確定性減少的程度。
在特徵分裂後,有些子節點的記錄數可能偏少,以至於影響分類結果。為了解決這個問題,CART演算法提出了只進行特徵的二元分裂,即決策樹是一棵二叉樹;C4.5演算法改進分裂目標函數,用信息增益比(information gain ratio)來選擇特徵:
因而,特徵選擇的過程等同於計算每個特徵的信息增益,選擇最大信息增益的特徵進行分裂。此即回答前面所提出的第一個問題(選擇較優特徵)。ID3演算法設定一閾值,當最大信息增益小於閾值時,認為沒有找到有較優分類能力的特徵,沒有往下繼續分裂的必要。根據最大表決原則,將最多計數的類別作為此葉子節點。即回答前面所提出的第二個問題(停止分裂條件)。
決策樹生成:
ID3演算法的核心是根據信息增益最大的准則,遞歸地構造決策樹;演算法流程如下:
如果節點滿足停止分裂條件(所有記錄屬同一類別 or 最大信息增益小於閾值),將其置為葉子節點;
選擇信息增益最大的特徵進行分裂;
重復步驟1-2,直至分類完成。
C4.5演算法流程與ID3相類似,只不過將信息增益改為 信息增益比 。
3. 決策樹剪枝
過擬合
生成的決策樹對訓練數據會有很好的分類效果,卻可能對未知數據的預測不準確,即決策樹模型發生過擬合(overfitting)——訓練誤差(training error)很小、泛化誤差(generalization error,亦可看作為test error)較大。下圖給出訓練誤差、測試誤差(test error)隨決策樹節點數的變化情況:
可以觀察到,當節點數較小時,訓練誤差與測試誤差均較大,即發生了欠擬合(underfitting)。當節點數較大時,訓練誤差較小,測試誤差卻很大,即發生了過擬合。只有當節點數適中是,訓練誤差居中,測試誤差較小;對訓練數據有較好的擬合,同時對未知數據有很好的分類准確率。
發生過擬合的根本原因是分類模型過於復雜,可能的原因如下:
訓練數據集中有噪音樣本點,對訓練數據擬合的同時也對噪音進行擬合,從而影響了分類的效果;
決策樹的葉子節點中缺乏有分類價值的樣本記錄,也就是說此葉子節點應被剪掉。
剪枝策略
為了解決過擬合,C4.5通過剪枝以減少模型的復雜度。[2]中提出一種簡單剪枝策略,通過極小化決策樹的整體損失函數(loss function)或代價函數(cost function)來實現,決策樹TT的損失函數為:
其中,C(T)C(T)表示決策樹的訓練誤差,αα為調節參數,|T||T|為模型的復雜度。當模型越復雜時,訓練的誤差就越小。上述定義的損失正好做了兩者之間的權衡。
如果剪枝後損失函數減少了,即說明這是有效剪枝。具體剪枝演算法可以由動態規劃等來實現。
4. 參考資料
[1] Pang-Ning Tan, Michael Steinbach, Vipin Kumar, Introction to Data Mining .
[2] 李航,《統計學習方法》.
[3] Naren Ramakrishnan, The Top Ten Algorithms in Data Mining.
4. c語言處理文件里的大數據
C語言處理大數據一般有三種處理方法:
1.分段處理,即無論文件多大,程序中使用的永遠只是一小段部分,可以使用一個緩沖區,根據用戶交互輸入,分段的輸出;
2.使用內存文件映射,這是最常用的文件的處理方法,Linux和Windows都提供一種內存文件映射的機制,以Windows為例,可以調用 CreateFile、 CreateFileMapping以及 MapViewOfFile三個函數來完成內存文件映射;
3.使用資料庫,藉助SQL查詢語言對大數據進行操作。
5. 有關資料庫中龐大數據量查詢的問題!
遍歷一遍?你是搞c的吧?
暈死,搞資料庫的和搞c的果然有一道鴻溝,語言說不到一起去,如果是你要求的目的,其實很簡單
首先,索引是必須的,這可以減少大量的查詢時間,至於是否重復,各個資料庫有不同的語法,這里只說通用寫法,而不說個別資料庫的專用寫法
比如說有一張表users,裡面存了所有人的人員信息,其中,姓名,性別,年齡,出身時間幾個欄位不能完全相同,最簡單的方法就是將這幾個欄位設為唯一索引,好處是如果出現重復會自動停止報錯,壞處是如果你有大量操作的話,可能會因為報錯,整個作業都停下來
第二種方法,將這幾個欄位拼起來進行存在性判斷,將不存在的插入
比如將user1的數據插入user2,且都有主鍵user_id,最簡單的防止重復手段是
insert into user2 select * from user1 where user_id not in (select user_id from user2)
這種解決辦法的寫法很多,但是大多數屬於專用的,不是所有資料庫都能用的,比如 insert into user2 select * from user1 except select * from user2
這是很少有資料庫能用的專用語句
當然,這種寫法雖然通用,性能不是如何好
第三種是比較特殊的,需要寫過很長時間語句的人才能寫出來,為什麼這么寫我很難解釋清楚,但是性能提高很多,這里舉個例子。
insert into user2
select a.* from user1 a left join user2 b on a.user_id=b.user_id
where b.user_id is null