当前位置:文档之家› 重复数据删除(De-duplication)技术研究

重复数据删除(De-duplication)技术研究

重复数据删除(De-duplication)技术研究
重复数据删除(De-duplication)技术研究

重复数据删除(De-duplication)技术研究

文章地直址:https://www.doczj.com/doc/098245029.html,/liuaigui/article/details/5829083

1、Dedupe概述

De-duplication,即重复数据删除,它是一种目前主流且非常热门的存储技术,可对存储容量进行有效优化。它通过删除数据集中重复的数据,只保留其中一份,从而消除冗余数据。如下图所示。这种技术可以很大程度上减少对物理存储空间的需求,从而满足日益增长的数据存储需求。Dedupe技术可以带许多实际的利益,主要包括以下诸多方面:

(1) 满足ROI(投资回报率,Return On Investment)/TCO(总持有成本,Total Cost of Ownership)需求;

(2) 可以有效控制数据的急剧增长;

(3) 增加有效存储空间,提高存储效率;

(4) 节省存储总成本和管理成本;

(5) 节省数据传输的网络带宽;

(6) 节省空间、电力供应、冷却等运维成本。

Dedupe技术目前大量应用于数据备份与归档系统,因为对数据进行多次备份后,存在大量重复数据,非常适合这种技术。事实上,dedupe技术可以用于很多场合,包括在线数据、近线数据、离线数据存储系统,可以在文件系统、卷管理器、NAS、SAN中实施。Dedupe也可以用于数据容灾、数据传输与同步,作为一种数据压缩技术可用于数据打包。Dedupe技术可以帮助众多应用降低数据存储量,节省网络带宽,提高存储效率、减小备份窗口,节省成本。

Dedupe的衡量维度主要有两个,即重复数据删除率(deduplocation ratios)和性能。Dedupe性能取决于具体实现技术,而重复数据删除率则由数据自身的特征和应用模式所决定,影响因素如下表[2]所示。目前各存储厂商公布的重复数据删除率从20:1到500:1不等。

2、Dedupe实现要点

研发或应用Dedupe技术时应该考虑各种因素,因为这些因素会直接影响其性能和效果。

(1) What:对何种数据进行消重?

对时间数据还是空间数据进行消重,对全局数据还是局部数据进行消重?这是首先需要考虑的因素,这直接决定着Dedupe实现技术和数据消重率。随时间变化的数据,如周期性的备份、归档数据,比空间数据具有更高的消重率,Dedupe 技术在备份归档领域中被广泛应用。不难想象,全局范围内的数据重复率比局部范围数据要高,会获得更高的数据消重率。

(2) When:何时进行消重?

数据消重时机分为两种情形:在线消重和离线消重。采用在线消重模式,数据写入存储系统同时执行消重,因此实际传输或写入的数据量较少,适合通过LAN或WAN进行数据处理的存储系统,如网络备份归档和异地容灾系统。由于它需要实时进行文件切分、数据指纹计算、Hash查找,对系统资料消耗大。离线消重模式,先将数据写入存储系统,然后利用适当的时间再进行消重处理。这种模式与前面一种刚好相反,它对系统资料消耗少,但写入了包含重复的数据,需要更多的额外存储空间来预先存储消重前数据。这种模式适合直连存储DAS

和存储区域网络SAN存储架构,数据传输不占用网络带宽。另外,离线消重模式需要保证有足够的时间窗口来进行数据去重操作。总之,在何时进行消重,要根据实际存储应用场景来确定。

(3) Where:在何处进行消重?

数据消重可以在源端(Source)或者目标端 (Target)进行。源端消重在数据源进行,传输的是已经消重后的数据,能够节省网络带宽,但会占用大量源端系统资源。目标端消重发生在目标端,数据在传输到目标端再进行消重,它不会占用源端系统资源,但占用大量网络带宽。目标端消重的优势在于它对应用程序透

明,并具有良好的互操作性,不需要使用专门的 API,现有应用软件不用作任何修改即可直接应用。

(4) How:如何进行消重?

重复数据删除技术包含许多技术实现细节,包括文件如何进行切分?数据块指纹如何计算?如何进行数据块检索?采用相同数据检测还是采用相似数据检测和差异编码技术?数据内容是否可以感知,是否需要对内容进行解析?这些都是 Dedupe具体实现息息相关。本文主要研究相同数据检测技术,基于二进制文件进行消重处理,具有更广泛的适用性。

3、Dedupe关键技术

存储系统的重复数据删除过程一般是这样的:首先将数据文件分割成一组数据块,为每个数据块计算指纹,然后以指纹为关键字进行Hash查找,匹配则表示该数据块为重复数据块,仅存储数据块索引号,否则则表示该数据块是一个新的唯一块,对数据块进行存储并创建相关元信息。这样,一个物理文件在存储系统就对应一个逻辑表示,由一组FP组成的元数据。当进行读取文件时,先读取逻辑文件,然后根据FP序列,从存储系统中取出相应数据块,还原物理文件副本。从如上过程中可以看出,Dedupe的关键技术主要包括文件数据块切分、数据块指纹计算和数据块检索。

(1) 文件数据块切分

Dedupe按照消重的粒度可以分为文件级和数据块级。文件级的dedupe技术也称为单一实例存储(SIS, Single Instance Store),数据块级的重复数据删除其消重粒度更小,可以达到4-24KB之间。显然,数据块级的可以提供更高的数据消重率,因此目前主流的 dedupe产品都是数据块级的。数据分块算法主要有三种,即定长切分(fixed-size partition)、CDC切分(content-defined chunking)和滑动块(sliding block)切分。定长分块算法采用预先义好的块大小对文件进行切分,并进行弱校验值和md5强校验值。弱校验值主要是为了提升差异编码的性能,先计算弱校验值并进行hash查找,如果发现则计算md5强校验值并作进一步hash查找。由于弱校验值计算量要比md5小很多,因此可以有效提高编码性能。定长分块算法的优点是简单、性能高,但它对数据插入和删除非常敏感,处理十分低效,不能根据内容变化作调整和优化。Deduputil中FSP分块算法代码如下。

1./*

2.* fixed-sized file chunking

3.*/

4.static int file_chunk_fsp(int fd, int fd_ldata, int fd_b

data, unsigned int *pos, unsigned int *block_num,

5.block_id_t **metadata, hashtable *htable, char *la

st_block_buf, unsigned int *last_block_len)

