1. 程式人生 > >雲盤秒傳原理的探討——雜湊查詢與資料去重

雲盤秒傳原理的探討——雜湊查詢與資料去重

P個重要的S:用雲盤存片的童鞋注意了,別以為你辛辛苦苦收集好幾年的片存到雲盤就高枕無憂了,根據“假秒傳,真共享”原則,你秒傳的檔案是非常不保險的,很容易被河蟹,已經有童鞋表示存到雲盤的片子被河蟹了。

自己多年的“勞動成果”很有可能突然化為烏有!!!

自己的“財產”突然被剝奪了你有脾氣麼?

不是有可能,是已經被刪了,我很憤怒有木有!!!!

如果把檔案和資料比做財產(很多時候已經是了),只因為你的檔案和別人的一樣,然後別人犯法了,買賣了,你的檔案也跟著沒了。“雲盤”這不是赤裸裸的對個人財產的剝奪嗎?!!!!

想保住革命果實,趕緊看下邊的方法,打造屬於你自己的,獨特的,不被河蟹的雲碟片源。

============================================================================================================================

前幾天給360雲盤傳了《一個華爾街之狼》(無刪減送審版,很暴力呦:http://yunpan.cn/QICpnLPX3CLaX),但是是秒傳的,當時能想到肯定是伺服器有了,但是它憑什麼知道已經有?檔名?不可能,亂七八糟什麼檔名都有,我改了一個試試,還是秒傳~究竟是什麼原理呢?

首先想到的是360雲盤利用檔案識別符號之類,唯一的ID,有檔案相關資訊等,尤其是索引資訊。但後來感覺不對,查了一下,原來識別符號指的是檔名,那個概念應該是檔案描述符。那是否是通過檔案描述符來解決檔案重複的問題呢?仔細想想,明顯不是,很關鍵的一個問題其實是,檔案索引,描述符,它唯一的標識你的硬碟中某檔案的索引資訊,在另一臺機子上他就是另一個ID了,這是針對系統的而不是針對檔案的。

那麼檔案有什麼唯一性呢?想起了mp3檔案可以改屬性,包括音樂家、專輯等,而且很多播放器是利用這個屬性來自動匹配歌詞等資訊的。但是視訊檔案好像不是這樣的。到這,常識已經用的差不多了,似乎沒找到方向。


其實通過過去網盤常用的連結共享,或者百度文庫的收藏功能就可以知道,通過把同一個檔案分發一些連結等假象,是可以讓很多人同時”擁有“的。不過看雲盤需要角度更深一點,是不管你們共享不共享,傳播不傳播,只要檔案相同,他都是隻存一份(問題簡單化,不考慮分散式和備份等現實問題)。那他怎麼做到的呢?是對比整個檔案嗎?如果真的去一個位元組一個位元組的完全不差的比較,那樣伺服器不得憋死~!其實,他只要比較HASH值就夠了,聯想我們去網上下東西,某些網站,是不是也經常看到HASH值呢。那計算HASH值是不是也得耗費伺服器資源呢,其實,HASH去重也是分粒度的,有檔案去重,塊去重,位元組去重,粒度越細的準確率越高,相應的耗費伺服器資源肯定也要多,這裡只要檔案級別的去重就夠了

,有誰沒事閒的(或者具備一定的知識而有能力)去修改一個音視訊檔案呢?太少了吧,對於大多數人,除了檔名,他的音視訊檔案無非就是網上流傳的幾個熱門版本,這樣大家都用一個就夠了,是不是很節約雲盤資源呢?通過數十個視訊數十G大規模的上傳證實,雖然這些檔案都“秒傳”了,但是沒那麼迅速,說明檢索龐大的資料庫是需要時間的,或者跟顆粒粗細有關係。

“破解”秒傳的辦法:比如360雲盤,把電影檔案隨便改哪怕一個字元,那應該就“秒傳”不成了。這樣仇視360的就可以通過不斷上傳垃圾檔案飽和攻擊360網盤了(不過怕網速不夠)。如果真的這種現象頻繁了,他們可以把去重粒度轉為位元組級,這樣你把一個位元組改一百次,因為其他部分都重複,所以只需增加99位元組(問題簡單化分析)的空間,不過考慮到檔案太大,可能粒度需要把調整到塊來應對~又是另一個根據現實情況分析對策的問題了。

箇中細節,其實我也不是很瞭解,只是整合了一些知識進行了一個小猜想,不保證對,想解釋的很透,還得再充電。

補充測試:

前邊說的不是非常準確吧,hash碼我不知道,但是回到mp3的問題上,mp3的檔案頭是有各種歌曲歌手資訊的,也許人家去重就是通過這個檔案頭,這個是我知識範圍能搞定的事

百度雲盤下載了一個華爾街之狼插曲——the money chant.mp3,秒傳360雲盤。

用UE開啟mp3檔案,如圖:


掛到linux

[email protected]:/mnt/hgfs/share2VM# cp The\ Money\ Chant.mp3 /tmp
[email protected]:/mnt/hgfs/share2VM# cd /tmp
[email protected]:/tmp# ls
at-spi2             ssh-bCAlBYJZ2212      VMwareDnD      vmware-root-2966103375
pulse-2L9K88eMlGn7  The Money Chant.mp3   vmware-huhuhu
pulse-PKdhtXMmr18n  unity_support_test.0  vmware-root
用vi開啟,把ID3(注意看上圖)直接改成ID4:


[email protected]:/tmp# cp The\ Money\ Chant.mp3 /mnt/hgfs/share2VM/The\ Money\ Chant_ID4.mp3
傳回去,不影響,能聽,傳360雲盤,秒傳失敗大笑大笑


當然,這是改了二進位制檔案的,不是改檔名,至於改檔名行不行,你試試~偷笑

另外,不光ID3,後邊的幾個改了也有點效果(我這顯示的效果有上傳過程有網速,不過還是近乎秒傳,不知道是不是網速太快了,有時候能到1M,估計還是太快了,加上他在進度條出現之前耗了一陣子,所以剛看到進度條就快滿了,有條件還是應該用電影測試,我硬碟太小,沒存~~~~)。

最後一個小規律就是,人家應該是存了一個數據庫的,放索引用(也許就是檔案頭)。你剛上傳一個個性化定製(ID4)的MP3檔案,哪怕馬上又刪了,第二個和他一樣的也能秒傳了。

那樣貌似會出問題?你的刪了,別人是“秒傳”不是真傳。那他也下載不到這個檔案了,最後出現空有標題沒有檔案的尷尬~怎麼辦?

其實你只管刪你的就行了,人家伺服器還是存著呢,不光檔案頭存著,物理硬碟也躺著一份。可以”秒傳“,就不可以“秒刪”麼?“秒刪”又是一個假象,只是你對該檔案的定向沒了,人家伺服器才懶得幫你刪了又裝,並且人家可以用來讓別人“秒傳”。

具體的流程應該是你上傳了,人家就存好了,你刪了,也保留一陣子。萬一這之中(保質期)有別人上傳了,那麼你刪了檔案也不會影響別人了。這個其實特別像linux的檔案硬連結(也許就是)。

至於為什麼廠商做這麼無私的事情(硬碟躺一堆沒用的檔案佔地方):

一方面,大家某日傳檔案,突然發現能秒傳,是不是很開心呢?這對口碑和使用者粘性都有好處。(不過也不一定就傳多少垃圾“刪除”後都給你保留,可能有一定的演算法,比如你上傳又刪了的東西,長時間都沒有人傳相同的,這樣也就沒必要保留死資料在那了。)

另一方面,讓你秒傳他也節省頻寬啊。

今天傳高音質mp3,十兆以上的,全不是秒傳。
你傳到雲盤,說的通俗點,等於你把自己檔案全傳別人機子裡去了,人家那一個目錄寫著mp3,一個目錄寫著avi的,說複製就複製,說分享就分享。
最後人家就有了無數免費資源,免費上傳?是免費打工,替人家收集資源了。

你就不怕哪天人家雲盤運營商突然開個資源釋出(並且設法避免版權糾紛)什麼的?其實現在人家也在積極推動這個事,比如資源共享群什麼的,一方面是讓你們重複“儲存”相同內容,另一方面,可能把雲盤裡邊“私人“儲存的東西又取出來分享了,所以,你要有點什麼好資源,可要慎重上傳哦?(加密或者打包可能會好一點,考慮到成本問題,人家應該找最好弄的資源,比如從檔案頭就讀出這是什麼歌曲的mp3)

想到測試方法:

1.寫一個word文件A,用第一個帳戶存,然後刪,看多久以後再傳不是秒傳。這證明沒有別人用過你的是可以被刪除的。

2.一個word文件B,第一個帳戶存,然後刪,第二個帳戶再存,看是不是秒傳,能證明你的檔案不光被保留了,還能被檢索,和別人的檔案“合體”。

實測,刪除後清空回收站,第二個賬號存,不是秒傳。

3.word文件C,用第一個帳戶存,第二個帳戶也存,看看是不是無論過多久第一個使用者都能秒傳。這證明存在檔案硬連結。

實測,都不是秒傳,可能伺服器沒更新檢索目錄,可能東西太小,不值得放到秒傳裡,也可能對文件和對多媒體檔案的策略不同。

擴充套件測試:

word文件可能目標太小,被伺服器忽視了,可以自己剪切個大點的電影,只要MD5變了,不是秒傳就行,然後重複上邊的測試流程。


提供一個比較方便的測試方法,放一個壓縮包上去,再把壓縮包裡隨便扔個檔案,再傳上去,就不能秒傳了(至於壓縮檔案的檔案頭,表示太亂了,不容易讀出來區別)。

提供一個未經測試的傻瓜方式:用視訊剪輯軟體,隨便加一秒或者減一秒,我覺得可以達到改變檔案雜湊值的目的。有興趣的可以試試,只要要求你重新整個檔案上傳,就證明改成功了。

想學習相關知識可以找找:去重deduplication、ZFS、HASH、檔案頭、重複資料刪除





相關推薦

原理探討——查詢資料

P個重要的S:用雲盤存片的童鞋注意了,別以為你辛辛苦苦收集好幾年的片存到雲盤就高枕無憂了,根據“假秒傳,真共享”原則,你秒傳的檔案是非常不保險的,很容易被河蟹,已經有童鞋表示存到雲盤的片子被河蟹了。 自己多年的“勞動成果”很有可能突然化為烏有!!! 自己的“財產”突然被剝奪

查詢增補

題目描述 給出一個數據序列,建立雜湊表,採用求餘法作為雜湊函式,模數為11,雜湊衝突用鏈地址法和表尾插入 如果首次查詢失敗,就把資料插入到相應的位置中 實現雜湊查詢與增補功能 輸入 第一行輸入n,表示有n個數據 第二行輸入n個數據,都是自然數且互不相同,資料之間用空格隔開 第三行

百度文件和下載文件慢的解決辦法

修改註冊表 管理 鼠標右鍵 back bsp sha images machine otto 百度雲盤上傳文件和下載文件慢的解決辦法一:上傳文件慢1. 左下角點擊搜索,輸入cmd,右鍵以管理員身份運行2. 在彈出的窗口中輸入netsh interface tcp set g

NSDictionary和NSMutableArray底層原理表和環形緩衝區)

