云盘秒传原理的探讨——数据去重

标签: 原理 探讨 数据 | 发表时间:2014-04-09 09:52 | 作者:huqinweI987
出处:http://blog.csdn.net

前几天给360云盘传了《一个华尔街之狼》(无删减送审版,很暴力呦:http://yunpan.cn/QICpnLPX3CLaX),但是是秒传的,当时能想到肯定是服务器有了,但是它凭什么知道已经有?文件名?不可能,乱七八糟什么文件名都有,我改了一个试试,还是秒传~究竟是什么原理呢?


首先想到的是360云盘利用文件标识符之类,唯一的ID,有文件相关信息等,尤其是索引信息。但后来感觉不对,查了一下,原来标识符指的是文件名, 那个概念应该是文件描述符。那是否是通过文件描述符来解决文件重复的问题呢?仔细想想,明显不是,很关键的一个问题其实是,文件索引,描述符,它唯一的标识你的硬盘中某文件的索引信息,在另一台机子上他就是另一个ID了,这是针对系统的而不是针对文件的。


那么文件有什么唯一性呢?想起了mp3文件可以改属性,包括音乐家、专辑等,而且很多播放器是利用这个属性来自动匹配歌词等信息的。但是视频文件好像不是这样的。到这,常识已经用的差不多了,似乎没找到方向。


其实通过过去网盘常用的贴一个链接大家都用,或者百度文库的收藏就可以知道,通过把同一个文件分发一些链接等假象,是可以让很多人同时”拥有“的。不过看云盘需要角度更深一点,是不管你们共享不共享,传播不传播,只要文件相同,他都是只存一份(问题简单化,不考虑分布式和备份等现实问题)。那他怎么做到的呢?是 对比整个文件吗?如果真的去一个字节一个字节的完全不差的比较,那样服务器不得憋死~!其实,他只要比较HASH值就够了,联想我们去网上下东西,某些网站,是不是也经常看到HASH值呢。那计算HASH值是不是也得耗费服务器资源呢,其实,HASH去重也是分粒度的,有文件去重,块去重,字节去重,粒度越细的准确率越高,相应的耗费服务器资源肯定也要多, 这里只要文件级别的去重就够了,有谁没事闲的(或者具备一定的知识而有能力)去修改一个音视频文件呢?太少了吧,对于大多数人,除了文件名,他的音视频文件无非就是网上流传的几个热门版本,这样大家都用一个就够了,是不是很节约云盘资源呢?


“破解”秒传的办法:比如360云盘,把电影文件随便改哪怕一个字符,那应该就“秒传”不成了。这样仇视360的就可以通过不断上传垃圾文件饱和攻击360网盘了(不过怕网速不够)。如果真的这种现象频繁了,他们可以把去重粒度转为字节级,这样你把一个字节改一百次,因为其他部分都重复,所以只需增加99字节的空间,不过考虑到文件太大,可能粒度需要把调整到块来应对~又是另一个根据现实情况分析对策的问题了。



个中细节,其实我也不是很了解,只是整合了一些知识进行了一个小猜想,不保证对,想解释的很透,还得再充电。


相关知识可以查询:去重deduplication、ZFS、HASH、





作者:huqinweI987 发表于2014-4-9 1:52:46 原文链接
阅读:1 评论:0 查看评论

相关 [原理 探讨 数据] 推荐:

云盘秒传原理的探讨——数据去重

- - CSDN博客推荐文章
前几天给360云盘传了《一个华尔街之狼》(无删减送审版,很暴力呦:http://yunpan.cn/QICpnLPX3CLaX),但是是秒传的,当时能想到肯定是服务器有了,但是它凭什么知道已经有. 不可能,乱七八糟什么文件名都有,我改了一个试试,还是秒传~究竟是什么原理呢. 首先想到的是360云盘利用文件标识符之类,唯一的ID,有文件相关信息等,尤其是索引信息.

NoSQL数据库探讨 -- 非关系型数据库

- - ITeye博客
随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域, 非关系数据库产品的发展非常迅速. 而传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不 从心,暴露了很多难以克服的问题,例如:. 1、High performance - 对数据库高并发读写的需求.

页面跳转时,统计数据丢失问题探讨

- - IT技术博客大学习
标签:   统计   跳转. 为了更好地了解用户对产品的使用情况,业务中,我们经常会收到埋点统计的需求,比如:. 收集一段时间内用户光标在页面中的运动情况,包括光标移动、点击等行为. 无论是移动端还是 PC 端,相信很多朋友都遇到了这么几个十分让人头疼的问题:. 统计某个链接的点击量,但是这个链接点击后直接跳转走了.

APP 缓存数据线程安全问题探讨

- - bang’s blog
一般一个 iOS APP 做的事就是:请求数据->保存数据->展示数据,一般用 Sqlite 作为持久存储层,保存从网络拉取的数据,下次读取可以直接从 Sqlite DB 读取. 我们先忽略从网络请求数据这一环节,假设数据已经保存在 DB 里,那我们要做的事就是,ViewController 从 DB 取数据,再传给 view 渲染:.

数据库锁原理

- - ITeye博客
数据库通常有大量的用户在同时操作,所以并发的情况下需要控制对临界资源的操作,数据库通过锁来控制对临界资源的访问,从而保证数据的一致性. 例如对于同一个账户,操作之前账户余额为1000,同时开始2个事务,一个事务取款100,一个事务往账户中汇入100,那么2个事务结束后,账户的余额必须还是1000,否则要么银行不干,要么个人不干.

事务与数据库恢复原理

- - CSDN博客推荐文章
数据存储的逻辑单位是数据块,数据操作的逻辑单位是事务. 事务是用户定义的一组操作序列,有一条或多条相关SQL语句组成,是数据库应用程序的基本逻辑单位. 事务管理技术主要包括数据库的恢复技术和并发控制技术. 1、 服务器进程捡取该事务的SQL语句,然后检查共享池,查看是否包含该SQL语句的共享SQL区.

NOSQL数据模型和CAP原理

- - 数据库 - ITeye博客
我本来一直觉得NoSQL其实很容易理解的,我本身也已经对NoSQL有了非常深入的研究,但是在最近准备YunTable的Chart的时候,发现NoSQL不仅非常博大精深,而且我个人对NoSQL的理解也只是皮毛而已,但我还算是一个“知耻而后勇”的人,所以经过一段时间的学习之后,从本系列第六篇开始,就将和大家聊聊NoSQL,而本篇将主要给大家做一下NoSQL数据库的综述.

数据库索引的实现原理

- - 孟飞阳的博客
说白了,索引问题就是一个查找问题. 二、数据库索引介绍及特点说明. 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据. 索引的实现通常使用B树及其变种B+树. 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法.

Spring主从数据库的配置和动态数据源切换原理

- - 廖雪峰的官方网站
在大型应用程序中,配置主从数据库并使用读写分离是常见的设计模式. 在Spring应用程序中,要实现读写分离,最好不要对现有代码进行改动,而是在底层透明地支持. Spring内置了一个 AbstractRoutingDataSource,它可以把多个数据源配置成一个Map,然后,根据不同的key返回不同的数据源.

MySQL索引背后的数据结构及算法原理

- Mike - 博客园-EricZhang's Technology Blog
在编程领域有一句人尽皆知的法则“程序 = 数据结构 + 算法”,我个人是不太赞同这句话(因为我觉得程序不仅仅是数据结构加算法),但是在日常的学习和工作中我确认深深感受到数据结构和算法的重要性,很多东西,如果你愿意稍稍往深处挖一点,那么扑面而来的一定是各种数据结构和算法知识. 例如几乎每个程序员都要打交道的数据库,如果仅仅是用来存个数据、建建表、建建索引、做做增删改查,那么也许觉得数据结构和这东西没什么关系.