6.{

7.int ret = 0;

8.unsigned int rwsize;

9.unsigned char md5_checksum[16 + 1] = {0};

10. char *buf = NULL;

11.

12. buf = (char *)malloc(g_block_size);

13. if (buf == NULL)

14. {

15. perror("malloc in file_chunk_fsp");

16. return errno;

17. }

18.

19. while (rwsize = read(fd, buf, g_block_size))

20. {

21. /* if the last block */

22. if (rwsize != g_block_size)

23. break;

24.

25. /* calculate md5 */

26. md5(buf, rwsize, md5_checksum

);

27. if (0 != (ret = dedup_regfile_block_proces

s(buf, rwsize, md5_checksum, fd_ldata,

28. fd_bdata, pos, block_num, metadata,

htable)))

29. {

30. perror("dedup_regfile_block_process in

file_chunk_fsp");

31. goto _FILE_CHUNK_FSP_EXIT;

32. }

33. }

34. *last_block_len = (rwsize > 0) ? rwsize : 0;

35. if ((*last_block_len)) memcpy(last_block_buf, buf,

*last_block_len);

36.

37._FILE_CHUNK_FSP_EXIT:

38. if (buf) free(buf);

39. return ret;

40.}

CDC(content-defined chunking)算法是一种变长分块算法,它应用数据指纹(如Rabin指纹)将文件分割成长度大小不等的分块策略。与定长分块算法不同,它是基于文件内容进行数据块切分的,因此数据块大小是可变化的。算法执行过程中,CDC使用一个固定大小(如48字节)的滑动窗口对文件数据计算数据指纹。如果指纹满足某个条件,如当它的值模特定的整数等于预先设定的数时,则把窗口位置作为块的边界。CDC算法可能会出现病态现象,即指纹条件不能满足,块边界不能确定,导致数据块过大。实现中可以对数据块的大小进行限定,设定上下限,解决这种问题。CDC算法对文件内容变化不敏感,插入或删除数据只会影响到检少的数据块,其余数据块不受影响。CDC算法也是有缺陷的,数据块大小的确定比较困难,粒度太细则开销太大,粒度过粗则dedup效果不佳。如何两者之间权衡折衷,这是一个难点。Deduputil中CDC分块算法代码如下。

1./*

2.* content-defined chunking:

3.* 1. BLOCK_MIN_SIZE <= block_size <= BLOCK_MAX_SIZE

4.* 2. hash(block) % d == r

5.*/

6.static int file_chunk_cdc(int fd, int fd_ldata, int fd_b

data, unsigned int *pos, unsigned int *block_num,

7.block_id_t **metadata, hashtable *htable, char *la

st_block_buf, unsigned int *last_block_len)

8.{

9.char buf[BUF_MAX_SIZE] = {0};

10. char block_buf[BLOCK_MAX_SIZE] = {0};

11. char win_buf[BLOCK_WIN_SIZE + 1] = {0};

12. char adler_pre_char;

13. unsigned char md5_checksum[16 + 1] = {0};

14. unsigned int bpos = 0;

15. unsigned int rwsize = 0;

16. unsigned int exp_rwsize = BUF_MAX_SIZE;

17. unsigned int head, tail;

18. unsigned int block_sz = 0, old_block_sz = 0;

19. unsigned int hkey = 0;

20. int ret = 0;

21.

22. while(rwsize = read(fd, buf + bpos, exp_rwsize))

23. {

24. /* last chunk */

25. if ((rwsize + bpos + block_sz) < BLOCK_M

IN_SIZE)

26. break;

27.

28. head = 0;

29. tail = bpos + rwsize;

30. /* avoid unnecessary computation and compa

rsion */

31. if (block_sz < (BLOCK_MIN_SIZE - BLOCK_WIN

_SIZE))

32. {

33. old_block_sz = block_sz;

34. block_sz = ((block_sz + tail - he

ad) > (BLOCK_MIN_SIZE - BLOCK_WIN_SIZE)) ?

35. BLOCK_MIN_SIZE - BLOC

K_WIN_SIZE : block_sz + tail -head;

36. memcpy(block_buf + old_block_sz, buf

+ head, block_sz - old_block_sz);

37. head += (block_sz - old_block_sz);

38. }

39.

40. while ((head + BLOCK_WIN_SIZE) <= tail)

41. {

42. memcpy(win_buf, buf + head, BLOCK_W

IN_SIZE);

43. /*

44. * Firstly, i think rabinhash is

the best. However, it's performance is very bad.

45. * After some testing, i found E

LF_hash is better both on performance and dedup rate.

46. * So, EFL_hash is default. Now,

adler_hash as default.

47. */

48. if (g_rolling_hash)

49. {

50. hkey = (block_sz == (BLOCK_

MIN_SIZE - BLOCK_WIN_SIZE)) ? adler32_checksum(win_buf, BL OCK_WIN_SIZE) :

51. adler32_rolling_checksu

m(hkey, BLOCK_WIN_SIZE, adler_pre_char, buf[head+BLOCK_WIN_S IZE-1]);

52. }

53. else

54. hkey = g_cdc_chunk_hashfunc(w

in_buf);

55.

56. /* get a normal chunk */

57. if ((hkey % g_block_size) == CHUNK

_CDC_R)

58. {

59. memcpy(block_buf + block_sz,

buf + head, BLOCK_WIN_SIZE);

60. head += BLOCK_WIN_SIZE;

61. block_sz += BLOCK_WIN_SIZE;

62. if (block_sz >= BLOCK_MIN_SI

ZE)

63. {

64. md5(block_buf, block_s

z, md5_checksum);

65. if (0 != (ret = de

dup_regfile_block_process(block_buf, block_sz,

66. md5_checksum,

fd_ldata, fd_bdata, pos, block_num, metadata, htable)))

67. {

68. perror("dedup_r

eggile_block_process in file_chunk_cdc");

69. goto _FILE_CHU

NK_CDC_EXIT;

70. }

71. block_sz = 0;

72. }

73. }

74. else

75. {

76. block_buf[block_sz++] = buf[h

ead++];

77. /* get an abnormal chunk *

/

78. if (block_sz >= BLOCK_MAX_SI

ZE)

79. {

80. md5(block_buf, block_s

z, md5_checksum);

81. if (0 != (ret = de

dup_regfile_block_process(block_buf, block_sz,

82. md5_checksum,

fd_ldata, fd_bdata, pos, block_num, metadata, htable)))

83. {

84. perror("dedup_r

eggile_block_process in file_chunk_cdc");

85. goto _FILE_CHU

NK_CDC_EXIT;

86. }

87. block_sz = 0;

88. }

89. }

90.

91. /* avoid unnecessary computation an

d comparsion */

92. if (block_sz == 0)

93. {

94. block_sz = ((tail - head)

> (BLOCK_MIN_SIZE - BLOCK_WIN_SIZE)) ?

95. BLOCK_MIN_SIZE - BLOC

K_WIN_SIZE : tail - head;

96. memcpy(block_buf, buf + head

, block_sz);

97. head = ((tail - head) > (

BLOCK_MIN_SIZE - BLOCK_WIN_SIZE)) ?

98. head + (BLOCK_MIN_SIZ

E - BLOCK_WIN_SIZE) : tail;

99. }

100.

101.adler_pre_char = buf[head -1];

102.}

103.

104./* read expected data from file to full up buf */

105.bpos = tail - head;

106.exp_rwsize = BUF_MAX_SIZE - bpos; 107.adler_pre_char = buf[head -1];

108.memmove(buf, buf + head, bpos); 109.}

110./* last chunk */

111.*last_block_len = ((rwsize + bpos + block_sz ) >= 0) ? rwsize + bpos + block_sz : 0;

112.if (*last_block_len > 0)

113.{

114.memcpy(last_block_buf, block_buf, block_ sz);

115.memcpy(last_block_buf + block_sz, buf, rwsize + bpos);

116.}

117.

118._FILE_CHUNK_CDC_EXIT:

119.return ret;

120.}

滑动块(sliding block)算法结合了定长切分和CDC切分的优点,块大小固定。它对定长数据块先计算弱校验值,如果匹配则再计算md5强校验值,两者都匹配则认为是一个数据块边界。该数据块前面的数据碎片也是一个数据块,它是不定长的。如果滑动窗口移过一个块大小的距离仍无法匹配,则也认定为一个数据块边界。滑动块算法对插入和删除问题处理非常高效,并且能够检测到比CDC更多的冗余数据,它的不足是容易产生数据碎片。Deduputil中SB分块算法代码如下。

1./*

2.* slideing block chunking, performance is a big issue

due to too many hash lookup.

3.*/

4.static int file_chunk_sb(int fd, int fd_ldata, int fd_bd

ata, unsigned int *pos, unsigned int *block_num,

5.block_id_t **metadata, hashtable *htable,

char *last_block_buf, unsigned int *last_block_len)

6.{

7.char buf[BUF_MAX_SIZE] = {0};

8.char win_buf[BLOCK_MAX_SIZE + 1] = {0};

9.char block_buf[BLOCK_MAX_SIZE] = {0};

10. char adler_pre_char;

11. unsigned char md5_checksum[16 + 1] = {0};

12. unsigned char md5_checksum1[16 + 1] = {0};

13. unsigned char crc_checksum[16] = {0};

14. unsigned int bpos = 0;

15. unsigned int slide_sz = 0;

16. unsigned int rwsize = 0;

17. unsigned int exp_rwsize = BUF_MAX_SIZE;

18. unsigned int head, tail;

19. unsigned int hkey = 0;

20. unsigned int bflag = 0;

21. int ret = 0;

22.

23. while(rwsize = read(fd, buf + bpos, exp_rwsize))

24. {

25. /* last chunk */

26. if ((rwsize + bpos + slide_sz) < g_block

_size)

27. break;

28.

29. head = 0;

30. tail = bpos + rwsize;

31. while ((head + g_block_size) <= tail)

32. {

33. memcpy(win_buf, buf + head, g_block

_size);

34. hkey = (slide_sz == 0) ? adler32_

checksum(win_buf, g_block_size) :

35. adler32_rolling_checksum(hkey,

g_block_size, adler_pre_char, buf[head+g_block_size-1]);

36. uint_2_str(hkey, crc_checksum);

37. bflag = 0;

38.

39. /* this block maybe is duplicate

*/

40. if (hash_exist(g_sb_htable_crc, crc_c

hecksum))

41. {

42. bflag = 2;

43. md5(win_buf, g_block_size, md

5_checksum);

44. if (hash_exist(htable, md5_ch

ecksum))

45. {

46. /* insert fragment *

/

47. if (slide_sz != 0)

48. {

49. md5(block_buf,

slide_sz, md5_checksum1);

50. if (0 != (re

t = dedup_regfile_block_process(block_buf, slide_sz, md5_ch ecksum1,

51. fd_ldat

a, fd_bdata, pos, block_num, metadata, htable)))

52. {

53. perror(

"dedup_regfile_block_process in file_chunk_sb");

54. goto _

FILE_CHUNK_SB_EXIT;

55. }

56. }

57. /* insert fixed-size

block */

58. if (0 != (ret = de

dup_regfile_block_process(win_buf, g_block_size, md5_checksum ,

59. fd_ldata, fd_b

data, pos, block_num, metadata, htable)))

60. {

61. perror("dedup_r

egfile_block_process in file_chunk_sb");

62. goto _FILE_CHU

NK_SB_EXIT;

63. }

64.

65. head += g_block_size;

66. slide_sz = 0;

67. bflag = 1;

68. }

69. }

70.

71. /* this block is not duplicate */

72. if (bflag != 1)

73. {

74. block_buf[slide_sz] = buf[hea

d];

75. head++;

76. slide_sz++;

77. if (slide_sz == g_block_size

)

78. {

79. if (bflag != 2) md5

(block_buf, g_block_size, md5_checksum);

80. if (0 != (ret = de

dup_regfile_block_process(block_buf, g_block_size, md5_checks um,

81. fd_ldata, fd_b

data, pos, block_num, metadata, htable)))

82. {

83. perror("dedup_r

egfile_block_process in file_chunk_sb");

84. goto _FILE_CHU

NK_SB_EXIT;

85. }

86. hash_checkin(g_sb_htabl

e_crc, crc_checksum);

87. slide_sz = 0;

88. }

89. }

90.

91. adler_pre_char = buf[head - 1];

92. }

93.

94. /* read expected data from file to full

up buf */

95. bpos = tail - head;

96. exp_rwsize = BUF_MAX_SIZE - bpos;

97. adler_pre_char = buf[head - 1];

98. memmove(buf, buf + head, bpos);

99. }

100./* last chunk */

101.*last_block_len = ((rwsize + bpos + slide_sz ) > 0) ? rwsize + bpos + slide_sz : 0;

102.if (*last_block_len > 0)

103.{

104.memcpy(last_block_buf, block_buf, slide_ sz);

105.memcpy(last_block_buf + slide_sz, buf, rwsize + bpos);

106.}

107.

108._FILE_CHUNK_SB_EXIT:

109.lseek(fd, 0, SEEK_SET);

110.return ret;

111.}

(2) 数据块指纹计算

数据指纹是数据块的本质特征,理想状态是每个唯一数据块具有唯一的数据指纹,不同的数据块具有不同的数据指纹。数据块本身往往较大,因此数据指纹的目标是期望以较小的数据表示(如16、32、64、128字节)来区别不同数据块。数据指纹通常是对数据块内容进行相关数学运算获得,从当前研究成果来看Hash 函数比较接近与理想目标,比如MD5、SHA1、SHA-256、SHA-512、为one-Way、RabinHash等。另外,还有许多字符串 Hash函数也可以用来计算数据块指纹。然而,遗憾的是这些指纹函数都存在碰撞问题,即不同数据块可能会产生相同的数据指纹。相对来说,MD5和 SHA系列HASH函数具有非常低的碰撞发生概率,因此通常被采用作为指纹计算方法。其中,MD5和SHA1是128位的,SHA-X(X

表示位数)具有更低的碰撞发生概率,但同时计算量也会大大增加。实际应用中,需要在性能和数据安全性方面作权衡。另外,还可以同时使用多种Hash算法来为数据块计算指纹。

(3) 数据块检索

对于大存储容量的Dedupe系统来说,数据块数量非常庞大,尤其是数据块粒度细的情况下。因此,在这样一个大的数据指纹库中检索,性能就会成为瓶颈。信息检索方法有很多种,如动态数组、数据库、RB/B/B+/B*树、Hashtable等。Hash查找因为其O(1)的查找性能而著称,被对查找性能要求高的应用所广泛采用,Dedupe技术中也采用它。Hashtable处于内存中,会消耗大量内存资源,在设计Dedupe前需要对内存需求作合理规划。根据数据块指纹长度、数据块数量(可以由存储容量和平均数据块大小估算)可以估算出内存需求量。

散列表(Hashtable,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。散列表的查找过程基本上和造表过程相同,一些关键码可通过散列函数转换的地址直接找到,另一些关键码在散列函数得到的地址上产生了冲突,需要按处理冲突的方法进行查找。详细请参考散列表设计。

4、Dedupe数据安全

这里的数据安全包含两个层面的含义:一是数据块碰撞,二是数据可用性。这两种安全性对用户来说都是至关重要的,必须事先考虑。

数据块指纹FP(FingerPrinter)通常使用Hash函数来计算获得,如MD5、SHA1、SHA-256、SHA-512等。从纯数学角度看,如果两个数据块指纹不同,则这两个数据块肯定不同。然而,如果两个数据块指纹相同,我们则不能断定这两个数据块是相同的。因为Hash函数会产生碰撞,山东大学的王小云教授所带领的团队已经找到快速产生碰撞的方法。但是,这种碰撞的概率是非常非常小的,小到甚至低于磁盘发生损坏的概率,因此通常近似认为:如果数据块指纹相同,则数

据块相同。由于数据产生碰撞可能性的存在,Dedupe技术很少被用于关键数据存储的应用场合,一旦发生碰撞将产生巨大的经济损失。针对这种问题,目前主要有两种解决路径:一是对数据指纹相同的块进行字节级完全比较,它的难点在于数据块原始数据有时难以方便获得,另外性能会产生一定损失。本人开发的开源软件deduputil采用就是这种策略,详见deduputil 数据块零碰撞算法。二是最大可能降低碰撞产生的概率,即采用更优的Hash函数(如SHA-512, SHA-1024),或者采用两种以上hash算法组合方式,这显然会对性能造成影响。本人在"数据同步算法研究"中采用的是该种方法,为每个数据块计算两个指纹,一个类似Rsync算法中的弱校验值(Rsync 滚动校验算法)和一个强校验值MD5。弱校验值计算消耗远小于MD5计算量,先计算目标数据块的弱校验值,如果与源数据块不同则不必再计算其 MD5校验值,相同则计算MD5并作比较。这种方式以较小的性能代价极大地降低了碰撞产生的概率,而且通过优化,性能损失无几。

Dedupe仅保存唯一的数据副本,如果该副本发生损坏将造成所有相关数据文件不可访问,数据可用性压力要高于不作Dedupe许多。数据可用性问题可以采用传统数据保护方法来解决,常用的方式包括数据冗余(RAID1,RAID5, RAID6)、本地备份与复制、远程备份与复制、纠错数据编码技术(如海明码、信息分散算法IDA)、分布式存储技术。这些技术均可以有效消除单点故障,从而提高数据可用性。当然,这需要付出一定代价,以空间换取安全性。

重复数据删除(De-duplication)技术研究

重复数据删除(De-duplication)技术研究 文章地直址:https://www.doczj.com/doc/098245029.html,/liuaigui/article/details/5829083 1、Dedupe概述 De-duplication,即重复数据删除,它是一种目前主流且非常热门的存储技术,可对存储容量进行有效优化。它通过删除数据集中重复的数据,只保留其中一份,从而消除冗余数据。如下图所示。这种技术可以很大程度上减少对物理存储空间的需求,从而满足日益增长的数据存储需求。Dedupe技术可以带许多实际的利益,主要包括以下诸多方面: (1) 满足ROI(投资回报率,Return On Investment)/TCO(总持有成本,Total Cost of Ownership)需求; (2) 可以有效控制数据的急剧增长; (3) 增加有效存储空间,提高存储效率; (4) 节省存储总成本和管理成本; (5) 节省数据传输的网络带宽; (6) 节省空间、电力供应、冷却等运维成本。 Dedupe技术目前大量应用于数据备份与归档系统,因为对数据进行多次备份后,存在大量重复数据,非常适合这种技术。事实上,dedupe技术可以用于很多场合,包括在线数据、近线数据、离线数据存储系统,可以在文件系统、卷管理器、NAS、SAN中实施。Dedupe也可以用于数据容灾、数据传输与同步,作为一种数据压缩技术可用于数据打包。Dedupe技术可以帮助众多应用降低数据存储量,节省网络带宽,提高存储效率、减小备份窗口,节省成本。 Dedupe的衡量维度主要有两个,即重复数据删除率(deduplocation ratios)和性能。Dedupe性能取决于具体实现技术,而重复数据删除率则由数据自身的特征和应用模式所决定,影响因素如下表[2]所示。目前各存储厂商公布的重复数据删除率从20:1到500:1不等。

SQL删除重复数据

SQL删除重复数据 (2009-05-16 12:40:00) 转载 标签: 分类:一路辛酸---C# sql删除 重复数据 delete 执行效率 it 重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。 一、对于部分字段重复数据的删除 先来谈谈如何查询重复的数据吧。 下面语句可以查询出那些数据是重复的: select字段1,字段2,count(*) from 表名group by 字段1,字段2 having count(*) > 1 将上面的>号改为=号就可以查询出没有重复的数据了。 想要删除这些重复的数据,可以使用下面语句进行删除 delete from表名a where 字段1,字段2 in (select 字段1,字段2,count(*) from 表名group by 字段1,字段2 having count(*) > 1) 上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:

CREATE TABLE临时表AS (select 字段1,字段2,count(*) from 表名group by 字段1,字段2 having count(*) > 1) 上面这句话就是建立了临时表,并将查询到的数据插入其中。 下面就可以进行这样的删除操作了: delete from 表名a where 字段1,字段2 in (select 字段1,字段2 from 临时表); 这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。 这个时候,大家可能会跳出来说,什么?你叫我们执行这种语句,那不是把所有重复的全都删除吗?而我们想保留重复数据中最新的一条记录啊!大家不要急,下面我就讲一下如何进行这种操作。 在oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid,我们如果想保留最新的一条记录,我们就可以利用这个字段,保留重复数据中rowid最大的一条记录就可以了。 下面是查询重复数据的一个例子: select a.rowid,a.* from表名a where a.rowid != ( select max(b.rowid) from 表名b where a.字段1 = b.字段1 and a.字段2 = b.字段2 ) 下面我就来讲解一下,上面括号中的语句是查询出重复数据中rowid最大的一条记录。 而外面就是查询出除了rowid最大之外的其他重复的数据了。 由此,我们要删除重复数据,只保留最新的一条数据,就可以这样写了: delete from 表名a where a.rowid !=

SQL中重复数据的查询与删除

SQL中重复数据的查询与删除 ========第一篇========= 在一张表中某个字段下面有重复记录,有很多方法,但是有一个方法,是比较高效的,如下语句: select data_guid from adam_entity_datas a where a.rowid > (select min(b.rowid) from adam_entity_datas b where b.data_guid = a.data_guid) 如果表中有大量数据,但是重复数据比较少,那么可以用下面的语句提高效率 select data_guid from adam_entity_datas where data_guid in (select data_guid from adam_entity_datas group by data_guid having count(*) > 1) 此方法查询出所有重复记录了,也就是说,只要是重复的就选出来,下面的语句也许更高效select data_guid from adam_entity_datas where rowid in (select rid from (select rowid rid,row_number()over(partition by data_guid order by rowid) m from adam_entity_datas) where m <> 1) 目前只知道这三种比较有效的方法。 第一种方法比较好理解,但是最慢,第二种方法最快,但是选出来的记录是所有重复的记录,而不是一个重复记录的列表,第三种方法,我认为最好。 ========第二篇========= select usercode,count(*) from ptype group by usercode having count(*) >1 ========第三篇========= 找出重复记录的ID: select ID from ( select ID ,count(*) as Cnt from 要消除重复的表 group by ID ) T1 where https://www.doczj.com/doc/098245029.html,t>1 删除数据库中重复数据的几个方法 数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置…… 方法一

如何消除重复数据删除的四大误区

重复数据删除技术的产生是有一定的渊源,那就从头说起,虽然现在存储介质的价格直线下滑,单位存储成本已经很低。但是仍然跟不上企业数据文件增长的速度。随之而来的,能源消耗、数据备份管理等等也都成了老大难问题。而且一些重复的文件也随着增多了。为此企业现在迫切需要一门技术,能够确保在存储设备中存储的是独一无二的文件。在这种背景下,重复数据删除技术就应运而生啦。重复数据删除技术的目的很简单,就是确保存储的文件不重复,从而减少数据容量。不过在实际工作中,由于种种原因用户对这个技术还存在着一些误解。消除这些误区,对于大家正确使用重复数据删除技术很关键。 误区一:后期处理重复数据删除技术的工作时机。 重复数据删除技术根据其实现的方式可以分为“联机重复数据删除技术”和“后期处理重复数据删除技术”。两个技术各有各的特点。不过由于“后期处理重复数据删除技术”这个名字起得有点其一,所以不少用户对此存在着误解。如一些人会误认为后期处理重复数据删除方式是当所有数据备份过程结束后才进行验证、删除操作的。如果大家这么认为,那么就是大错特错了。 其实后期处理重复数据删除技术通常是在虚拟的磁带介质写入备份数据后就开始进行工作了。也就是说实在等待虚拟磁带写满之后就开始。当然这中间根据需要有一定的延迟。如存储管理员可以根据不同的情况对这个延迟进行设置。可以只延迟短短的几分钟,也可以延迟几个小时。延迟时间具体为多少,主要还是根据企业的实际情况来选择。如有些管理员可能会将这个作业放在服务器比较空闲的时候进行,此时就会把这个延迟设置的比较长一点,如等到下班后进行等等。 这里需要注意的是一般情况下,为了提高数据备份的效率,会对数据备份进行分组管理。此时等待时间是从第一组备份任务传送备份数据流开始算起。当第一盘虚拟的备份磁带写满或者第一组备份数据写入结束后,重复数据删除处理就不存在延迟等待问题。这主要是因为当系统在进行前一组写入备份数据进行重复数据删除处理时,被分系统可以继续往后续虚拟磁带介质中写入第二组的备份数据。简单的说,就是重复数据处理作业与备份数据的写入作业可以独立运行。从而提高数据处理的效率。 误区二:后期处理重复数据删除方式会降低整体备份的效率。 如果光从技术上看,这个结论是成立的。一方面重复删除方式会占用服务器的资源。另一方面,重复删除方式存在着一定的延迟。但是这是一个比较孤立的观点。因为根据现在的重复数据删除技术,完全可以通过合理的配置来消除这种负面影响。 在实际工作中,如果技术人员发现后期处理重复数据删除技术降低了数据备份的效率,那么可以通过如下几种方式来消除这个不利影响。一是可以将重复数据删除技术分配到多个单独的服务器上来分担服务器的压力。一般情况下在对已写入的备份数据进行重复数据删除时,不同的处理引擎往往会访问同一磁盘阵列。不过现在的技术可以使得他们访问同一磁盘阵列的不同区域。换句话说,就是可以实现高速的并发处理。这样的话,就不会和持续写入的备份数据流产生任何的冲突,从而不会影响数据备份的效率。二是可以适当调整数据延迟的时间。如可以缩短延迟时间,或者适当延长延迟时间避开数据备份的高峰时间等等。 总之,后期处理重复数据删除技术在一定程度上确实会影响到数据备份的整体效率。但是通过合理的配置,可以将这个负面影响降低到最低的程度。至少与其优势相比,这个负面影响是可以忽略不计的。 误区三:降低备份数据流的读取速度不利于数据备份。

重复数据删除技术简介

重复数据删除技术简介 这篇文章基于现有的SNIA材料,描述了重复数据删除流程可以进行的几个不同的地方;探讨了压缩与单实例文件以及重复数据删除之间的不同点;研究了次文件层重复数据删除执行的几个不同方式。它同时还解释了哪种类型的数据适合重复数据删除,以及哪些不适合。 介绍 重复数据删除已经成为存储行业非常热门的话题和一大类商业产品。这是因为重复数据删除可以大幅减少购置和运行成本,同时提高存储效率。随着数据量的爆炸性增长,接近一半的数据中心管理员都将数据增长评为三大挑战之一。根据最近的Gartner调查结果,重复数据删除可以减轻存储预算的压力并帮助存储管理员应对数据的增长。 虽然重复数据删除主要被视为一种容量优化技术,不过该技术也可以带来性能上的好处--随着所需存储的数据的减少,系统所需迁移的数据也减少。 重复数据删除技术可以应用在数据生命周期上的不同点上:从来源端重复数据删除,到传输中重复数据删除,一直到存储目标端重复数据删除。这些技术还可以应用在所有的存储层上:备份、归档和主存储。 重复数据删除的解释 无论使用哪种方式,重复数据删除就是一个在不同层次的粒度性上识别重复数据并将重复数据替代为指向共享复件的指针的过程,这样可以节约存储空间和迁移数据所需的带宽。 重复数据删除流程包括跟踪并识别那些被删除的重复数据,以及识别和存储那些新的和独一无二的数据。数据的终端用户完全不会感到这些数据可能已经被执行重复数据删除流程并已经在其数据生命周期中被重建许多次。 对数据进行重复数据删除操作有几种不同的方式。单实例存储(SIS)是在文件或块层次上进行重复数据删除。重复副本会被一个带着指针的实例所取代,而指针则指向原始文件或对象。 次文件层重复数据删除的操作粒度则比文件或对象更小。这种技术有两种常见的方式:固定块重复数据删除--数据被分解成固定长度的部分或块;可变长度重复数据删除--数据根据一个滑行的窗口进行重复数据删除。 数据压缩是对数据进行编码以减小它的大小;它还可以用于那些已经被重复数据删除的数据以进一步减少存储消耗。重复数据删除和数据压缩虽不同但互补--例如,数据可能重复数据删除的效率很高但是压缩的效率很低。 此外,重复数据删除数据可以在线执行;也就是说,在数据被写入目标端的时候进行重复数据删除操作;当然,重复数据删除也可以以后处理的方式执行,也就是在数据已经被写入并存储在磁盘上的时候执行。 这是一个简化的重复数据删除例子,我们有两个由块组成的对象或文件。下图显示了这些对象或文件的情况。对象或文件可以是可变的或基于窗口的部分、固定块或文件集合--可以应用同样的原则。在这个例子中,每个对象所包含的块由字母来区分。

文件级和块级重复数据删除技术的优缺点重点

文件级和块级重复数据删除技术的优缺点 https://www.doczj.com/doc/098245029.html, 2008年 12月 12日 11:23 https://www.doczj.com/doc/098245029.html, 作者:TechTarget 中国 重复数据删除技术大大提升了基于磁盘的数据保护策略、基于 WAN 的远程分公司备份整合策略、以及灾难恢复策略的价值主张。这种技术能识别重复数据,消除冗余,减少需转移和存储的数据的总体容量。 一些重复数据删除技术在文件级别上运行,另一些则更加深入地检查子文件或数据块。尽管结果存在差异, 但判断文件或块是否唯一都能带来好处。两者的差异在于减少的数据容量不同,判断重复数据所需的时间不同。 文件级重复数据删除技术 文件级重复数据删除技术通常也称为单实例存储(SIS ,根据索引检查需要备份或归档的文件的属性,并与已存储的文件进行比较。如果没有相同文件,就将其存储, 并更新索引;否则,仅存入指针,指向已存在的文件。因此,同一文件只保存了一个实例,随后的副本都以“存根”替代,而“存根”指向原始文件。 块级重复数据删除技术 块级重复数据删除技术在子文件的级别上运行。正如其名所示, 文件通常被分割成几部分——条带或块,并将这些部分与之前存储的信息予以比较,检查是否存在冗余。 最常见的检查重复数据的方法是:为数据块指定标识符, 例如, 利用散列算法产生唯一的 ID 或“足迹”,标识数据块。然后,将产生的 ID 与集中索引对比。如果 ID 已经存在, 就说明以前曾处理并存储该数据块。因此,只需存入指针,指向之前存储的数据。如果 ID 不存在,就说明数据块独一无二。此时,将 ID 添加到索引中,将数据块存储到磁盘中。

云计算中高效加密数据重复删除方法

第39卷第Z1期通信学报V ol.39No.Z1 2018年9月Journal on Communications September 2018 云计算中高效加密数据重复删除方法 张曙光1,2,3,咸鹤群1,2,王利明3,于凯杰4,张曼1 (1. 青岛大学计算机科学技术学院,山东青岛 266071; 2. 西安电子科技大学综合业务网理论及关键技术国家重点实验室,陕西西安 710071; 3.中国科学院信息工程研究所,北京 100093; 4.烟台冰轮铸造有限公司生产制造部,山东烟台 264006) 摘要:将海量数据外包至云服务器的应用模式已经被越来越多的用户所接受。然而,由于安全问题日益凸显,数 据在上传至云服务器之前通常会被用户加密,这给云服务提供商带来巨大的存储压力。相同明文数据或被多个用户 加密为不同密文数据,导致云服务提供商难以执行重复数据删除。目前支持加密数据重复删除的云存储系统过度依 赖可信第三方,且未考虑数据所有权问题,实用性较差。提出云计算中加密数据高效安全存储方法,使用双线性映 射与基于属性代理重加密机制,设计冗余度查询标签生成算法与密钥传递算法,保证云服务提供商在无第三方在线 协助的情况下,能够验证加密数据是否冗余,并完成加密数据重复删除。构造了动态更新该数据的所有权算法,保 证系统的安全性。安全分析与效率评估证明,所提方案能够在保证系统在安全性的前提下,实现存储效率最大化。 关键词:云存储系统;数据安全;加密重复删除;数据所有权 中图分类号:TP309 文献标识码:A doi: 10.11959/j.issn.1000-436x.2018188 Efficient encrypted data deduplication method in cloud computing ZHANG Shuguang1,2,3 , XIAN Hequn1,2 , WANG Liming3, YU Kaijie4, ZHANG Man1 1.College of Computer Science Technology, Qingdao University, Qingdao 266071, China 2. State Key Laboratory of Integrated Services Networks, Xidian University , Xi’an 710071, China 3. Institute of Information Engineering, Chinese Academy of Sciences, Beijing 100093, China 4. Yantai Moon Foundry Co., Manufacturing Department, Yantai 264006, China Abstract: Outsourcing massive data to remote cloud servers has become a common practice. However, as security issues arise increasingly, data are usually encrypted by users before being uploaded to the cloud server, such operation brings huge storage pressure to the cloud service provider. The same plaintext may be encrypted into different ciphertext by multiple users, causing the cloud service provider unable to perform deduplication. Several cloud storage systems that support the encrypted data deduplication have been proposed. However, these schemes are impractical because they rely heavily on third parties and do not address the data ownership update issues. A secure efficient deduplication method for encrypted data in cloud computing was proposed. Based on bilinear mapping and attribute-based proxy re-encryption mechanism, the redundancy check tag generation algorithm and key deliver algorithm were designed to ensure that the cloud service provider can verify the redundancy of encrypted data without any online third-party assistance. A dynamic data ownership update algorithm was constructed to ensure the security of the system. Security analysis and efficiency evaluation show that our scheme can provide promising storage efficiency while ensuring the system with high security. Key words: cloud storage system, data security, encryption deduplication, data ownership 收稿日期:2018-09-18 基金项目:国家自然科学基金资助项目(No.61303197);综合业务网理论及关键技术国家重点实验室开放课题(No.ISN19-14);赛尔网络下一代互联网创新项目(No.NGII20170414) Foundation Items: The National Natural Science Foundation of China (No.61303197), Open Project Program of the State Key La-boratory of Integrated Services Networks(No.ISN19-14), CERNET Innovation Project (No.NGII20170414) 2018188-1 万方数据

探讨重复数据删除技术在中央电台媒资备份存储系统中应用

探讨重复数据删除技术在中央电台媒资备 份存储系统中应用 导读:本文探讨重复数据删除技术在中央电台媒资备份存储系统中应用,仅供参考,如果觉得很不错,欢迎点评和分享。 探讨重复数据删除技术在中央电台媒资备份存储系统中应用作者/ 刘华 一、引言 2012年初,中央电台媒资备份存储系统正式投入使用。经过一年的运行,大量的节目内容,丰富的历史资料迅速将中央电台媒资备份存储系统填满,严重掣肘了节目归档、素材入库等媒资管理工作。近期中央电台完成了媒资备份存储系统在线扩容工作。备份存储的磁盘容量由之前的20T B,增加30TB,总计达到50T B。短短一年时间,磁盘空间需求已经翻番,可以预见,中央电台媒资备份存储系统还将面临磁盘空间短缺的问题。面对日益爆炸的数据增长和由此不断上升产生的存储压力难题,如何控制和有效降低海量数据显得尤为重要。重复数据删除技术无疑是“瘦身”的一项不错选择。 二、数据冗余 目前,中央电台媒资备份存储系统中,存在大量的重复和冗余数据,造成数据冗余的原因可能是人为的: ·为了确保文件的安全性,无意中将同样的文件存储了多份;

·不同文件的部分内容重复。 冗余数据占据了大量的存储空间,降低了存储空间的利用效率。图1展示了关于媒资备份存储系统中重复数据的比例、来源和分析。 更重要的是:这些大量的冗余数据给媒资备份存储系带来了大量的问题: ·占用大量存储空间,降低存储利用效率; ·增加建设成本; ·增加额外数据管理代价。 三、重复数据删除概念 通过相关研究和对实际系统的分析发现,在海量数字存储系统中,存在大量的重复数据和相似数据。通过重复数据删除技术可以有效去除这些重复数据,对相同数据只存储一份和只存储相似数据的不同部分,可以有效利用存储空间,从而有效降低存储系统成本。 重复数据删除是一种数据缩减技术,旨在最小化文件之间的冗余和重复的无损压缩,并对存储容量进行有效优化。它通过删除数据集中重复的数据,只保留其中一份,从而达到消除冗余数据目的。 目前,绝大多数的重复数据删除算法都工作在二进制数据层次上,通常使用一些数据切分算法,如以整个文件为切分粒度,固定大小的数据切分,或者某些H A S H函数(如R a b i nFingerprinting算法),将每一个带归档的文件切分成若干相互不重叠的数据片段,并把这些数据片段作为逻辑单位进行后续处理和存储操作。在这些数据片段中,只有不重复的数据片段才真正存储到存储设备中,而其他的

如何删除Excel表里的重复数据

如何删除Excel表里的重复数据 如何在Excel 中删除重复记录或创建不重复记录的列表 概要 当Microsoft Excel导入或合并多条记录时,可能会创建重复的记录。本文介绍如何创建不重复记录的汇总列表。 更多信息 要创建不重复记录的汇总列表,请按照下列步骤操作:1. 选择要排序的行或记录上方的列标题。 2. 在数据菜单中,指向筛选,然后单击高级筛选。如果收到如下提示,请单击确定。 未检测到任何标题。是否将选定区域的首行用作标题行? 3. 在方式下,单击“将筛选结果复制到其他位置”。 4. 单击以选中“选择不重复的记录”复选框。 5. 在“列表区域”框中,键入或选择一个记录范围(如A3:H10)。 6. 在“条件区域”框中,键入或选择相同的记录范围(即A3:H10) 7. 在“复制到”框中,键入用于存放信息的第一个单元格的地址,或直接选择该单元格。请确保该区域有足够的空间,以免覆盖已存在的数据。 注意:只能在活动的工作表中执行此操作。 8. 单击确定。 注意 如果原始数据的第一条记录是重复的,则该记录在新列表中将出现两次。只隐藏第一行。 如果就地执行高级筛选命令,工作表仍包含所有记录。重复的记录将被隐藏。要变通解决这一问题,请指向“格式”菜单上的“行”,然后单击“取消隐藏”。 为两个函数“IF、COUNTIF”判断和统计来查找重复数据,方法:如B列中B1-B218的数据查找或数组查找B1-E50,公式如下: =IF(COUNTIF(B1:B218,B1)=1,"无重复","有重复") =IF(COUNTIF(B1:E50,B1)=1,"无重复","有重复") 边输入时边查找重复数据方法: 1.使用“数据有效性” 选定我们需要检查的数据,如“B1:E20”,单击“数据→有效性”,出现“数据有效性”对话框(请见图1)。在“允许”列表框处选择“自定义”,“公式”文本框中输入如下公式:“=COUNTIF($B$1:$E$20,B1)=1”。单击“出错警告”标签,勾选“输入无效数据时显示出错警告”,“样式”列表处选择“停止”,右侧为出错提示信息,在“标题”处输入“数据重复”,“错误信息”处输入“数据重复,请重新输入 当我们在B1:E20区域中的D7单元格中输入“张三”后,因为与同在该区域的B4单元格内容重复,所以立刻会弹出一个警告对话框,阻止重复输入的数据。只有取消或更换输入的内容后,输入操作才得到允许

EXCEL删除重复数据

如何用EXCEL删除重复数据 EXCEL删除重复数据在新旧版本中操作方法有所不同。 先来说说EXCEL2003吧。 这里就要用到“高级筛选”功能,不多说了。大家可以自己去了解下“高级 筛选”这个功能就知道如何弄了。呵 再来看看重点excel2007 Excel 2007设计得比较人性化,直接就增加了一个“删除重复项”功能!使 用步骤如下: 1、选择需要删除重复项的所有单元格。如果是要对所有数据进行这一操作, 可以任意选择一个单元格。 2、在工具栏中选择“数据”选项卡,再单击“排序与筛选”区中的“删除重 复项”按钮。 3、在弹出的“删除重复项”对话框选择要检查的字段,最终将只对选中的字 段进行比较。 4、最后单击“确定”按钮,多余的重复项就被删除了。 也可按以下的EXCEL删除重复数据三步法: 1、标识重复数据 打开工作表,选中可能存在重复数据或记录的区域。单击“开始”选项卡中的“条件格式”打开菜单,在“突出显示单元格规则”子菜单下选择“重复值”,打开如图1所示对话框。在左边的下拉列表中选择“重复”,在“设置为”下拉列表中选择需要设置的格式(例如“绿填充色深绿色文本”),

就可以在选中区域看到标识重复值的效果,单击“确定”按钮正式应用这种 效果。 2、筛选重复数据 如果需要进一步识别并删除重复数据,可以根据上面的标识结果将数据筛选出来:选中按上述方法标识了重复数据的待筛选区域,单击“数据”选项卡中的“筛选”按钮,使筛选区域首行的各单元格显示下拉按钮。接着单击某个下拉按钮打开菜单,选择“按颜色筛选”子菜单中的“按字体颜色排序”,即可将存在重复数据或记录的行筛选出来,这时就可以查看并手工删 除重复数据了。 3.自动删除重复数据 Excel 2007提供了名为“删除重复项”的功能,它可以快速删除工作表中的重复数据,具体操作方法是:选中可能存在重复数据或记录的区域,单击“数据”选项卡中的“删除重复项”按钮,打开如图2所示对话框。如果需要保留若干完全相同记录中的一条,然后将剩余的相同记录全部删除,必须将如图2中的列标题全部选中,点击“确定”后,会弹出对话框显示删 除结果。

重复数据删除的三种算法

厂商采纳的执行重复数据删除的基本方法有三种与及各种的优缺点。 第一种是基于散列(hash)的方法,Data Domain、飞康、昆腾的DXi 系列设备都是采用SHA-1, MD-5 等类似的算法将这些进行备份的数据流断成块并且为每个数据块生成一个散列(hash)。如果新数据块的散列(hash)与备份设备上散列索引中的一个散列匹配,表明该数据已经被备份,设备只更新它的表,以说明在这个新位置上也存在该数据。 基于散列(hash)的方法存在内置的可扩展性问题。为了快速识别一个数据块是否已经被备份,这种基于散列(hash)的方法会在内存中拥有散列(hash)索引。当被备份的数据块数量增加时,该索引也随之增长。一旦索引增长超过了设备在内存中保存它所支持的容量,性能会急速下降,同时磁盘搜索会比内存搜索更慢。因此,目前大部分基于散列(hash)的系统都是独立的,可以保持存储数据所需的内存量与磁盘空间量的平衡,这样,散列(hash)表就永远不会变得太大。 第二种方法是基于内容识别的重复删除,这种方法主要是识别记录的数据格式。它采用内嵌在备份数据中的文件系统的元数据识别文件;然后与其数据存储库中的其它版本进行逐字节地比较,找到该版本与第一个已存储的版本的不同之处并为这些不同的数据创建一个增量文件。这种方法可以避免散列(hash)冲突(请参阅下面的“不要惧怕冲突”),但是需要使用支持的备份应用设备以便设备可以提取元数据。 ExaGrid Systems的InfiniteFiler就是一个基于内容识别的重复删除设备,当备份数据时,它采用CommVault Galaxy 和Symantec Backup Exec 等通用的备份应用技术从源系统中识别文件。完成备份后,它找出已经被多次备份的文件,生成增量文件(deltas)。多个 InfiniteFilers合成一个网格,支持高达30 TB的备份数据。采用重复删除方法的ExaGrid在存储一个1GB的 .PST文件类的新信息时表现优异,但它不能为多个不同的文件消除重复的数据,例如在四个.PST文件具有相同的附件的情况下。 Sepaton 的用于它的VTL 的DeltaStor也采用内容识别方法,但是它将新文件既与相同位置上的以前的文件版本进行比较,同时也与从其它位置上备份的文件版本进行比较,因此它能够消除所有位置上的重复数据。

Windows Server 2012重复数据删除七项注意

Windows Server 2012重复数据删除七项注意 【文章摘要】微软公司敏锐地发现了这一需求,在其最新的服务器操作系统Windows Server 2012中,该公司增加了重复数据删除子系统的特性,它提供了一种方式,在由一个给定的Windows Server实例管理的所有卷上执行重复数据删除。它并是把重复数据删除的任务推给一个硬件或软件层,而是在OS中进行,包括块级和文件级的 - 也就是说,多种类型的数据(例如虚拟机的多个实例)都可以成功地以最小的开销进行重复数据删除。 在当前的“大数据”时代,尽管磁盘空间越来越便宜,I/O速度在提升,但重复数据删除仍是存储管理员最为关注的神奇策略之一,这项技术的存在,使得我们能够以更低的存储成本和管理成本,得到更高的存储效率。 微软公司敏锐地发现了这一需求,在其最新的服务器操作系统Windows Server 2012中,该公司增加了重复数据删除子系统的特性,它提供了一种方式,在由一个给定的Windows Server实例管理的所有卷上执行重复数据删除。它并是把重复数据删除的任务推给一个硬件或软件层,而是在OS中进行,包括块级和文件级的 - 也就是说,多种类型的数据(例如虚拟机的多个实例)都可以成功地以最小的开销进行重复数据删除。 如果您打算实施Windows Server 2012的重复数据删除技术,确保您了解以下七点: 1、重复数据删除默认情况下不启用 不要指望升级到Windows Server 2012之后,节省空间的情况会自动出现。重复数据删除被当做一项文件和存储服务的功能,而不是核心OS组件。为了达到这个目的,您必须启用它并手动配置,在服务器角色文件和存储服务文件和iSCSI服务(Server Roles File And Storage Services File and iSCSI Services)。启用之后,还需要进行基础配置。 2、重复数据删除将无系统负担 在设置重复数据删除技术,微软投入了相当的精力,所以它只要一个很小的系统占用空间,甚至可以运行在有较大的负载的服务器上。这是三条理由: 首先,存储内容只会在n天(默认情况下n为5)之后才重复数据删除,这是用户可配置的。这个时间延迟,阻止了deduplicator试图处理这样的内容:当前的和常用的,或正在被写入到磁盘上的文件(这将构成重大的性能损失)。 其次,重复数据删除受到目录或文件类型的限制。如果您要排除某些类型的文件或文件夹的重复数据删除,您可以指定自如。

重复数据删除技术的发展及应用

重复数据删除技术的发展及应用 摘要: 重复数据删除技术包括相同数据重复数据删除技术和相似数据重复数据删除技术。相同数据重复数据删除技术主要有:相同文件重复数据删除技术、固定长度分块的重复数据删除技术、基于内容分块(CDC)的重复数据删除技术、基于滑动块的重复数据删除技术和基于数据特征的重复数据消除算法等。重复数据删除技术适合应用于数据备份系统、归档存储系统、远程灾备系统等场合。 关键词: 重复数据删除;存储;智能压缩 Abstract: Data de-duplication technology can be used to de-duplicate instances of the same data or similar data. Same data de-duplication includes de-duplication of fixed-length blocks, Content Defined Chunking (CDC), sliding blocks, and characteristic-based elimination of duplicate data algorithm. This technology is especially applicable in data backup systems, archival storage systems, and remote disaster recovery systems. Key words: data de-duplication; storage; intelligent compression 重复数据删除也称为智能压缩或单一实例存储,是一种可自动搜索重复数据,将相同数据只保留唯一的一个副本,并使用指向单一副本的指针替换掉其他重复副本,以达到消除冗余数据、降低存储容量需求的存储技术。 本文首先从不同角度介绍重复数据删除技术的分类,然后分别介绍相同数据重复数据删除技术和相似数据重复数据删除技术,并介绍重复数据消除的性能提升方法,最后分析重复数据技术的应用场景。 1 重复数据删除技术的分类 1.1 基于重复内容识别方法的分类 (1)基于散列(Hash)识别 该方法通过数据的散列值来判断是否是重复数据,对于每个新数据块都生成一个散列,如果数据块的散列与存储设备上散列索引中的一个散列匹配,就表明该数据块是一个重复的数据块。Data Domain、飞康、昆腾的DXi系列设备都是采用SHA-1、MD-5等类似的散列算法来进行重复数据删除。 基于散列的方法存在内置的可扩展性问题。为了快速识别一个数据块是否已经被存储,这种基于散列的方法会在内存中拥有散列索引。随着数据块数量增加,该索引也随之增长。一旦索引增长超过了设备在内存中保存它所支持的容量,性能会急速下降,同时磁盘搜索会比内存搜索更慢。因此,目前大部分基于散列的系统都是独立的,可以保持存储数据所需的内存量与磁盘空间量的平衡,这样,散列表就永远不会变得太大。 (2)基于内容识别 该方法采用内嵌在数据中的文件系统的元数据识别文件,然后与其数据存储库中的其他版本进行逐字节地比较,找到该版本与第一个已存储版本的不同之处并为这些不同的数据创建一个增量文件。这种方法可以避免散列冲突,但是需要使用支持该功能的应用设备以便设备可以提取元数据。

相似性的块级重复数据删除算法的研究

相似性的块级重复数据删除算法的研究 科技以追风逐电的速度渗透到各行各业,使数据量出现爆炸式增长,为减少存储成本与网络开销,重复数据删除技术被越来越广泛地应用于云存储、备份与 归档系统中。然而在数据块级重复数据删除算法中,传统分块算法的分块效果均较差。 固定分块(FSP)不能很好的满足数据多变性,可变长度分块(CDC)的参数设定掺杂了过多人为干预,导致基于经典分块算法的重复数据删除技术性能表现不稳定。另外,随着数据量级的增加,越来越多的指纹信息不能快速被检测对比,机械式的I/O操作严重增加了算法时间,性能难以保证。 针对可变长度分块(CDC)的分块大小难以控制,指纹计算对比开销大,预先设置参数等问题,提出Winnowing指纹串匹配的分块算法(CAWM)。首先在数据分块前引入分块大小预测模型,能够较准确地根据应用场景计算出合适的分块大小;然后在计算指纹时采用ASCII/Unicode编码方式作为数据块指纹;最后在确定分块边界时,提出指纹串匹配的分块算法,无须预先设置参数,使得指纹计算和对比开销减少。 通过将FSP、CDC、CAWM三种分块算法应用于重删实验,来验证CAWM分块效果,相比于FSP和CDC分块算法,CAWM在数据的重删率上提升了10%左右,在指纹计算和对比开销方面减少了18%左右。因此,CAWM的分块大小和边界更加符合数据特性,减少了参数设置对重复数据删除算法性能的影响,在处理不同类型的数据时,可以有效地消除更多的重复数据。 针对重复数据删除算法指纹对比I/O瓶颈问题,提出了一种基于相似聚类的二级索引重复数据删除算法。首先计算所有数据块的Simhash值,基于Simhash

Excel表格如何去除重复的行、列

如何去除Excel表格重复数据 excel表格如何去除重复的行、列 一、Excel表格中如何去除重复数据? 选中你需要的区域--筛选--高级筛选--选择不重复记录(勾上) 二、如何将两个Excel表格合并后去除重复的姓名剩下数据是不重复的数据 现在我把问题简化为去重名的情况 如下图在A1到A9有一个名单表 然后我在C这一列在中用公式除去重复的名单 C1中直接写=A1 C2中写=IF(NOT(COUNTIF($A$1:A2,A2)-1),A2,"") 再拖下来,重复的地方都是空白的 三、Excel表格中如何赐除重复的数据问题如下: 两列数据,如何剔除重复的数据。(注意,是剔除,不是筛选) 举例如下: A列B列 数据1 数据2 数据3 数据4 数据9 数据1 数据6 数据5 在A列中与B列的数据中,我想把B列中与A列中重复的数据完全剔除,B列中的数据1在A列中已存在,所以必须把B列中的数据1剔除,所剩下的B列数据则为我需要的数据。 方法如下: =INDEX(B:B,SMALL(IF(COUNTIF($A$1:$A$1000,$B$1:$B$1000),65536,ROW($B$1:$B$10 00)),ROW(A1)))&"" 数组公式输入后按CTRL+SHIFT+ENTER 结束然后下拉公式 四、去除Excel中同一列中的重复数据的方法 1、首先对你要去除重复数据的那一列数据进行排序(升序或降序都行);

2、然后把旁边一列当辅助列,第一空格打进1,第二空格打入公式:=if($a3=$a2,2,1),然后按下回车键就行(小tips:if函数的中的各个值的意义是这样的=if(逻辑式值,为真时的值,为假时的值),用英语表示可能清楚一点:=if(logic_value,value_if_true,value_if_false)); 3、拖动2中的公式应用到下面剩余的单元格中,重复出现的词旁边单元格的值变为2,否则就是1;

2019年excel表格如何筛选重复数据.doc

2019年excel表格如何筛选重复数据 篇一:Excel20XX如何筛选重复数据 Excel20XX如何筛选重复数据 减小字体增大字体作者:电脑爱好者来源:整理发布时间:20XX-01-0619:30:43在使用处理大量数据时,遇到重复数据的时侯怎么办呢?虽然我们一遍遍地仔细核对,可是出现错误仍然难以避免。其实在20XX中可以轻松地筛选重复数据。不信那就试试! 一、避免重复输入数据 在输入学籍号、身份证号码等数据时,我们可以通过如下方法解决: (1)首先选中要输入数据的固定区域,如A2:A10单元格区域,然后打开“开始”标签页,在“条件格式”下拉菜单中选择“突出显示单元格规则”→“重复值”(如图一)。 (2)时就会打开“重复值”对话框,在这里你可以根据需要自行定义重复值单元格内数据的颜色,如设置成醒目的红色(如图二),确认后即可生效。 这样,当你不慎输入了重复的数据,当前单元格就会立即变成红色,给你提示。 二、重复数据轻松筛选 如果大量的数据已经输入完毕,这时我们需要将相同的数据找出来并将其筛选,方法是:选中需要筛选重复项的单元格区域,然后切换到“数据”标签页,直接单击工具栏中的“删除重复项”,此时会打开

“删除重复项”对话框(如图三),确认后就会将指定区域中的所有重复内容一次性清除。 在Excel20XX中快速删除重复记录 20XX-10-0808:54:17来源:dafan网友评论0条进入论坛 在Excel中录入数据后,我们一般用高级筛选来处理删除重复的记录,Excel20XX保留了这个功能,同时又增加了一个“删除重复项”按钮,使操作更加简单、灵活。 一、传统方法:使用高级筛选 步骤如下: 1.单击数据区,选中其中的任一个单元格。如果只是针对其中部分字段和记录进行筛选,可先选中这部分区域。注意:只对连续选中的矩形区域有效。 2.单击“数据”标签,再单击下面工具栏中的“排序与筛选”区中的“高级”按钮,如图1。 3.在弹出的“高级筛选”对话框中选中“选择不重复的记录”复选项,在列表区域框中将自动出现筛选区域的范围,查看是否正确,不正确可用鼠标拖动重新选择;此外,可选择筛选结果的显示方式,这里选择的是“在原有区域显示筛选结果”。如图2。 4.单击“确定”按钮,筛选完成,完全相同的记录除第一个被保留外,其他的均被删除。如图3。 二、删除重复项 Excel20XX中增加了一个“删除重复项”按钮,用它来删除重复记

相关主题
文本预览
相关文档 最新文档