前言 1.NSDictionary底層是雜湊表,下面會介紹具體是用拉鍊法還是開放定址法線性探測來解決衝突?由於Apple給的查詢複雜度可以快至O(1),那麼為什麼是O(1),底層是如何通過空間換取時間的? 2.NSArray是線性連續記憶體,這個很好理解。但是NSMuta

百度提速啦

你還在為大量的上傳檔案而煩惱嗎? 你還在為上傳的幾十kb的速度而撓心嗎? 現在終於不用為此而發愁了,這就為您開啟高速動車。動車都提速了,你的上傳也需要提速,廢話不多說,下面就上乾貨,親測有效哦。 電腦

(Hash)加密(Encrypt)的基本原理、區別及工程應用

0、摘要       今天看到吉日嘎拉的一篇關於管理軟體中資訊加密和安全的文章,感覺非常有實際意義。文中作者從實踐經驗出發,討論了資訊管理軟體中如何通過雜湊和加密進行資料保護。但是從文章評論中也可以看出很多朋友對這個方面一些基本概念比較模糊,這樣就容易“照葫蘆畫瓢”,不能根據自身具體情況靈活選擇和使

九章演算法筆記 8.堆 Hash & Heap

大綱 cs3k.com 資料結構概述 雜湊表 Hash: a.原理  b.應用 堆 Heap: a.原理    b.應用-優先佇列 Priority Queue  c.替代品-TreeMap   資料結構的兩類問題 cs3k

資料結構之查詢-查詢

目錄 雜湊法(計算式查詢) 雜湊函式的構造方法 處理衝突的方法 雜湊表的查詢過程 雜湊法(計算式查詢) 雜湊法又稱雜湊法、雜湊發、關鍵字地址計演算法,相應的表成為雜湊表、散列表等。 雜湊法的基本思想:首先在元素的關鍵字k和元素的儲存位置p之間建立一個對應

加密驗證

$str='123456'; echo password_hash($str,1).'<br>'; var_dump(password_verify($str,password_hash($str,1))); //實際使用舉例 //$password前端獲取到的密碼,$user-

python 查詢

  import random INDEXBOX=7 #雜湊表元素個數 MAXNUM=13 #資料個數 class Node: #宣告連結串列結構 def __init__(self,val): self.val=val

查詢 C語言版

題目描述 根據輸入的int 陣列建立雜湊表,然後查詢是否存在相應元素。 輸入描述 第一行為測試資料的組數n, 下面有n組測試資料。對於每組測試資料,第一行為用空格隔開的int數列,數量不超過1,000,000,下面一行為查詢數目m, 接下來的m行為m個需

資料結構之連結串列、陣列

雜湊表 主要描述雜湊表的定義:通過關鍵碼尋找值的資料對映結構,類似於查字典 當存在雜湊衝突時,有兩種常用的方式:開發定址法和鏈地址法 開發定址法通俗的來說就是判斷該地址是否存資料,沒存就放進去,存了就找下一個地址,依次類推,問題是如果空間不足,無法處理衝突。 鏈地

查詢演算法之查詢(近似O(1)的單點查詢方法)

雜湊查詢是通過計算資料元素的儲存地址進行查詢的一種方法。O(1)的查詢,即所謂的秒殺。雜湊查詢的本質是先將資料對映成它的雜湊值。雜湊查詢的核心是構造一個雜湊函式,它將原來直觀、整潔的資料對映為看上去似乎是隨機的一些整數。 雜湊查詢的操作步驟: 1)       用給定的雜

查詢-圖書館查詢

下面用雜湊查詢來解決一個實際問題:圖書館查詢問題。 圖書館裡面有若干本書(至少3000本,至多30000本),為幫助使用者快速查詢每本書所在的書架位置,請設計一個模擬 系統實現基於圖書編號的快速查詢方法。 輸入:書的數目n,每本書的ISBN、書名、圖書所在書架的行、列。查

基於VC++2010實現簽名驗證

                數字簽名即如何給一個計算機檔案進行簽字。數字簽字可以用對稱演算法實現,也可以用公鑰演算法實現。但前者除了檔案簽字者和檔案接受者雙方,還需要第三方認證,較麻煩;通過公鑰加密演算法的實現方法,由於用祕密金鑰加密的檔案,需要靠公開金鑰來解密,因此這可以作為數字簽名,簽名者用祕密金鑰加

查詢演算法及C語言實現

上一節介紹了有關雜湊表及其構造過程的相關知識,本節將介紹如何利用雜湊表實現查詢操作。 在雜湊表中進行查詢的操作同雜湊表的構建過程類似,其具體實現思路為:對於給定的關鍵字 K,將其帶入雜湊函式中,求得與該關鍵字對應的資料的雜湊地址,如果該地址中沒有資料,則證明該查詢表中沒有儲存該資料,查詢失敗:如果雜湊地址中

查詢】hashtable

雜湊概述 線性表,二叉搜尋樹、AVL樹、B樹中,元素在儲存結構中的位置與元素的關鍵碼之間不存在直接的對應關係。在資料結構中搜索一個元素需要進行一系列的關鍵碼比較。搜尋的效率取決於搜尋過程進行的比較次數。 理想的搜尋方法是可以不經過任何比較,一次直接從表中得到

c實現查詢

雜湊查詢,也稱為雜湊查詢(本文以雜湊稱呼)。雜湊它是由一組key/value的鍵值對組成的集合,它就是應用了雜湊技術。 那麼,什麼是雜湊查詢呢?在弄清楚什麼是雜湊查詢之前,我們要弄清楚雜湊技術,雜湊技術是在記錄的儲存位置和記錄的關鍵字之間建立一個確定的對應關係f,使得每

七、字串(小象)

目錄   雜湊表基礎知識 雜湊表定義 1、字元雜湊 2、雜湊表排序整數 3、拉鍊表解決衝突,構造雜湊表 4、STL map中的常用操作 409、最長迴文串 290、單詞模式 49、字母異位詞分組 3、無重複字元的最長子串(滑動視窗的機制) 1

DS查詢--線性探測再

題目描述  定義雜湊函式為H(key) = key%11。輸入表長(大於、等於11),輸入關鍵字集合,用線性探測再雜湊構建雜湊表,並查詢給定關鍵字。 --程式要求-- 若使用C++只能include一個頭檔案iostream;若使用C語言只能include一個頭檔案stdio 程