KR20150119880A - 저장된 데이터 내 감축된 잉여 - Google Patents

저장된 데이터 내 감축된 잉여 Download PDF

Info

Publication number
KR20150119880A
KR20150119880A KR1020157023747A KR20157023747A KR20150119880A KR 20150119880 A KR20150119880 A KR 20150119880A KR 1020157023747 A KR1020157023747 A KR 1020157023747A KR 20157023747 A KR20157023747 A KR 20157023747A KR 20150119880 A KR20150119880 A KR 20150119880A
Authority
KR
South Korea
Prior art keywords
hash value
buffer unit
user
stored
data
Prior art date
Application number
KR1020157023747A
Other languages
English (en)
Inventor
브라이언 이그노미레로
스홍 리앙
Original Assignee
심볼릭 아이오 코퍼레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US13/756,921 external-priority patent/US20140223118A1/en
Priority claimed from US13/797,093 external-priority patent/US10133636B2/en
Application filed by 심볼릭 아이오 코퍼레이션 filed Critical 심볼릭 아이오 코퍼레이션
Publication of KR20150119880A publication Critical patent/KR20150119880A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3088Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • G06F11/1453Management of the data involved in backup or backup restore using de-duplication of the data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9014Indexing; Data structures therefor; Storage structures hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • G06F3/0641De-duplication techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0661Format or protocol conversion arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3091Data deduplication
    • H03M7/3093Data deduplication using fixed length segments
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • G06F16/113Details of archiving
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/34Encoding or coding, e.g. Huffman coding or error correction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding

Abstract

본 발명의 기술의 사용을 통해, 중복 데이터를 저장할 필요성을 최소화하는 신규의 비-자명한 방법, 시스템 및 컴퓨터 프로그램 제품의 사용에 의해 효율적으로 데이터를 저장할 수 있다. 선택사항으로서, 사용자 데이터는 잉여 데이터를 저장하는 횟수를 감축하기 위한 프로토콜에 진입하기 이전에 데이터를 인코딩하기 위해 전처리될 수 있다.

Description

저장된 데이터 내 감축된 잉여{REDUCED REDUNDANCY IN STORED DATA}
본 발명은 데이터의 저장에 관한 것이다.
21세기는 사람들 및 회사들이 발생시키고 저장하는 디지털식 정보의 양의 기하급수적 성장을 목격해 왔다. 이러한 정보는 전형적으로는 디스크와 같은 자기 표면 상에 저장되는 전자 데이터로 이루어져 있다. 이들 디스크는 사이즈가 마이크로미터-이하이고 개개의 2진 조각의 데이터를 저장할 수 있는 작은 영역을 포함하고 있다.
어느 주어진 개체가 저장하는 방대한 양의 데이터 내에는, 흔히 정보의 상당한 중복이 있다. 예를 들어, 동일 회사 레터헤드는 수 천개의 문서에 나타날 수 있고, 이러한 데이터에 대응하는 각각의 파일은 레터헤드에 대해 코딩한 비트를 포함하고 있을 수 있다. 역사적으로, 많은 개체들은 이러한 유형의 중복이 그들 파일 내 존재하고, 동일 정보의 잉여 저장의 비효율성이 사업을 하는 비용이라고 받아들여 왔다.
저장을 위한 비용이 증가해 오고 있었고 저장의 가용성이 감소해 오고 있었으므로, 개체는 파일 내 또는 그들 간 중복 정보의 전부보다 더 적게 저장할 수단을 탐구하기 시작하였다. 이론적으로, 중복 정보의 저장을 회피하는 것 또는 중복 정보가 저장되는 횟수를 최소화하는 것을 추구하는 개체는 그들 데이터 세트 내 고유 비트 또는 바이트 패턴을 식별하고 고유 비트 또는 바이트 패턴을 최소한의 횟수 저장하는 것을 추구할 수 있다. 이들 방법을 수행하기 위하여, 새로운 파일이 저장을 위해 준비되고 있을 때, 그들 파일 내 정보는 이미 저장된 정보의 참조 세트에 비교될 것이고, 고려되고 있는 비트 또는 바이트 패턴이 고유한 경우에만, 그것이 저장될 것이다. 그것이 고유하지 않으면, 그때 잉여 데이터는 그것이 중복인 저장된 데이터를 가리키는 데이터보다 사이즈가 더 작은 참조로 교체될 것이다.
중복 정보가 저장되는 횟수를 감축하는 목표는, 국한되는 것은 아니지만, 다음을 포함하는 여러 난제를 제시한다: (1) 잉여에 대해 체크하기에 충분한 속도를 유지하는 것; (2) 검색을 위한 데이터 복원에 있어서 충분한 속도를 유지하는 것; (3) 잉여에 대해 체크하든지 또는 원래 파일에 대응하는 정보를 저장하든지 하는 프로세스 동안 데이터가 손실되지 않음을 보장하는 것; (4) 저장된 정보로의 무단 액세스에 대항하여 보호하는 것; 및 (5) 데이터의 스냅샷을 취하는 것, 데이터를 복제하는 것 및 데이터를 복원하는 것 중 전부는 아니더라도 하나 이상과 연관하여 사용될 수 있는 효율적 기술 및 방법을 제공하는 것. 본 발명의 다양한 실시예는 이들 난제 중 하나 이상을 극복하는 것에 관한 것이다.
본 발명은 데이터를 저장 및 검색하는 효율을 개선하는 한편, 잉여 데이터가 불필요하게 복수 횟수 저장되는 정도를 최소화하기 위한 방법, 시스템 및 컴퓨터 프로그램 제품을 제공한다. 본 발명의 다양한 실시예를 사용함으로써, 데이터를 효율적으로 저장 및 액세스할 수 있다. 본 발명의 이들 다양한 실시예를 통해, 데이터를 변환하고 그리고/또는 변환되거나 전환된 데이터가 저장되는 물리적 디바이스를 변경할 수 있다. 이것은 실행될 때 본 발명의 방법 또는 프로세스 중 하나 이상을 수행하는 컴퓨터 프로그램 제품에 동작가능하게 결합되거나 포함하는 컴퓨터를 채용하는 자동화된 프로세스를 통해 성취될 수 있다. 이들 방법 또는 프로세스는, 예를 들어, 컴퓨터 알고리즘 또는 스크립트에 매립되거나 포함하고 선택사항으로서는 하나 이상의 모듈을 통해 시스템에 의해 수행될 수 있다.
제1 실시예에 의하면, 본 발명은 비-캐시 기록 매체(non-cache recording medium) 상에 데이터를 저장하기 위한 방법에 관한 것으로서, 그 방법은, (i) 비-캐시 기록 매체에 데이터를 기록하라는 명령어를 수신하는 단계로서, 명령어는 사용자 인지된 논리적 블록 주소("LBA") 및 사용자 공급된 버퍼를 포함하고, 사용자 공급된 버퍼는, 예를 들어, 512 바이트 내지 2 메가바이트 또는 512 바이트 내지 64K로 이루어지는 상기 수신하는 단계; (ii) 사용자 공급된 버퍼를 사용자 공급된 버퍼 유닛으로 분할하고 암호 해시 함수(cryptographic hash function)를 사용자 공급된 버퍼 유닛의 각각에 적용하고, 그로써 발생된 해시 값을 발생시키는 단계; (iii) 컴퓨터 프로그램 제품이 해시 값 테이블에 액세스하고 그리고 발생된 해시 값이 해시 값 테이블 내 저장된 해시 값의 중복인지 결정하게 야기하는 알고리즘을 포함하는 컴퓨터 프로그램 제품을 활성화하는 단계로서, 해시 값 테이블은 복수의 저장된 해시 값의 각각을 서로 다른 저장된 버퍼 유닛 및 진정 논리적 블록 주소와 상관시키고; 그리고 (A) 발생된 해시 값이 해시 값 테이블 내 있지 않으면, 그때는 사용자 공급된 버퍼 유닛을 비-캐시 기록 매체 내 블록에 기록하고, 사용자 공급된 버퍼 유닛, 발생된 해시 값, 및 사용자 공급된 버퍼 유닛이 저장되는 진정 논리적 블록 주소의 상관을 포함하도록 해시 값 테이블을 업데이트하고, 사용자 공급된 버퍼가 기록된 곳에 대응하는 진정 논리적 블록 주소와 사용자 공급된 버퍼에 대한 사용자 인지된 논리적 블록 주소(또는 주소들)를 중개자 상에 기록하고; 그리고 (B) 발생된 해시 값이 해시 값 테이블 내 저장된 해시 값의 중복이면, 동일한 해시 값이 저장된 버퍼 유닛 및 현재 사용자 공급된 버퍼 유닛과 연관되고 2개의 버퍼 유닛이 다른 컨텐트를 갖는 상황으로서 정의되는 상충이 있는지 질의하고, 그리고 (a) 상충이 있으면, 사용자 공급된 버퍼 유닛을 비-캐시 기록 매체 내 블록에 기록하고, 저장된 버퍼 유닛과 저장된 해시 값 간 해시 값 테이블 내 연관을 삭제하거나 비활성으로 만들고, 사용자 공급된 버퍼 유닛, 발생된 해시 값, 및 사용자 공급된 버퍼 유닛이 저장되는 진정 논리적 블록 주소의 상관을 포함하도록 해시 값 테이블을 업데이트하고, 사용자 공급된 버퍼 유닛이 기록된 곳에 대응하는 진정 논리적 블록 주소와 사용자 인지된 논리적 블록 주소를 중개자 상에 기록하고, 그리고 (b) 상충이 없으면, 사용자 공급된 버퍼 유닛을 비-캐시 매체 상에 기록함이 없이 사용자 발생된 버퍼 유닛과 동일한 비-캐시 기록 매체 상에 저장된 버퍼 유닛의 진정 논리적 블록 주소를 중개자 상에 기록하고 그것을 사용자 공급된 버퍼에 대한 사용자 인지된 논리적 블록 주소와 상관시키는 상기 활성화하는 단계를 포함한다.
단계(A)에서 사용자 공급된 버퍼 유닛을 기록할 때, 당업자는 방법이 테이블 내 해시 값과 연관되지 않는다고 결정된 사용자 공급된 버퍼 유닛을 기록하도록 호출함을 인식할 것이다.
흔히, 사용자는 해시 값 알고리즘이 입력으로서 수용하도록 구성되는 사용자 공급된 버퍼 유닛보다 더 큰 유닛으로 또는 스트림으로 있는 데이터(사용자 공급된 버퍼)를 공급할 것이다. 이들 경우에 있어서, 사용자 공급된 버퍼 유닛은 호스트에 의해 보내진 원시 데이터를, 사용자 공급된 버퍼 유닛이라고 여겨질 수 있는, 더 작은 유닛으로 단편화(깨기라고도 지칭됨)함으로써, 호스트가 그것들을 단편화하는지 또는 본 발명의 시스템 또는 방법이 그렇게 하는지에 무관하게, 형성될 수 있다. 그리하여, 이들 단편화된 사용자 공급된 버퍼 유닛은 암호 해시 함수에 대한 입력으로서 역할할 수 있다. 비-한정적 예로서, 사용자 공급된 데이터는 16K 내지 2MB일 수 있고 각각의 단편화된 사용자 공급된 버퍼 유닛은 512 바이트 내지 4K, 예를 들어, 512 바이트 또는 4K이다. 그리하여, 일부 실시예에 있어서, 단편화된 사용자 공급된 버퍼 유닛은 단편화 이전 사용자 공급된 버퍼의 사이즈의 ¼ 이내 또는 1/16 이내 또는 1/64 이내이다. 단편화의 단계가 해시 값 알고리즘에 진입하기 이전에 사용되면, 그때 해시 값 테이블은 사용자 공급된 버퍼 유닛과 해시 값의 상관을 포함하고 있을 것이고, 저장 디바이스로의 기록은 더 큰 데이터 버퍼 유닛이 아니라 단편화된 사용자 공급된 버퍼 유닛일 것이고 중개자는 사용자 공급된 버퍼 유닛의 사용자 인지된 주소(또는 주소들)를 복수의 단편화된 사용자 공급된 버퍼 유닛과 상관시킬 것이다.
본 발명의 방법의 다양한 단계는 하나 이상의 모듈, 예를 들어, 사용자 인지된 논리적 블록 주소 및 버퍼의 수신 모듈, 단편화 모듈, 해시 값 검색 모듈, 해시 값 중복 분석 모듈, 상충 모듈, 및 기록 모듈 내 저장될 수 있다. 유사하게, 파일 판독 및 복원 모듈이 있을 수 있다. 이들 모듈은 실행가능한 코드의 형태로 비-일시적 매체 내 저장될 수 있다.
제2 실시예에 의하면, 본 발명은 데이터를 저장하기 위한 시스템을 제공하며, 그 시스템은, (a) 영속적 메모리로서, 진정 논리적 블록 주소 및 저장된 해시 값과 저장된 버퍼 유닛을 연관시키도록 구성되는 해시 값 테이블을 저장하는 영속적 메모리; (b) 비-일시적 매체 내 저장되는 컴퓨터 프로그램 제품에 동작가능하게 결합되거나 포함하는 중앙 처리 장치로서, 컴퓨터 프로그램 제품은 실행될 때, 자동으로, (i) 발생된 해시 값을 발생시키도록 하나 이상의 사용자 공급된 버퍼 유닛의 각각에 해시 값 알고리즘을 적용하고; 그리고 (ii) 발생된 해시 값이 저장된 버퍼 유닛과 연관되어 있는 해시 값 테이블 내 저장된 해시 값의 중복인지 결정하고, 그리고 그러하다면, 해시 값이 2개의 다른 버퍼 유닛과 연관되는 것으로 정의되는 상충이 존재하는지 결정하고 상충이 존재하면, 그 테이블 내 해시 값이 저장된 버퍼 유닛이 아니라 사용자 공급된 버퍼 유닛과 연관되게 야기하도록 해시 값 테이블을 업데이트하는 실행가능한 코드를 포함하는 중앙 처리 장치; (c) 비-캐시 기록 매체로서, 블록 레벨 저장을 위해 구성되는 비-캐시 기록 매체; 및 (d) 중개자로서, 사용자 인지된 논리적 블록 주소와 진정 논리적 블록 주소의 상관을 저장하는 중개자를 포함한다.
제3 실시예에 의하면, 본 발명은 컴퓨터 판독가능한 프로그램을 포함하는 비-일시적 컴퓨터 사용가능한 매체를 포함하는 컴퓨터 프로그램 제품을 제공하며, 컴퓨터 상에서 실행될 때 컴퓨터 판독가능한 프로그램은 컴퓨터가 본 발명의 방법 중 어느 하나를 포함하는 파일 시스템 내 데이터 블록을 중복-제거 및 관리하기 위한 방법을 구현하게 야기한다. 이들 방법은 하나 이상의 모듈 내 조직될 수 있다.
본 발명의 다양한 실시예를 통해, 데이터를 저장 및 검색하는 효율을 증가시킬 수 있는데, 대부분의 상황에서, 이전에 기록된 데이터와 중복인 큰 버퍼 유닛이 비-캐시 기록 매체(NCM)에 재기록될 필요가 없을 것이기 때문이다. 대신에, 가리키는 데이터를 하우징하는 저장 유닛과는 물리적으로 별개인 구조 내 있고 사이즈가 더 작은 중개자 상의 포인터가 컴퓨터를 그 데이터의 이전에 저장된 사본으로 안내할 것이다. 효율 증가는 흔히 적용되는 방법에서 사용되는 것보다 더 적은 저장 공간을 사용하고 정보를 저장 및/또는 검색하는 활동에 더 적은 시간 및 수고를 투자함으로써 실현될 수 있다. 더욱 일부 실시예에 있어서, 본 발명은 문서를 저장 및 검색하는데 증가된 속도의 결과를 초래한다. 그리하여, 본 발명의 기술 및 방법론은 데이터를 저장하는데 요구되는 물리적 저장소의 총량을 감축시키도록 도움을 준다. 이것은 중복 데이터가 기록되고 저장되는 횟수를 최소화하고, 중복 데이터가 있는 경우에, 이전에 저장된 데이터를 가리키도록 중개자를 사용함으로써 성취된다.
도 1은 본 발명의 일 실시예에 따라 데이터를 기록하기 위한 방법의 표현도,
도 2는 본 발명의 방법에 따라 상충을 해결하기 위한 프로토콜의 표현도, 및
도 3은 본 발명의 일 실시예에 따라 정보를 판독하기 위한 방법의 표현도.
본 발명의 다양한 실시예에 대하여 이제 상세히 언급할 것이며, 그 예가 수반 도면에 예시된다. 이하의 상세한 설명에 있어서는, 수많은 특정 상세가 본 발명의 철저한 이해를 제공하기 위해 제시된다. 그렇지만, 맥락으로부터 내포되거나 달리 나타내지 않는 한, 그 상세는 예로서 의도되며 어떤 식으로도 본 발명의 범위를 한정한다고 여겨져서는 안 된다.
정의
맥락으로부터 내포되거나 달리 서술되지 않는 한, 이하의 용어 및 구절은 아래에 제공되는 의미를 갖는다.
용어 "비트"는 2진 디지트를 지칭한다. 그것은 2개의 값 중 하나를 가질 수 있다. 각각의 값은 0 또는 1 중 어느 하나에 의해 표현될 수 있다.
용어 "블록"은 기결정된 길이를 갖는 데이터의 비트 또는 바이트의 시퀀스를 지칭한다. 기록 매체 상에서, 물리적 매체는 블록 사이즈에 의해 정의되는 유닛으로 분할될 수 있다. 기록 매체 상의 각각의 블록은 논리적 블록 주소에 의해 식별될 수 있다. 업계에서, 현재는, 512 바이트가 블록의 표준 사이즈이다. 그렇지만, 4096 바이트를 표준으로서 사용하려는 움직임이 있다. 부가적으로, 당업자는 구절 "블록 사이즈"와 "섹터 사이즈"가 빈번하게 당업자에 의해 호환가능하게 사용됨을 인식할 것이다.
구절 "부팅가능성 코드", "부팅가능성 정보" 및 "부팅가능성 특징"은 어느 것에 의해 부팅가능한 상태에 진입할지 그 수단을 제공하고 부트 섹터 상에 저장될 수 있는 정보를 지칭한다. 부트 섹터는, 차례로 부트 프로세스가 저장 디바이스 상으로 또는 그로부터 프로그램을 로딩할 수 있게 하는, 펌웨어에 의해 RAM(random access memory) 내 로딩되도록 구성되는 기계 코드를 포함하고 있을 수 있다. 예로서, 마스터 부트 레코드는, 운영 체제 또는 다른 자립형 프로그램을 로딩할 그리고 인보크할 코드를 포함하고 있을 수 있는, 활성 파티션의 위치를 찾아내고 볼륨 부트 레코드를 인보크하는 코드를 포함하고 있을 수 있다.
구절 "버퍼 유닛"은 해시 값 알고리즘 내로의 입력으로서의 사용에 호환가능한 사이즈인 일련의 비트를 지칭한다. 버퍼 유닛은 청크렛(chunklet)과 동일한 사이즈일 수 있다. 그렇지만, 일부 실시예에 있어서, 그것은 청크렛 사이즈의 소수이거나 청크렛 사이즈의 배수일 수 있다.
용어 "바이트"는 8개 비트의 시퀀스를 지칭한다.
용어 "캐시"는 버퍼링의 목적으로 또는 데이터가 더 고속으로 제공되도록 장래 요청을 위해 데이터가 일시적으로 저장되는 위치를 지칭한다. L1 캐시(레벨 1 캐시)는, 예를 들어, 프로세서 코어와 통합되어 있는 정적 메모리를 지칭한다. L1 캐시는 CPU(central processing unit)가 동일한 데이터에 여러 번 액세스하는 경우에 데이터 액세스 속도를 개선하도록 사용될 수 있다. L2 캐시(레벨 2 캐시)는 전형적으로는 L1보다 더 크고, 데이터 파일이 탐색되지만 L1 캐시에서 발견되지 않으면, 검색은 외부 메모리를 살피기 이전에 L2 캐시에 대해 이루어질 수 있다. 일부 실시예에 있어서, L1 캐시는 중앙 처리 장치 내에 있지 않다. 대신에, 그것은 DDR, DIMM 또는 DRAM 내 위치할 수 있다. 부가적으로 또는 대안으로, L2 캐시는 마더보드에 들어가는, PCI 2.0/3.0의 일부분일 수 있다. 그리하여, L1 캐시 및 L2 캐시의 각각은 마더보드의 별개 부분에 있을 수 있다. 일부 실시예에 있어서, 본 발명의 방법이 구현될 때, 해시 값 테이블이 L2 캐시에 상주한다.
용어 "청크렛"은 섹터 클러스터에 대응할 수 있는 비트의 세트를 지칭한다. 청크렛의 사이즈는 저장 시스템에 의해 결정되고 청크렛 사이즈를 가질 수 있다. 전통적으로, 청크렛 사이즈는, 하드 디스크 상에 그것들이 나타난 실린더, 헤드 및 섹터를 정의한 투플에 의해 블록을 어드레싱한, CHS 스킴에 의해 유도되었다. 더 최근에, 청크렛 사이즈는 논리적 블록 주소(LBA) 측정치로부터 유도되었다. 예로서, 청크렛 사이즈는 512B, 1K, 2K, 4K, 8K, 16K, 32K, 64K 또는 1MB일 수 있다. 당업자는 1K = 1024B임을 알고 있다. 청크렛은 호스트로부터 원시 데이터로서 수신될 수 있다.
용어 "상충"은 여러 다른 입력, 예를 들어, 버퍼 유닛에 대해 동일한 출력, 예를 들어, 해시 값 알고리즘과 같은 함수에 의한 해시 값의 발생이 일어나는 것을 지칭한다.
"파일"은 비트 또는 바이트로 측정될 수 있는 길이를 갖는 사이즈의 파일을 제공하도록 조합되는 관련 바이트 또는 비트의 집합이다. 파일은 청크렛보다 더 작거나, 청크렛과 동일한 사이즈거나, 청크렛보다 더 클 수 있다.
구절 "파일 이름"은 컴퓨터가 특정 파일을 식별하고 그리고 그 파일을 다른 파일과 구별할 수 있게 하는 표기법 또는 코드를 지칭한다.
구절 "파일 시스템"은 파일 세트를 저장하고, 검색하고 업데이트하도록 사용되는 추상화를 지칭한다. 그리하여, 파일 시스템은 데이터 및 파일의 메타데이터로의 액세스는 물론 데이터를 포함하고 있는 저장 디바이스 상의 이용가능한 공간도 관리하도록 사용되는 툴이다. 일부 파일 시스템은, 예를 들어, 서버 상에 상주할 수 있다. 파일 시스템의 예는 국한되는 것은 아니지만 유닉스 파일 시스템 및 그 연관된 디렉토리 테이블 및 아이노드, 윈도우즈 FAT16 및 FAT32 파일 시스템(FAT은 파일 할당 테이블을 지칭함), 마스터 파일 테이블에 기반하는 윈도우즈 NTFS, 및 HFS 또는 HFS 플러스를 사용하는 애플 맥 OSX를 포함한다.
구절 "해시 함수", "암호 해시 함수", "암호 해시 함수 값 알고리즘", 및 "해시 함수 값 알고리즘"은 (동일 또는 가변 길이인) 큰 데이터 세트를 특정 해시 함수에 대해 고정 길이를 갖는 더 작은 데이터 세트에 매핑하는 알고리즘 또는 서브루틴을 지칭한다. "해시 함수 값"은 해시 함수 알고리즘의 적용 후에 반환되는 출력을 지칭한다. 알고리즘이 반환하는 값은 또한 소위 해시 값, 해시 코드, 해시 섬, 체크섬 또는 해시라고 할 수 있다. 예를 들어, MD5를 사용할 때, 출력은 128 비트인 반면, SHA-1을 사용할 때, 출력은 160 비트이다. 그리하여, 일부 실시예에 있어서, 해시 값은 길이가 32 내지 512 비트이다.
용어 "호스트", "사용자" 및 "개시자"는 호환가능하게 사용되고 저장을 위해 데이터를 본 발명의 데이터 저장 및 검색 중개 시스템에 보내는 개체 또는 시스템을 지칭할 수 있다. 호스트는 하나 이상의 유형의 문서 또는 파일에 대응하는 데이터를 보내고 데이터를 수신할 수 있다. 바람직하게는, 어느 입/출력("I/O") 스트림 내에서, 데이터는 단일 문서 유형의 파일에 대응한다.
용어 "포함하는" 및 "포함하고 있는"은 개방단 방식으로 사용되고 그리하여 "포함하지만 국한되지는 않는"을 의미한다고 해석되어야 한다.
약자 "LBA"는 "논리적 블록 어드레싱(logical block addressing)" 또는 "논리적 블록 주소"를 지칭한다. LBA는 선형 어드레싱 스킴이고 소정 저장 매체, 예를 들어, 하드 디스크에 저장되는 데이터 블록의 위치를 특정하는데 사용되는 시스템이다. LBA 스킴에 있어서, 블록은 정수 번호에 의해 위치가 찾아지고 하나의 번호만이 데이터를 어드레싱하는데 사용된다. 전형적으로, 제1 블록은 블록 0이다. 사용자는 데이터가 특정 LBA 상에 저장된다고 믿을 수 있다. 데이터가 저장된다고 사용자가 인지하는 위치는 "사용자 인지된 논리적 블록 주소"이다. 이것은 데이터가 실제로 저장되는 곳과는 다를 수 있다. NCM 상에 데이터가 실제로 저장되는 위치는 "진정 논리적 블록 주소"라고 지칭될 수 있다.
약자 "LUN"는 논리적 유닛 번호(logical unit number)를 지칭하고 논리적 유닛을 식별하는데 사용되는 번호이다. LUN은 SAN을 통하여 공유되는 블록 저장 어레이를 관리하는데 흔히 사용된다.
용어 "매니저"는 컴퓨터 프로그램 제품, 예를 들어, 비-일시적 매체에 저장될 수 있는 그리고 하나 이상의 다른 액션, 예를 들어, 데이터 수신, 송신, 또는 처리가 취해지게 야기하는 코드를 지칭한다. 그것은 하드웨어, 소프트웨어 또는 그 조합 상에 저장될 수 있다. 일부 실시예에 있어서, 매니저는 매니저가 그 의도된 기능을 수행할 수 있게 하도록 구성되는 컴퓨터 및/또는 시스템의 일부분일 수 있다.
용어 "중개자"는 하드웨어, 소프트웨어 또는 그 조합 상에 저장될 수 있는 그리고 적어도 하나의 비-캐시 매체 내 저장 공간의 하나 이상의 유닛을 파일 이름과 상관시키는 컴퓨터 프로그램 제품을 지칭한다. 그리하여, 그것은 사용자 인지된 LBA를 진정 LBA와 상관시킬 수 있다. 중개자는 그것이 가리키는 비-캐시 매체보다 더 작은 크기의 차수일 수 있다. 예를 들어, 그것은 대략 전형적 실린더의 사이즈의 약 0.2% 정도로 작을 수 있다. 일부 실시예에 있어서, 중개자는 컴퓨팅 클라우드 내 존재하는 반면, 다른 실시예에 있어서 그것은 비-일시적 유형적 기록 매체에 존재한다. 중개자는 호스트가 실제로는 기록 매체의 여러 다른 트랙에서 일어나고 있는 동안 기록 매체의 소정 트랙에 있는 것으로 인지하는 위치 내 데이터의 저장을 조직하고, 번역하고, 변환하고 그리고 제어할 수 있을 수 있거나 또는 그것은 이들 기능 중 전부는 아니더라도 하나 이상을 서비스 제공하는 매니저에 동작가능하게 결합될 수 있다. 더욱, 중개자는 물리적 디바이스 또는 구조 내 위치할 수 있는 데이터의 섹터 맵, 테이블 또는 다른 조직을 포함할 수 있고, 그리하여 중개자의 컨텐트는 물리적 디바이스 또는 구조가 소정 기하구조를 갖게 야기할 수 있다. 일부 실시예에 있어서, 중개자는 L2 캐시 상에 상주한다.
용어 "메타데이터"는 데이터의 컨테이너에 대한 관리 정보를 지칭한다. 메타데이터의 예는, 국한되는 것은 아니지만, 판독되고 있는 파일의 길이 또는 바이트 카운트; 파일이 수정된 마지막 시간과 관련 있는 정보; 파일 유형 및 액세스 허가를 기술하는 정보; 및 LUN QoS, VM 및 WORM을 포함한다. 다른 유형의 메타데이터는 운영 체제 정보, 자동-초기화 정보, 그룹 허가, 및 문서 유형 내 비트의 빈도를 포함한다.
약자 "NCM"은 비-캐시 기록 매체를 지칭한다. NCM의 예는, 국한되는 것은 아니지만, 하드 디스크 및 솔리드 스테이트 드라이브를 포함한다. NCM은, 예를 들어, 100 테라바이트 데이터 바이트를 수용하도록 구성될 수 있다. NCM은 고유 버퍼 유닛을 저장한다. 일부 실시예에 있어서, NCM은 또한, 버퍼 유닛과 저장된 해시 값의 연관을 포함하고 있는, 다이제스트 맵을 저장한다. 이들 저장된 연관은 서버의 RAM 내 해시 값 테이블을 거주시키도록 사용될 수 있다. NCM의 영속적 저장소로부터의 이러한 정보를 RAM에 거주시킴으로써, 고속 로딩이 성취될 수 있다. 부가적으로 또는 대안으로, NCM은, 본 발명의 저장소 저장을 추적하도록 사용될 수 있는, 유닛 블록당 1비트의 비트 맵을 저장한다. 실용성의 사항으로서, 다이제스트 맵 및 비트 맵의 저장은 5와 10 바이트 사이의 작은 오버헤드, 예를 들어, NCM 상의 저장된 데이터의 블록당 8.125 바이트를 요구한다. 대안으로, 다이제스트 맵 및 비트 맵은 본 발명의 시스템의 사용 또는 방법의 결과로서 기록되는 버퍼 유닛을 저장하는 것과는 다른 저장 매체 상에 저장될 수 있다.
구절 "동작가능하게 결합"은 용어 "결합"과 호환가능하게 사용되고, 시스템, 디바이스 및/또는 모듈이 서로 또는 서로 서로 통신하도록 구성되고 통신하고 있을 때 또는 통신한 후에 그들 의도된 목적을 수행할 수 있음을 의미한다. 그 구절 및 용어는 간접, 직접, 광학, 유선 또는 무선 접속을 포함한다. 그리하여, 제1 디바이스가 제2 디바이스에 동작가능하게 결합되어 있으면, 그 접속은 직접 전기 접속을 통하거나, 다른 디바이스 및 접속을 통한 간접 전기 접속을 통하거나, 광학 접속을 통하거나 또는 무선 접속 또는 그 조합을 통할 수 있다.
구절 "운영 체제"는 컴퓨터 하드웨어 자원을 관리하는 소프트웨어를 지칭한다. 운영 체제의 예는, 국한되는 것은 아니지만, 마이크로소프트 윈도우즈, 리눅스 및 맥 OS X를 포함한다.
용어 "파티션"은 저장 매체, 예를 들어, 디스크 드라이브를 유닛으로 분할하는 포맷을 지칭한다. 그리하여, 파티션은 또한 디스크 파티션이라고도 지칭될 수 있다. 파티션의 예는, 국한되는 것은 아니지만, GUID 파티션 테이블 및 애플 파티션 맵을 포함한다.
구절 "기록 매체"는 비트에 대응하는 자기 신호를 저장할 수 있는 비-일시적 유형적 컴퓨터 판독가능한 저장 매체를 지칭한다. 예로서, 기록 매체는, 국한되는 것은 아니지만, 하드 드라이브, 하드 디스크, 플로피 디스크, 컴퓨터 테이프, ROM, EEPROM, 비휘발성 RAM, CD-ROM 및 펀치 카드와 같은, NCM을 포함한다.
용어 "섹터"는 디스크, 예를 들어, 자기 디스크 상의 트랙의 세분을 지칭한다. 각각의 섹터는 고정량의 데이터를 저장한다. 디스크에 대한 공통 섹터 사이즈는 512 바이트(512B), 2048 바이트(2048B) 및 4096 바이트(4K)이다. 청크렛이 사이즈가 4K이고 각각의 섹터가 512B 사이즈이면, 그때 각각의 청크렛은 8 섹터(4*1024/512 = 8)에 대응한다. 섹터는 트랙을 갖고 플래터 상에 위치한다. 흔히, 2개 또는 4개의 플래터가 실린더를 이루고, 255개의 실린더가 하드 디스크 및 매체 디바이스를 이룬다.
구절 "섹터 맵"은 호스트로부터 호출을 수신하고 파일이 저장되는 저장 디바이스 내 위치와 상관시키는 툴을 지칭한다. 섹터 맵은, 예를 들어, iSCSI(internet small computer system interface) 프로토콜에 의해 정의되는 파라미터 하에 동작할 수 있다. 본 발명의 일부 실시예에 있어서, 섹터 맵은 중개자의 비트 필드 내 위치할 수 있다.
용어 "트랙"은 모든 섹터를 가로지르는 디스크 내 순환 유닛을 지칭한다. "트랙 섹터"는 어느 하나의 섹터 내 트랙이다. "트랙 클러스터"는 하나보다 많은 섹터에 걸쳐 이어진다.
선호되는 실시예
본 발명은 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법, 이들 방법을 수행하기 위한 컴퓨터 프로그램 제품, 및 이들 방법을 수행하도록 구성되는 시스템을 제공한다. 본 발명의 다양한 실시예를 통해, 중복 데이터가 저장되는 횟수를 감소시킴으로써 데이터를 효율적으로 저장 및 검색할 수 있다.
일 실시예에 의하면, 본 발명은 비-캐시 기록 매체 상에 데이터를 저장하기 위한 방법을 제공한다. 일부 실시예에 있어서, 수신되는 데이터는 사용자 정의된 논리적 블록 주소(LBA) 및 사용자 공급된 버퍼로 이루어지거나, 본질적으로는 그것으로 이루어지거나, 그것을 포함한다. 사용자 공급된 버퍼의 사이즈는, 예를 들어, 512 바이트 내지 64K이거나 또는, 예를 들어, 2 메가바이트까지 훨씬 더 클 수도 있다. 수신되는 데이터는 (LBAx, bufferx)의 포맷일 수 있으며, 여기서 x = 1 내지 n이고, n = 사용자가 보내는 버퍼의 번호이다. 버퍼는 원시 데이터이고 그리하여 그것들은 어느 문서 유형에라도, 예를 들어, JPEG, PDF, WORD 문서, MPEG 및 TXT 문서에 대응할 수 있다.
사용자가 보내는 총 스트림은 N 바이트의 형태일 수 있다. 스트림은 유선 또는 무선인 네트워크를 통하여 그리고 I/O 스트림을 송신하기 위한 기지의 방법 및 기술을 통해 수신될 수 있다. 사용자는 포맷: (LBAx, bufferx)으로 데이터를 포매팅할 수도 있고 사용자는 데이터를 이러한 포맷으로 포매팅하는 서버에 데이터를 보낼 수도 있다. 그리하여, N은 버퍼 유닛의 사이즈보다 더 클 수 있다. 바람직하게는, 사용자는 파일 이름 및/또는 파일 식별자를 갖는 데이터를 송신한다.
N이 버퍼 유닛의 사이즈보다 더 클 때, 데이터 스트림의 수신 후에, 서버는 N 바이트를 버퍼 유닛으로 단편화할 수 있다. 그리하여, 버퍼는 어느 사이즈라도 될 수 있는 데이터 스트림이지만, 버퍼 유닛은 고정 사이즈이고 NCM 상의 저장 유닛의 사이즈에 대응한다. 예를 들어, 사용자는 LBA10을 시작하도록 파일에 대한 칭호를 갖는 1024 바이트의 단일 버퍼를 보낼 수 있다. 본 발명의 구현의 버퍼 유닛 사이즈가 512 바이트이면, 데이터는 LBA20 및 LBA21에서 저장될 수 있다. 주목할만하게는, 일부 실시예에 있어서, 사용자는 시작하는 LBA만을 송신할 수 있고 그 시스템은 그 주소에서 시작하여 파일에 대한 충분한 여유가 있도록 연이은 블록으로 뻗어 NCM 상에 저장될 파일을 인지할 것이다.
이러한 단편화는 총 스트림 상에 또는 청크렛 상에 수행될 수 있다. 예를 들어, 방법이 사이즈가 4K인 버퍼 유닛을 수신하도록 구성되지만 사용자가 사이즈가 16K인 청크렛을 송신하면, 서버가 청크렛을 수신할 때 또는 그 후에, 그것은 각각의 청크렛을 사이즈가 각각 4K인 4개의 버퍼 유닛으로 각각의 청크렛을 분할하기 위한 프로토콜을 개시할 것이다. 그리하여, 일부 방법에 의하면, (LBAx, bufferx)의 형태로 데이터를 수신하거나 또는 그것이 수신하는 데이터를 이러한 형태로 변환한다. 사용자가 공급하는 데이터가 필수 버퍼 유닛 사이즈이도록 구성되는 패킷인지 또는 그 사이즈로 변환되는 패킷인지에 무관하게, 해시 값 알고리즘에 대한 입력으로서 역할하는 버퍼 유닛의 각각은 "사용자 공급된 버퍼 유닛"이라고 지칭된다.
데이터가 올바른 형태로 수신(또는 변환)된 후에는, 암호 해시 함수 값 알고리즘이 각가의 버퍼 유닛에 적용되어 그 버퍼 유닛에 대한 발생된 해시 값을 형성한다. 발생되는 해시 값은 발생된 해시 값이라고 지칭될 수 있다. 암호 해시 값 알고리즘은, 예를 들어, 비-일시적 저장 매체 내 저장되는 컴퓨터 프로그램 제품 내 프로토콜 또는 컴퓨터 프로그램 제품의 형태일 수 있다. 이들 유형의 알고리즘의 예는, 국한되는 것은 아니지만, MD5 해시(메시지 다이제스트 알고리즘이라고도 지칭됨), MD4 해시 및 SHA-1을 포함한다. 해시 함수 값 알고리즘으로부터 출력되는 값은 해시 값, 체크섬 또는 섬이라고 지칭될 수 있다. 일부 예에 있어서, 해시 값은 사이즈가 64, 128 또는 256 비트 또는 8 바이트 또는 그 사이의 어느 값이다. I/O 스트림 내 데이터의 고도의 반복적 본성 때문에, 상충하는 해시 값, 즉, 동일하지만 서로 다른 버퍼 유닛에 대응하는 해시 값을 발생시킬 확률은 비교적 낮다. 그 방법은 선입선출("FIFO") 프로토콜에 따라 해시 값을 획득할 수 있고 또한 I/O 스트림이 수신되고 있는 동안, 해시 값이 발생되고 있는 동안, 또는 모든 I/O 스트림이 수신되고, 단편화되고, 필요하다면, 해시 함수 값 알고리즘을 받게 된 후에 상관 파일에 액세스하는 것을 시작한다.
발생된 해시 값이 사용자 공급된 버퍼 유닛에 대해 획득된 후에, 다른 컴퓨터 프로그램 제품 또는 발생된 해시 값을 산출한 동일 컴퓨터 프로그램 제품 내 다른 모듈이 액세스된다. 이러한 컴퓨터 프로그램 제품은 해시 값 테이블에 액세스한다. 해시 값 테이블은, 예를 들어, 영속적 메모리 내 저장되고 액세스 및 사용을 위해 L2 캐시 내로 호출될 수 있다. 해시 값 테이블 내에는, 복수의 저장된 해시 값이 NCM 상의 버퍼 유닛의 진정 LBA 및 저장된 버퍼 유닛 세트 내 다른 저장된 버퍼 유닛과 각각 연관되어 있다. 구절 "저장된 해시 값"은, 발생된 해시 값이라고 지칭될 수 있는, 특정 사용자 공급된 버퍼 유닛에 대해 해시 값 알고리즘에 의해 발생되는 해시 값을 대비시키도록 사용된다.
해시 값 테이블에는 처음에는 특정 해시 값 알고리즘에 의해 연관되는 바와 같은 일 세트의 기지의 해시 값 및 버퍼 유닛이 거주할 수 있다. 이들 기지의 값은 알고리즘의 실증적 이전 사용, 예를 들어, 호스트의 파일 또는 유사 업계 내 호스트의 파일에 대해 이전에 발생된 것들에 기반하여 결정되었을 수 있다. 대안으로, 그것은 처음에는 비어 있을 수 있고 제1 사용자 공급된 버퍼 유닛이 널 연관 세트에 비교된다. 사용 중일 때, 해시 값 테이블은, 예를 들어, 서버 상에 RAM 내 상주할 수 있다. 그리하여, 해시 값 테이블 또는 거기에 거주시킬 데이터는 시스템의 부팅 또는 재부팅시 RAM의 재거주를 위해 액세스될 수 있는 포맷으로 버퍼 유닛을 저장하는 NCM 상에 또는 다른 곳에와 같이 영속적 저장소 내 상주할 수 있다. 업데이트될 때, RAM 내 테이블에 그리고 또한 영속적 메모리에 업데이트가 이루어진다.
일부 실시예에 있어서는, 어느 때라도, 테이블 내에서, 주어진 저장된 해시 값은 불과 하나의 버퍼 유닛과 활성 연관되어 있다. 버퍼 유닛이 해시 값 테이블 내에 있고 저장된 해시 값과 연관되어 있을 때, 버퍼 유닛은 "저장된 버퍼 유닛"이다. 해시 값 테이블 내 특정 해시 값과 연관되는 버퍼 유닛은 시간에 걸쳐 변경될 수 있고, 아래에 설명되는 바와 같은 상충의 경우에, 해시 값 알고리즘에 의해 결정된 가장 최근 버퍼 유닛, 해시 값 연관은, 여기에서 설명되는 방법의 적용 후에, 테이블 내 활성 연관일 것이다. 구절 "활성 연관(active association)" 및 "활성 연관된"은 테이블이 발생된 해시 값에 대한 비교를 위해 추출될 데이터를 제공하거나, 구성하거나 나타내는 조건을 지칭한다. 활성 연관은 해시 값 알고리즘의 적용시 해시 값의 발생에 이른 버퍼 유닛을 가장 최근에 수신한 NCM 상의 진정 논리적 블록 주소를 포함할 수 있다. 해시 값이 저장된 해시 값이 되고 나면, 그것은 테이블 내 남아있을 것이다; 그렇지만, 시간에 걸쳐, 그것이 연관되는 버퍼 유닛은 변경될 수 있다. 그리하여, 저장된 버퍼 유닛은 저장된 버퍼 유닛으로 남아있지 않을 수 있다.
당업자는 소정 실시예에서는, 해시 값 테이블을 사용하기보다는, 멀티맵을 사용할 수 있음을 인식할 것이다. 멀티맵을 사용할 때, 해시 값은 하나보다 많은 버퍼 유닛과 연관될 수 있고 그리하여 이전에 저장된 해시 값은 상충이 있을 때 제거될 필요가 없다.
해시 값 알고리즘이 복수의 다른 버퍼 유닛에 대해 동일한 해시 값을 발생시킬 수 있기 때문에, 테이블 내에서 이들 발생을 어떻게 다룰지 결정하는 프로시저가 필요로 된다. 저장된 해시 값과 동일한 해시 값이 사용자 공급된 버퍼 유닛에 대해 발생되었을 때, 3개의 프로시저 중 하나가 사용될 수 있다: (1) 기존 연관이 새로운 연관으로 겹쳐 기록될 수 있다; (2) 기존 연관이 삭제될 수 있고, 새로운 엔트리가 예를 들어 새로운 위치에 테이블 내 이루어질 수 있다; 또는 (3) 기존 연관이 비활성 파일로 이동되거나 아니면 그것이 비활성임을 나타내도록 수정될 수 있지만, 정보는, 예를 들어, 아카이브 파일 내 보유되고 적절히 설계된 컴퓨터 프로그램을 통해 추후 시간에 액세스될 수 있다. 조건 (1) 또는 (3)은 연관을 비활성으로 만드는 예이다. 당업자는, NCM으로부터의 데이터 검색이 해시 값 테이블로의 액세스를 요구하지 않기 때문에, 어떠한 아카이빙된 정보도 본 발명의 다양한 실시예의 구현에 필요로 되지 않음을 인식할 것이다. 그렇지만, 이러한 정보는 여러 다른 사용자 공급된 버퍼 유닛 또는 단편화된 사용자 공급된 버퍼 유닛에 대해 동일한 해시 값이 발생되는 정도를 검토하도록 사용될 수 있다.
데이터의 고도의 반복적 본성에 기인하여, 해시 값 알고리즘의 적용의 결과로서 상충하는 해시 값이 발생될 확률은 낮다. 예를 들어, SHA-1의 160 비트 해시는 1024에서 1의 여러 다른 패턴에 대한 동일한 해시 값을 랜덤 발생시킬 확률을 갖는다. 본 발명은 중복 버퍼 유닛이 저장되게 되는 한도를 최소화하기 위해 해시 값 알고리즘의 이러한 특징을 사용한다. 이것을 성취하기 위해, 그 방법은 다음을 질의하는 2개의 모듈 또는 2개의 별개의 컴퓨터 프로그램 알고리즘의 할당에 대비한다: (1) 새롭게 발생된 해시 값이 저장된 버퍼 유닛이 있는 저장된 해시 값과 동일한가; 그리고 그러하다면, (2) 그 해시 값에 대한 저장된 버퍼 유닛이 사용자 공급된 버퍼 유닛과 다르게 되도록 상충이 있는가?
위에서 논의된 질의의 결과는 무슨 새로운 정보가 NCM 상에 저장되게 되는지 및 무슨 상황 하에서인지는 물론 무엇이 중개자에 기록되는지 결정한다. 가장 단순한 경우에 있어서, 본 발명의 프로토콜은 해시 값의 중복이 없다고 결정한다. 해시 값 중복의 부재는 사용자 공급된 버퍼 유닛이 해시 값 테이블 내 있지 않음을 나타낸다. 결과적으로, 버퍼 유닛은 NCM의 새로운 블록 내 기록되고, 사용자가 추후에는 동일 버퍼 유닛을 다른 데이터 스트림 또는 데이터 패킷의 일부분으로서 제출하여야 하도록 해시 값 테이블에 업데이트가 이루어지거나 또는 추후 동일 데이터 스트림 내에서 방법론은 그것이 NCM 상에 이미 저장되어 있는 데이터와 동일함을 검출할 수 있을 것이다. 해시 값 테이블은 또한 버퍼 유닛이 기록되는 진정 LBA를 포함하도록 업데이트된다. 해시 값 테이블에 발생된 해시 값 및 사용자 공급된 버퍼 유닛을 기록할 때, 그것들은, 각각, 저장된 해시 값 및 저장된 버퍼 유닛이 된다.
방법론이 해시 값의 중복이 있다고 결정하면, 그때는 제2 질의가 이루어진다. 위에서 언급된 바와 같이, 이러한 제2 질의에 있어서, 방법은 사용자 공급된 버퍼 유닛에 대한 알고리즘의 적용이 이미 저장된 버퍼 유닛이 연관되어 있는 동일 해시 값의 산출에, 2개의 버퍼 유닛이 다르더라도, 이르게 되는지 고려한다.
당업자는 쉽게 인식할 바와 같이, 이러한 2단 접근법은 중복 데이터가 NCM 상에 저장되는 횟수를 감축하기 위한 방법에 효율성을 도입한다. 제1 단계에 있어서는, 해시 값이 비교된다. 이들 값은 버퍼 유닛보다 더 작고, 예를 들어, 버퍼 유닛보다 적어도 2x, 적어도 10x, 적어도 100x 또는 적어도 1000x 더 작고, 그리하여, 버퍼 유닛 자체보다 비교하기가 더 용이하다. 그들 값이 해시 값의 중복을 나타내는 경우에만, 시스템은 실제 버퍼 유닛을 비교한다. 그리하여, 버퍼 유닛을 서로에 대비하여 체크하기 이전에 해시 값 테이블 내 이미 있지 않은 해시 값과 연관되는 버퍼 유닛을 뽑아 버림으로써, 시스템은 효율적이다.
질의의 제2 단에 있어서는, 2개의 버퍼 유닛을 서로에 비교한다. 상충이 없으면, 즉, (저장된 및 현재의 사용자 공급된) 버퍼 유닛의 진정 아이덴티티가 있으면; 그때는 NCM에 기록하는 부가적 단계가 필요로 되지 않는다. 대신에, 버퍼 유닛이 이전에 저장되었던 블록의 중개자에 대한 표기법이 이루어지기만 하면 된다. 그리하여, 이들 버퍼 유닛은 다시 기록될 필요가 없을 것이기 때문에 효율이 증가된다. 그것이 속하는 파일을 추적하기 위해, 중개자 내에서, LBA는 사용자 인지된 LBA 및 선택사항으로서는 사용자 발생된 파일 이름 또는 파일 시스템과 연관된다.
질의의 제2 단의 다른 결과는 (저장된 버퍼 유닛과 연관된 바와 같은) 저장된 해시 값이 발생된 해시 값과 동일하지만 저장된 버퍼 유닛과 사용자 공급된 버퍼 유닛이 다르기 때문에 상충이 있을 때 일어난다. 이들 경우에 있어서, 본 발명의 방법은 사용자 공급된 버퍼 유닛이 NCM에 기록될 필요가 있다고 여긴다. 그것들은 또한 해시 값 테이블이 그것은 공통 해시 값을 사용자 공급된 버퍼 유닛과 연관시키도록 변경되게 야기한다. 공통 해시 값의 이전 연관은 비활성으로 되거나 삭제된다. 결과적으로, 중복 버퍼 유닛을 검색하는 후속 질의에서는, 가장 최근 저장된 해시 값, 버퍼 유닛 연관만이 고려된다. 이들 방법에 있어서는, 상충의 경우에 해시 값의 어떠한 확장도 필요로 되지 않는다.
다양한 실시예에 있어서, 각각의 LBAx에 대하여, 방법은 중개자가 LBAx와 LBAy를 저장하게 야기하며, 여기서 LBAy는 사용자 공급된 버퍼 유닛과 똑같은 버퍼 유닛의 실제 위치를 지칭한다. LBAx는 사용자가 버퍼 유닛이 저장된다고 믿는 곳이고 LBAy는 버퍼 유닛이 실제로 저장되는 곳이기 때문에, LBAy가 또한 해시 값 테이블 내 저장된다. 그렇지만, LBAx는 해시 값 테이블로부터 생략될 수 있고, 일부 실시예에서는 중개자 상에만 존재한다. 선택사항으로서, 중개자는 또한 사용자 생성된 파일 이름 및/또는 파일 식별자를 저장하고 그 파일 이름을 하나 이상의 사용자 인지된 논리적 블록 주소와 연관시킨다.
위에서 언급된 바와 같이, 대부분의 버퍼 유닛은 NCM 상에 단 한 번 저장된다. 그리하여, 복수의 사용자 파일에 대해, 사용자 인지된 논리적 블록 주소와 진정 논리적 블록 주소의 상관이 있고, 여러 다른 사용자 파일에 대응하는 (중개자 상의) 복수의 상관 내에는, 동일한 진정 논리적 블록 주소이지만 다른 사용자 인지된 논리적 블록 주소가 하나 이상 있다. 실제 사용자 파일 내 가장 고도의 반복성 버퍼 유닛은 가장 많은 수의 여러 다른 상관에서 나타날 것이다. 부가적으로, 사용자는 버퍼를 공급하고 그것이 NCM 상의 연이은 사이트에 저장되고 있다고 믿을 수 있기 때문에, 그것은 그 버퍼와 단일 LBAx의 연관을 기록하고 데이터를 LBAx에서 시작하는 연속적 LBA에서 저장되어 있는 것으로 볼 수 있다. 그렇지만, 저장소가 실제로는 버퍼 유닛 레벨 상에 있고 빈번하게는 주어진 버퍼에 대해 연이은 위치에서 저장되지 않을 것이기 때문에, 중개자는 단일 사용자 인지된 LBA 또는 (암시적으로 또는 명시적으로) 복수의 연이은 LBA를 연이어 있지 않은 복수의 진정 LBA와 저장할 수 있다. 예를 들어, 사용자는 사이즈 4096B의 버퍼 및 10의 사용자 인지된 LBA를 공급할 수 있다. 버퍼 유닛이 사이즈가 512B이면, 사용자는 암시적으로는 그 데이터가 LBA 10에서 시작하여 8개의 연이은 저장 사이트에 있다고 믿을 수 있다. 그렇지만, 실제로, 그것들은 LBA4, LBA3, LBA2, LBA2, LBA3, LBA3, LBA9, LBA4에 있을 수 있고, 중개자는 그들 위치를 가리킬 것이다. 주목할만하게는, 사용자가 보내는 버퍼 내 데이터에 대응하는 중복 버퍼 유닛 전부는 아니더라도 대부분에 대해, 중개자는 NCM 상의 동일 LBA를 가리킬 것이다. 그리하여, 중개자 상에, 일부 실시예에서는 사용자 인지된 위치 또는 사용자로부터 인지된 바와 같은 위치와 데이터의 모든 진정 위치(예를 들어, 모든 진정 LBA)의 상관이 있을 수 있다.
그리하여, 이들 방법에 있어서는, 해시 값 알고리즘이 동일 해시 값을 발생시킬 가능성을 고려하도록 확장을 사용하기보다는, 연관의 가장 최근 발생의 위 설명된 사용이 다음의 경우에만 NCM에 특정 공급된 버퍼 유닛을 기록한다: (i) 비교할만한 해시 값이 어느 버퍼 유닛과 연관된 바와 같은 해시 값 테이블 내 이미 있지 않을 때; 또는 (ii) 어느 주어진 해시 값에 대해, 상충이 있을 때. 이들 후자의 경우에 있어서는, 이전에 기록되었던 NCM으로의 동일 데이터의 기록이 일부 있을 수 있다. 그렇지만, 실용성의 사항으로서, 이것은 드물게만 일어날 것이다.
일부 실시예에 있어서, 버퍼 유닛의 NCM으로의 기록은 인접한다, 즉, 기록되게 되는 각각의 사용자 공급된 버퍼 유닛은 NCM 상에서 다음 인접하는 블록 내 기록될 수 있다. 그래서, NCM 상에서 데이터의 산란은 최소한이거나 없어서, 판독/기록 성능을 개선하고 저장 공간의 절약을 가능하게 한다. 부가적으로, 판독/기록 성능은 실제로는 NCM에 더 적게 기록되기 때문에 개선된다. 이것은 차례로 운영 체제의 캐시가 더 양호하게 기능 가능하게 한다. 더욱, NCM 상의 데이터가 해시 값 테이블 및 중개자의 부재 시 파일을 복원하도록 사용될 수 없기 때문에 데이터의 보안이 증가될 수 있다.
본 발명의 추가적 이점은 데이터가 어떻게 판독되는지 고려하면 인식될 수 있다. 사용자는 파일을 판독하도록 요청을 보낼 수 있다. 요청은 파일 식별자 및 하나 이상의 사용자 인지된 논리적 블록 주소와 관련 있는 정보를 포함한다. 관련 있는 중개자에 액세스함으로써, 실제의 논리적 블록 주소(들)를 결정하고 관련 있는 데이터를 검색할 수 있다. 주목할만하게는, 기록하는 프로토콜과 대조적으로, 검색 및 판독 단계 동안 해시 값 알고리즘 또는 테이블이 필요로 되지 않는다. 대신에, 판독기는 중개자가 가리키는 NCM 상의 사이트로부터 데이터를 검색하고, 중개자는 하나 이상의 파일에 대해 복수 회 하나 이상의 버퍼 유닛을 가리킬 수 있다.
본 발명은 또한 데이터의 효율적 저장을 위한 시스템을 제공한다. 이들 시스템은, (a) 영속적 메모리; (b) 중앙 처리 장치("CPU"); (c) 비-캐시 기록 매체; 및 (d) 중개자를 포함할 수 있다. 컴포넌트의 각각은 그들 지정된 기능을 수행하기 위해 하나 이상의 다른 컴포넌트에 동작가능하게 결합될 수 있다.
영속적 메모리는 해시 값 테이블을 포함하고 아래에 설명되는 비-캐시 기록 매체의 일부분이거나 그와는 구별되는 것일 수 있다. 해시 값 테이블은 복수의 저장된 해시 값의 각각을 서로 다른 저장된 버퍼 유닛과 연관시킨다. 해시 값은 버퍼 유닛에 해시 값 알고리즘의 적용에 의해 결정된다. 각각의 저장된 버퍼는 또한 진정 논리적 블록 주소와 연관된다. 당업자는 해시 값 테이블이, 하나의 테이블 내, 3개 유형의 데이터: 저장된 해시 값, 저장된 버퍼 유닛 및 진정 논리적 블록 주소 간 연관을 포함하고 있을 수 있음을 인식할 것이다. 대안으로, 해시 값 테이블은, 하나의 테이블 내, 처음 2개 유형의 데이터만의 연관을 포함하고 있을 수 있고, 다른 하나의 테이블 내, 동일하거나 다른 메모리 디바이스(예를 들어, 중개자)에, 진정 LBA와 저장된 버퍼 유닛을 상관시키는 테이블이 저장되어 있을 수 있다. 영속적 메모리는 CPU 내 저장되거나 CPU에 동작가능하게 결합될 수 있다.
중앙 처리 장치는 하드웨어 또는 하드웨어와 소프트웨어의 조합으로 이루어진다. CPU는 영속적 메모리에 액세스하고 그리고 해시 값 테이블을 검색하도록 구성된다. CPU는 또한, 국한되는 것은 아니지만, NCM 및 중개자에 기록하는 것을 포함하는, 본 발명의 방법 중 하나 이상을 실행하도록 구성된다. 더욱, CPU는 무선 또는 유선 네트워크를 통해, 예를 들어, 서버를 통해 하나 이상의 원격 사용자와 통신하도록 구성된다.
NCM은 블록 레벨 저장을 위해 구성된다. NCM은 CPU의 일부분이거나 그와는 별개일 수 있다.
위 설명된 시스템의 일부 실시예에 있어서, 중개자, 해시 값 테이블, CPU 및 비-캐시 기록 매체의 각각은 서로로부터 원격에 저장된다. 그것들은 동일한 하우징 내 있는 별개의 구조에 또는 다른 하우징에 있을 수 있다.
위에서 언급된 바와 같이, (서버를 통해 제어될 수 있는) 본 발명의 시스템은, 중개자를 참고한 후에 그리고 해시 값 테이블에 액세스하지 않고, 파일을 재생성하고 데이터를 사용자에 송신할 수 있다. 그리하여, 일 실시예에 있어서, 본 발명의 시스템은 검색 모듈을 포함하되, 검색 모듈은 해시 값 테이블에 액세스함이 없이 중개자에 액세스하고 중개자에 의해 지시된 순서로 복수의 버퍼 유닛을 재조합함으로써 데이터 파일을 복원하도록 구성되며, 중개자에 의해 지시된 순서는 비-캐시 기록 매체 상의 버퍼 유닛의 순서와 다르다.
본 발명의 다양한 방법은 매니저에 의해 자동으로 제어될 수 있다. 매니저는 하나 이상의 모듈을 포함하고 로컬 컴퓨터 상에, 네트워크 상에 또는 클라우드 내 또는 예를 들어 CPU 내 상주할 수 있다. 매니저는 정보의 수신을 조정하거나 또는 그 자체를 수신하거나 그리고 이러한 정보를 중개자에 전송하거나, 또는 중개자에 의해 직접 정보의 수신을 제어하거나 하도록 구성될 수 있다. 그리하여, 그 방법은 개시자로부터의 정보가 본 발명의 중복-제거를 위한 매니저를 통해 그리고 중개자로 또는 매니저의 지시로 시스템의 다른 컴포넌트로 흘러가지만 그것이 매니저를 통해 흐르지는 않게 되도록 설계될 수 있다.
일부 실시예에 있어서, 매니저는 하나 또는 복수의 중개자의 활동을 제어, 통신 및 조정할 수 있다. 각각의 중개자에 대해, 매니저는 파라미터 세트를 수신한다(또는 그 수신을 조정한다). 이들 파라미터는 파일 시스템 정보, 부팅가능성 정보 및 파티셔닝 정보 중 하나, 2개 또는 3개 전부로 이루어지거나, 본질적으로는 그것으로 이루어지거나, 그것을 포함할 수 있다.
중개자는, 예를 들어, (a) 제1 트랙 세트; (b) 제2 트랙 세트; (c) 제3 트랙 세트; 및 (d) 제4 트랙 세트를 포함할 수 있다. 매니저는 파일 시스템 정보, 부팅가능성 정보 및 파티셔닝 정보가, 예약 1 또는 R1이라고 지칭될 수 있는, 중개자 상의 제1 트랙 세트 내 저장되게 야기한다. 이러한 정보는, 예약 블록이 어떻게 사용되게 되는지 지시할, 파일 시스템 정보의 식별을 포함할 수 있다. 예를 들어, NTFS를 사용할 때, 섹터 1-2는 MBR(master boot record)에 대한 것일 수 있고 섹터 3는 $MFT에 대한 것일 수 있다. 선택사항으로서, 이들 트랙은, 예약 2 또는 R2라고 지칭될 수 있는, 제2 트랙 세트 내 복사될 수 있다.
이들 실시예에 있어서, 매니저는 또한 선행하는 단락에서 설명된 파라미터에 부가하여 메타데이터를 수신할 수 있다. 메타데이터는 중개자 상의 제3 트랙 세트 내 저장될 수 있다. 매니저가 파라미터 및 메타데이터를 수신하는 시각에 또는 추후 시각에, 그것은 또한 비-캐시 매체 상의 저장을 위해 하나 이상의 파일을 수신할 수 있다. 파일 이름 및 하나 이상의 사용자 인지된 LBA를 갖는 각각의 파일이 수신된다. 파일 이름은 파일을 송신하는 호스트에 의해 발생되고 호스트의 파일 시스템에 의해 정의될 수 있다. 예를 들어 SAN 또는 NAS 또는 그 조합이거나 그 일부분일 수 있는 매니저는, 파일 이름을 갖는 파일의 수신시에, 저장을 위해 여기에서 설명된 단계를 자동으로 실행할 수 있으며, 진정 및 사용자 인지된 LBA를 제4 트랙 세트의 비트 필드 내 저장하는 것을 포함한다.
일부 실시예에 있어서는, 원시 데이터의 수신시에, 본 발명의 방법은 수신의 확인이 호스트에 자동으로 반환되게 야기할 수 있다. 하나의 QoS(서비스 품질) 프로토콜에 있어서, 데이터 파일은 I/O를 통해 수신되고 즉시 L1 캐시에 보내진다. 수신시에, 확인응답이 다시 I/O를 통해 L1 캐시로부터 보내진다. L1 캐시로부터, 데이터 파일은 L2 캐시에 보내질 수 있으며, 그러면 다시 L1 캐시에 확인응답을 송신한다. L2 캐시는 또한, 본 발명의 중복-제거 프로토콜을 거친 후에, 본 발명의 실시예 중 하나 이상을 실행하는 시스템 또는 시스템의 일부에 데이터 파일을 보낼 수 있고, 중개자에 기록하거나 일부 경우에서는 장기간 저장을 위해 비-캐시 매체(NCM)에 기록한다. 차례로 NCM은 다시 L2 캐시에 확인응답을 보낼 수 있다.
일부 실시예에 있어서, 중개자는 L1 캐시 내 힙(동적으로 할당된 메모리) 내 상주하거나 그에 동작가능하게 결합될 수 있다. 대안으로, 중개자는 카드 내 상주할 수 있거나, 또는 L2 캐시의 일부분이거나 그에 동작가능하게 결합될 수 있거나 솔리드 스테이트 드라이브 또는 저장을 위한 어느 블록 디바이스 상에 있을 수 있다.
당업자가 알고 있는 바와 같이, 중개자를 L1 대 L2에 배치한다는 결정은 저장된 데이터의 사용의 빈도와 같은 인자에 의해 충격을 받을 것이다. 그리하여, L1 캐시는 최종 사용자 또는 시스템에 의해 빈번하게 사용되는 데이터를 저장하도록 사용되는 한편, L2 캐시는 다소 빈번하게 액세스되는 데이터에 대해 사용될 수 있다.
다른 하나의 QoS 프로토콜에 있어서, I/O를 통해, 데이터 파일은 L1 캐시에 의해 수신된다. 데이터 파일은 L1 캐시로부터 NCM 및 L2 캐시 둘 다에 전송된다. L2 캐시 및 NCM의 각각은 L1 캐시에 확인응답을 보낸다. L2 캐시 및 NCM 중 하나 또는 둘 다로부터 확인응답을 수신하기 전에든 또는 그 후에든, L1 캐시는 I/O를 통해 확인응답을 보낸다.
위에서 언급된 바와 같이, 중개자는 제1 예약 트랙 세트(R1) 및 제2 예약 트랙 세트(R2)를 포함할 수 있다. 일부 실시예에 있어서, 제2 예약 트랙 세트(R2)는 제1 예약 트랙 세트(R1)의 사본이다. 부가적으로, 일부 실시예에 있어서는, 제1 예약 트랙 세트(R1) 내 오류에 대해 체크하도록 제2 예약 트랙 세트(R2)를 사용할 수 있다.
R1은 호스트 개시를 위한 중심 포인트로서 기능하도록 구성될 수 있다. 그리하여, 본 발명의 중복-제거 방법 중 어느 하나 이전에, 호스트는 R1에 보낼 파라미터를 선택할 수 있다. 중개자는 이러한 정보를 호스트로부터 직접적으로 또는 매니저를 통해 간접적으로 수신할 수 있다. 바람직하게는, R2는 호스트에 절대 노출되지 않는다. 그리하여, 중개자 자신 또는 매니저만이 정보가 R2 내 저장되게 야기할 수 있다. R1 및 R2의 각각은, 예를 들어, 16개의 섹터를 포함하고 있고 호스트 수정자와 같은 실제 데이터로 채워질 수 있다. 관용적으로, 번호 매김은 0에서 시작할 수 있다. 그리하여, R1은, 예를 들어, 섹터(또는 트랙) 0 - 15를 포함하고 있을 수 있고 R2는 섹터(또는 트랙) 16 - 31를 포함하고 있을 수 있다. 그렇지만, 중개자는 16개 트랙의 초기 사이즈 너머로 R1 및 R2의 각각의 확장에 대해 허용하도록 구성될 수 있다.
일부 실시예에 있어서, R1은 고유 예약 섹터 정보 및 파티션 정보를 포함하고 있다. 파티션 정보 내, 파일 시스템 정보를 저장할 수 있다.
비-한정적 예로서 그리고 당업자는 알고 있는 바와 같이, NFTS 파일 시스템으로 볼륨을 포매팅할 때, $MFT(마스터 파일 테이블), $Bitmap, $Log 파일 및 다른 것들과 같은 메타데이터 파일을 생성한다. 이러한 메타데이터는 NFTS 볼륨 상의 파일 및 폴더 전부에 대한 정보를 포함하고 있다. NTFS 볼륨 상의 제1 정보는 파티션 부트 섹터($Boot 메타데이터 파일)이고, 섹터 0에 위치하고 있을 수 있다. 이러한 파일은 기본 NTFS 볼륨 정보 및 주 메타데이터 파일 $MFT의 위치를 기술할 수 있다.
포매팅 프로그램은 $Boot 메타데이터 파일에 대해 처음 16개의 섹터를 할당한다. 제1 섹터는 부트스트랩 코드를 갖는 부트 섹터이고, 다음의 15개 섹터는 부트 섹터의 IPL(초기 프로그램 적재기)이다.
R1 및 R2의 트랙에 부가하여, 중개자는 부가적 메타데이터를 저장할 수 있다. 이러한 메타데이터는, 예를 들어, 디바이스가 실제로 이용가능한 것보다 더 많은 물리적 자원을 갖는 것처럼 보일 수 있게 하는 가상화 기술에 대응하는, 씬 프로비저닝 전략의 실행을 가능하게 하는 정보에 대응할 수 있고, 그것은, 예를 들어, 트랙 32 - 39일 것인, R2 후 8개 트랙 내 포함되어 있을 수 있다. 메타데이터는 또한 LUN QoS, VM 및 WORM과 같은 특징에 대해 제공할 수 있다.
마지막으로, 중개자는 또한 비트 필드를 포함할 수 있다. 비트 필드는 데이터가 저장 매체 내 물리적으로 저장되어 있는 곳을 나타내는 정보를 포함하고 있고, 메타데이터가 트랙 32 - 39 내 위치하고 있으면, 비트 필드의 섹터 번호는 트랙 40에서 시작한다. 데이터의 위치와 호스트의 파일 이름 간 상관이 저장되는 것은 중개자의 비트 필드 내이다. 그리하여, 그것은 섹터 맵으로 이루어지거나, 본질적으로는 그것으로 이루어지거나, 그것을 포함할 수 있다.
실무 사항으로서, 중개자는 버퍼 유닛 데이터가 저장되는 디스크 또는 기록 매체 상에 위치하지 않는 것이 바람직하다. 부가적으로, 중개자는 대응하는 디스크 또는 기록 매체의 총 메모리의 약 0.1 - 0.2%만을 필요로 하는 것이 바람직하다.
추가적 예시의 목적으로, 도면을 참조할 수 있다. 도 1은 본 발명의 방법의 표현으로서, 그 명령어는 비-일시적 기록 매체 내 영속적 저장소에 저장될 수 있다. 예시적 목적으로, 단계(130)로부터 종료까지의 도 1에 도시된 방법은 단일 사용자 공급된 버퍼 유닛에 대해 도시되어 있다; 그렇지만, 그 방법은 복수의 사용자 공급된 버퍼 유닛으로 단편화되는 주어진 버퍼에 대해 복수 회 반복될 수 있다. 사용자 인지된 LBA와 진정 LBA의 연관이 중개자에 기록될 때, 그들 연관은 함께 그룹화되고 특정 파일에 대응하는 것으로 표시된다. 당업자는 인식할 바와 같이, 사용자 공급된 버퍼가 사용자 공급된 버퍼 유닛과 동일한 사이즈이면, 그것은 단편화될 필요가 없고 본 발명의 다양한 실시예는 이러한 조건에 대해 체크하도록 구성될 수 있다. 본 발명의 다양한 실시예는 또한 모든 버퍼가 동등한 사이즈의 버퍼 유닛으로 분할될 수 있음을 확인해 주고, 아니라면, 마지막 버퍼 유닛이었을 것 또는 버퍼의 비트 스트링의 단부에 0을 부가하여 그것들 전부를 동일한 사이즈로 만들도록 구성될 수 있다.
도면이 보여주는 바와 같이, 정보를 저장 매체에 기록하라는 명령어가 수신될 수 있다. 이들 명령어는 사용자 인지된 논리적 블록 주소(LBA) 또는 (LBAx) 및 사용자 공급된 버퍼 유닛의 형태일 수 있다(110).
위에서 설명된 바와 같이, 사용자 인지된 LBA는 사용자가 그 또는 그녀의 데이터가 저장될 것이라고 믿는 위치이다. 사용자 공급된 버퍼 유닛 내 데이터는 전형적으로는 그것이 저장될 디바이스 상의 블록의 사이즈가 될 것이다. 사용자가 디바이스 상의 블록 사이즈보다 더 큰 데이터를 제출하면, 사용자가 제출하는 데이터는 그것이 각각 블록의 사이즈인 복수의 버퍼 유닛을 포함하고 있도록 전-처리될 수 있다. 버퍼 유닛이 블록 사이즈보다 더 작으면, 그때 컴퓨터 프로그램 제품은 그것이 블록의 사이즈일 때까지 버퍼 유닛의 일단에 모든 영을 부가할 수 있다.
수신된 명령어는 그렇게 일 형태이거나 또는 (LBA, buffer)에 의해 표현될 수 있는 형태로 변환된다. 사용자 공급된 버퍼 유닛에 대해, 컴퓨터 프로그램 제품은, 필요하다면, 수신된 대로의 데이터를 단편화하고 해시 값을 계산한다(120). 복수의 명령어가 수신될 때, 해시 값은 각각의 버퍼 유닛에 대해 계산된다.
알고리즘이 해시 값을 발생시킨 후에, 그것은 해시 값이 해시 값 테이블 내 이미 존재하는 저장된 해시 값의 중복인지 질의한다(130). 테이블이 발생된 해시 값을 포함하고 있지 않으면, 알고리즘은 버퍼 유닛이 NCM에 새로운 것이라고 결론짓고 이전에 사용되지 않았던 NCM 내 블록에 버퍼 유닛을 기록한다(140). 알고리즘은 또한 메모리 내 저장되어 있는 해시 값 테이블이 그 발생된 해시 값과 NCM에 새롭게 기록된 이러한 사용자 발생된 버퍼 유닛의 연관을 포함하도록 업데이트되게 야기한다(150). 이러한 발생된 해시 값은 저장된 해시 값이 되고, 사용자 공급된 버퍼 유닛은 저장된 버퍼 유닛이 된다. 일부 실시예에 있어서, 해시 값 테이블은 또한 버퍼 유닛이 NCM 상에 저장되는 진정 논리적 블록 주소를 식별시키는 반면, 다른 실시예에 있어서, 해시 값 테이블은 이러한 정보를 배제하고, 그것은 다른 곳에, 예를 들어, 중개자 상에 또는 다른 데이터 파일 내 저장된다.
해시 값 테이블이 업데이트된 후에, 사용자 인지된 LBA 및 사용자 공급된 버퍼 유닛이 저장되는 진정 LBA는 중개자 상에 저장되고 서로 상관된다(160).
도 1 내, 단계(130)로 다시 돌아가서, 질의가 새롭게 계산된 해시 값이 해시 값 테이블 내 저장된 해시 값의 중복이라는 결론을 초래하면, 그때 방법은 상충이 있는지 질문하는 프로토콜을 개시한다(170).
상충이 없으면, 그때 프로토콜은 중개자가, 사용자 인지된 위치와, 사용자 공급된 버퍼 유닛과 동일하고 NCM 상에 이미 있는 버퍼 유닛 데이터의 위치의 상관을 저장하게 야기한다(160). 그리하여, 이러한 중복 데이터에 대해, 새로운 정보는 NCM에 기록되지 않을 것이다.
상충이 있는지에 관한 질의(170)로 돌아가면, 응답이 예이어서, 동일한 해시 값이 여러 다른 버퍼 유닛에 배정됨을 의미할 때, 프로토콜은 NCM에 사용자 공급된 버퍼 유닛의 기록(140) 및 새롭게 기록된 버퍼 유닛과 활성 연관된 해시 값에 대한 메모리 내 해시 값 테이블의 업데이트하도록 호출한다. 부가적으로, 중개자는 사용자 인지된 위치(들)와 진정 위치(들)의 새로운 상관을 포함하고 있도록 업데이트될 것이다.
도 2는 이 단계를 더 예시한다. 도 1과 유사하게 상충 결정 프로토콜에 진입시(270), 예 출력이 있으면, 그때 버퍼 유닛의 고유 데이터는 NCM 상의 새로운 블록에 기록된다(240). 새로운 블록에 기록한 다음에, 알고리즘은 해시 값 테이블을 업데이트한다.
해시 값 테이블을 업데이트할 때, 그 방법은 버퍼 유닛과 이전에 저장된 해시 값을 연관해제시키고, 저장된 해시 값을 더 최근 수신된 버퍼 유닛과 연관시키고(251), 이전에 저장된 버퍼 유닛과 해시 값의 연관을 제거 또는 비활성화한다(256). 해시 값 테이블이 업데이트된 후에, 프로토콜은 가장 최근에 수신된 버퍼 유닛의 진정 논리적 블록 주소를 중개자에 기록하고 그것을 사용자 인지된 논리적 블록 주소와 연관시킨다(260).
도 3은 명령어를 판독하는 것을 표현한다. 시스템은 블록을 판독하라는, 즉, (LBA, buffer)의 정보를 검색하라는 명령어를 수신할 수 있다(310). 요청은 하나 이상의 사용자 인지된 LBA와 사용자의 시스템 연관인, 파일 이름에 의한, 파일에 대한 요청의 형태로 올 수 있다.
프로토콜은 중개자 내 상관 테이블의 액세스 및 버퍼 또는 그 일부에 대응하는 각각의 LBA 위치에서의 판독을 야기한다(320). 상관 테이블이 사용자 인지된 LBA를 진정 LBA와 상관시키기 때문에, LBA(또는 LBA들)에 대한 정보가 획득된 후에, 프로토콜은 특정된 실제의 LBA 또는 LBA들에서 NCM을 판독하고, 블록 정보를 검색하고 버퍼 파라미터를 채운다(330). 이러한 정보로, 시스템은 원시 데이터가 올바른 순서로 있게 하고 호스트의 운영 체제를 통해 요청된 파일의 복원을 위해 호스트에 그것을 보낼 수 있을 것이다.
주목할만하게는, 판독 단계 동안, 해시 값 알고리즘 또는 테이블에 액세스할 필요가 없다. 대신에, NCM 상에 저장된 대로의 LBA는 사용자가 호출하는 버퍼 유닛을 검색하도록 판독될 수 있다. 어느 하나 이상의 버퍼 유닛이 판독 시에 여전히 L1 또는 L2 어느 것 내에 있으면, 그때 그것들은 NCM으로부터보다는 적절한 캐시로부터 판독될 수 있다.
추가적 예로서, 다음 테이블을 고려할 수 있다:
Figure pct00001
다음을 가정한다: A≠G
G=L
B≠Q
B=J
E=O
C=P
A=R
사용자가 저장을 위한 데이터를 제출할 때, 사용자는 각각 버퍼 유닛의 사이즈, 예를 들어, 512 바이트인 18개의 블록에 대해 LBA가 1-18이라고 인지한다. 저장을 위한 데이터를 송신할 때, 사용자는 각각의 버퍼 유닛을 고유하다고 취급하여, 그것이 서로 다른 블록에 저장되고 있다고 상정한다.
해시 값 알고리즘의 적용 시, 여러 중복 해시 값이 발생된다. 알 수 있는 바와 같이, 해시 값 x는 버퍼 유닛 A, G, L 및 R에 적용되고; 해시 값 y는 버퍼 유닛 B, J 및 Q에 적용되고; 해시 값 z는 버퍼 유닛 C 및 P에 적용되고; 그리고 해시 값 b는 버퍼 유닛 E 및 O에 적용된다. 그렇지만, 데이터의 진정 중복은 A와 R, G와 L, B와 J, E와 O 그리고 C와 P 사이에 위치한다. 그리하여, 상충은 A와 G; G와 R; B와 Q; 그리고 Q와 J 사이에 일어난다.
제4 열이 보여주는 바와 같이, 데이터를 기록할 때, 진정 중복에 대해서는, 새로운 블록이 기록되지 않는다. 예를 들어, 사용자 인지된 LBA 2 및 10이 저장되는 곳의 실제 위치를 보라. 둘 다 블록 110에 저장된다. 제3 및 제4 열을 고려하면, 처음 7개의 사용자 공급된 버퍼 유닛이 분석된 후에, 발생된 처음 중복 해시 값(x 값)이 있음을 알 수 있다. 그렇지만, A≠G이기 때문에, G는 NCM 상의 블록에 기록되어야 한다. 이것이 일어난 후에, 추가적 상충 분석의 목적으로, 메모리 내 저장되는 해시 값 테이블 내에서, x는 G와 연관되고 A가 아니다.
제10 버퍼 유닛 J이 분석된 후에, 중복 해시 값 y이 발생되었음을 알 수 있다. 그렇지만, 버퍼 유닛이 동일하기 때문에, 상충은 없다. 그래서, 해시 값 테이블에 대한 업데이트가 필요로 되지 않고, 새로운 블록이 NCM에 기록될 필요가 없다. 대신에, 중개자는 진정 LBA 110를 가리키도록 그리고 그것을 사용자 인지된 LBA와 상관시키도록 업데이트될 것이다. 유사한 진정 중복은 제12 사용자 인지된 LBA가 분석되고, 제15 및 제16의 것이 분석된 후에 드러난다.
버퍼 유닛 Q이 분석된 후에, 해시 값 y이 발생된다. 그렇지만, Q≠B이기 때문에, 상충이 있다. 결과적으로, 새로운 블록이 LBA 121에 기록되고, 해시 값 테이블은 y를 Q와 연관시키도록 업데이트되고 더 이상 y를 (J와 동일한) B와 연관시키지 않는다.
사용자 공급된 버퍼 유닛 R이 분석된 후에, 해시 값 x이 발생된다. R=A. 그렇지만, A는 해시 값 테이블 내 x와의 가장 최근 연관이 아니다. 결과적으로, 프로토콜은 그것이 R을 본 것이 처음인 것처럼 R을 취급하고: (1) 해시 값 테이블 내 새로운 상관을 저장하거나 오래된 것을 겹쳐 기록하여야 하고(그러나 그것은 메모리 내 저장된 연관을 회복시키지 않을 것임); 그리고 또한 (2) NCM 내 새로운 블록(여기에서는 블록 122)의 데이터를 저장하여야 한다. 그리하여, NCM은, 그 예에서는, 어떤 중복을 포함하고 있을 것이다.
테이블 1은 예시의 목적을 위한 것이며, 일부 실시예에서는, 제1 및 제4 열만이 중개자의 일부분이고 그것들은 해시 값 테이블의 일부분이 아니다. 중개자의 사이즈 요건은 작다. 예를 들어, 일부 실시예에 있어서, 중개자는 512 바이트 또는 4K의 사이즈의 NCM 상에 저장되는 각각의 버퍼 유닛에 대해 8 또는 16 바이트를 필요로 한다.
본 발명의 다양한 실시예를 통해, NCM의 물리적 저장 공간은 크게 감축될 수 있다. 예를 들어, 그것들은 적어도 50%, 적어도 100%, 적어도 200%, 적어도 500% 또는 적어도 1000%만큼 감축될 수 있다. 그리하여, 일부 실시예에 있어서, 필요로 되는 저장 공간량은 표준 조건 하에서 필요하였을 것보다 50 - 150배 더 적다. 예를 들어, 5 - 10 바이트만이 예를 들어 512 바이트 내지 4K의 버퍼 유닛에 대응하는 것의 중개자 상의 저장을 위해 필요로 될 것이다. 그리하여, 동일한 버퍼 유닛(또는 단편화된 버퍼 유닛)을 다수 회 저장할 필요성을 감축함으로써, 본 발명의 NCM의 일례인, 8GB USB 스틱은 1.53TB의 데이터에 대응하는 것을 저장하도록 사용될 수 있다.
본 발명의 방법, 시스템 및 컴퓨터 프로그램 제품은 저장되는 버퍼 유닛이, 단편화되더라도, 사용자로부터 수신되는 것들과 동일하다고 상정하여 설명되었다. 이들 실시예에 있어서, 그것들은 사용자가 인지하는 것과 다른 LBA에 그리고 사용자가 인지할 수 없는 순서로 저장되기 때문에, 정보를 검색하는데 중개자가 필요하고, 사용자는 그것 없이는 데이터를 검색할 수 없다. 그리하여, 그것은 어느 정도의 보안을 제공한다.
동일한 해시 값 알고리즘을 사용하는 여러 다른 사용자는 동일한 해시 값을 발생시킬 것이다. 그래서, 그들 해시 값 테이블은, NCM 상의 버퍼 유닛의 위치를 제외하고는, 유사할 것이다. 부가적으로, 중개자 내 상관 정보는 다를 것이다. 부가적 보안 레벨로서, 본 발명의 방법에 진입하기 이전에, 사용자는 데이터를 코딩하거나 변환하기를 바랄 수 있다. 이들 액션은 전처리라고 지칭될 수 있다.
일부 실시예에 있어서, 위에서 설명된 프로토콜 또는 시스템에 진입하기 이전에, 사용자의 데이터는 사이즈가 더 작은 그리고/또는 인코딩되는 데이터를 발생시키도록 비트 마커 테이블 또는 빈도 변환기 또는 다른 해시 값 알고리즘의 사용을 통해 우선 변환된다. 이들 기술을 수행하기 위한 방법, 시스템 및 컴퓨터 프로그램 제품은 2013년 2월 2일자로 출원된 미국 제13/756,921호(발명의 명칭: Bit Markers and Frequency Converters); 2013년 3월 12일자 출원 미국 제13/797,003호(발명의 명칭: Data Storage and Retrieval Mediation Systems and Methods for Using Same); 및 2013년 6월 3일자로 출원된 미국 제13/908,239호(발명의 명칭: Methods and Systems for Storing and Retrieving Data)에 개시되어 있다. 전술한 출원의 전체 개시는 참조에 의해 그들 전체가 편입되는 것이다. 이들 방법의 출력은 중복을 감축하도록 버퍼 유닛을 발생시키는데 사용될 수 있다.
이들 출원은 전처리 단계로서, 즉, 본 발명의 중복-제거 전략 이전에 본 발명 내 편입될 수 있는 방법론을 기술하고 있다. 이들 경우에 있어서, 버퍼 유닛은 데이터가 비트 마커 테이블 또는 빈도 변환기의 사용을 통해 변환되는 전처리 방법의 출력에 대응할 것이다.
그리하여, 일 실시예에 있어서, 이러한 전처리 단계는, (i) 복수의 디지털 2진 신호를 수신하는 단계로서, 디지털 2진 신호는 복수의 청크렛으로 조직되고, 각각의 청크렛은 N 비트 길이이되, N은 1보다 큰 정수이고 청크렛은 순서를 갖는 상기 수신하는 단계; (ii) 각각의 청크렛을 균일한 사이즈의 서브유닛으로 분할하고 복수의 마커의 세트를 형성하도록 X개의 마커의 세트로부터 각각의 서브유닛에 마커를 배정하는 단계로서, X는 서브유닛 내 비트의 여러 다른 조합의 수보다 작거나 같고, 똑같은 서브유닛에는 동일한 마커가 배정되고 적어도 하나의 마커는 서브유닛의 사이즈보다 작은 상기 배정하는 단계; 및 (iii) 마커를 버퍼 유닛으로서 사용하는 단계를 포함한다. 이러한 전처리 단계는 해시 값 테이블과 동일하거나 다른 영속적 메모리 내 저장될 수 있는 비트 마커 테이블을 사용한다. 데이터를 판독할 때, 이들 전처리 단계는 역순으로, 그리고 데이터가 NCM으로부터 검색되고 NCM 상의 버퍼 유닛이 중개자에 의해 지시된 방식으로 재조합된 후에, 수행될 수 있다. 마커를 버퍼 유닛으로서 사용할 때, 필요한 사이즈의 버퍼 유닛을 형성하기 위해 마커를 조합 또는 분할할 수 있다.
비트 마커 테이블은 전부 동일한 사이즈이거나 다른 사이즈인 마커를 포함하고 있을 수 있다. 다른 사이즈일 때, 사이즈는, 아래에 설명되는 바와 같이, 바이트 또는 비트 스트링의 예측된 빈도에 의해 결정될 수 있다.
추가적 예로서, 전처리 단계가 비트 마커 테이블을 사용할 때, 원시 데이터는 원시 데이터를 표현하는 일련의 마커로 번역된다. 원시 데이터는 호스트로부터 수신된 데이터에 대응하고, 그리하여, 예를 들어, JPEG, PDF, TIFF 또는 WORD 문서와 같은 하나 이상의 파일을 개별적으로 또는 일괄하여 형성하는 하나 이상의 청크렛일 수 있다.
청크렛은 순서대로 수신된다. 예를 들어, 파일은 직렬로 시스템에 의해 수신되는 10개의 청크렛을 포함하고 있을 수 있다. 대안으로, 주어진 파일에 대한 복수의 청크렛은 그것들이 호스트의 운영 체제에 의한 파일의 재생성 및 사용에 대해 허용하는 방식으로 그들이 서로 재-연관되는 것에 대해 허용하는 정보를 포함하고 있기로 하면 함께 또는 병렬로 송신될 수 있다. 그리하여, 일부 실시예에 있어서, 본 발명의 방법은 청크렛이 수신되는 동일한 순서로 마커를 발생시킨다. 따라서, 호스트가 파일의 검색에 대해 호출할 때, 대응하는 검색 방법론은 인코딩된 데이터를 동일한 순서로 다시 호출하고, 그것을 적합한 순서로 청크렛으로 디코딩할 것이다.
선택사항으로서, 인코딩하기 이전에, 시스템은 각각이 A 비트 길이인, 서브유닛이라고도 지칭되는, 비트의 그룹으로 청크렛을 분할할 수 있다. 시스템이 청크렛을 서브유닛으로 분할하면, 서브유닛은 비트 마커 테이블에 비교될 수 있다. 시스템이 청크렛을 서브유닛으로 분할하지 않으면, 그때 각각의 청크렛은 비트 마커 테이블에 비교될 수 있다.
비트 마커 테이블은 고유 비트 세트를 고유 마커와 상관시킨다. 일부 실시예에 있어서, 비트 마커 테이블은 서브유닛이 사용될 때에는 사이즈 A 또는 서브유닛이 사용되지 않을 때에는 사이즈 N의 각각의 고유 비트 스트링에 대한 마커를 포함하고 있다. 그리하여, 이러한 방법 하에서 컴퓨터 프로그램은 입력으로서 청크렛 세트를 수신할 수 있다. 그 후 그것은 동일한 사이즈인 그리고 각각 A 비트 길이인 Y개의 서브유닛으로 각각의 청크렛을 분할할 수 있으며, 여기서 A/8은 정수이다. 각각의 고유 A에 대해, 테이블 내 마커가 있을 수 있다.
그리하여, 자동화된 프로토콜을 통해, 청크렛의 수신 후에, 컴퓨터 프로그램 제품은 비트 마커 테이블이 액세스되게 야기한다. 따라서, 각각의 청크렛 또는 서브유닛은 입력으로서 역할할 수 있고, 각각의 비트 마커는 출력으로서 역할할 수 있고, 그로써 마커의 출력 세트를 형성한다. 마커의 출력 세트는 번역된, 코딩된 또는 인코딩된 데이터라고 지칭될 수 있다. 각각의 청크렛이 세분되지 않는 실시예에 있어서, 그때 각각의 청크렛은 하나의 마커를 수신할 것이다. 청크렛이 2개의 서브유닛으로 분할되면, 그것은 2개의 마커로 번역 또는 인코딩될 것이다. 그리하여, 컴퓨터 프로그램 제품은 각각의 청크렛에 대응하는 적어도 하나의 마커를 배정하기 위해 마커를 입력과 상관시키는 비트 마커 테이블을 사용한다. 컴퓨터 프로그램 제품은, 각각의 개개의 마커에 대응하는 서로 다른 출력이 발생되도록, 각각의 청크렛에 대응하는 마커 세트를 포함하고 있는 서로 다른 출력이 발생되도록, 또는 완전 파일에 대응하는 마커 세트를 포함하고 있는 서로 다른 출력이 발생되도록, 설계될 수 있다.
위에서 언급된 바와 같이, 비트 마커 테이블은 X개의 마커를 포함하고 있다. 일부 실시예에 있어서, X는, 방법이 청크렛을 서브유닛으로 분할하지 않으면, 길이 N의 청크렛 내 비트의 여러 다른 조합의 수와 같거나, 또는, 방법이 청크렛을 분할하면, 길이 A의 서브유닛 내 비트의 여러 다른 조합의 수와 같다. 문서 유형이 주어진 길이 서브유닛 또는 청크렛에 대한 비트 조합 전부보다 더 적게 갖는다고 알려져 있거나 예상되면, X(마커의 수)는 비트의 가능한 조합의 실제 수보다 더 작을 수 있다. 예를 들어, 일부 실시예에 있어서, 비트 마커 전부는 동일 사이즈이고, 비트 마커 테이블 내 비트 마커의 수는 사이즈 N 또는 A의 비트 스트링 내 비트 조합의 수와 같다. 다른 실시예에 있어서, 비트 마커 전부는 동일 사이즈이고, 비트 마커 테이블 내 비트 마커의 수는 사이즈 N 또는 A의 비트 스트링 내 비트 조합의 수의 90% 미만, 80% 미만, 70% 미만 또는 60% 미만이다.
예로서, 일부 실시예에 있어서, 각각의 청크렛에는 복수의 0 및/또는 1로 이루어진 코드(즉, 마커)가 배정된다. 다른 실시예에 있어서, 각각의 청크렛은 복수의 0 및 1로 이루어진 코드(즉, 마커)가 각각 배정되는 복수의 서브유닛으로 분할된다. 서브유닛은 길이 A에 의해 정의될 수 있으며, 여기서 N/A = Y이고 Y는 정수이다. 어느 서브유닛이 그 비트 수를 갖지 않으면, 예를 들어, 하나 이상의 서브유닛이 시스템이 입력으로서 수신하도록 구성되는 것보다 더 작은 비트 수를 가지면, 시스템은, 모든 서브유닛이 동일한 사이즈일 때까지, 비트, 예를 들어, 영을 부가할 수 있다. 이러한 단계는, 예를 들어, 청크렛이 서브유닛으로 분할된 후에 그리고 청크렛의 전부가 동일한 사이즈인지 알아보도록 우선 체크하는 것의 부재 시에 수행될 수 있다. 대안으로, 그리고 위에서 설명된 바와 같이, 그것은 청크렛을 서브유닛으로 분할하기 이전에 청크렛 레벨 상에서 수행될 수 있다.
위-설명이 시사하는 바와 같이, 알고리즘은 비트 스트링을 코딩된 데이터 세트로 번역하도록 구성될 수 있고, 알고리즘은 비트 스트링이 청크렛에든 청크렛의 서브유닛에든 대응하게 되도록 설계될 수 있다. 바람직하게는, 코딩된 데이터 세트는 호스트 또는 클라이언트로부터 수신된 대로의 파일보다 더 작다. 그렇지만, 코딩된 데이터 세트가 원래 데이터보다 더 작은지에 무관하게, 그것은 파일의 청크렛으로 다시 변환될 수 있다. 당업자가 인식할 바와 같이, 저장을 위해 호스트로부터 수신되는 데이터는 원시 데이터일 것이고, 그리하여 어느 문서 유형에라도 대응할 수 있다. 마커의 출력은 그것들이 위에서 설명된 바와 같이 해시 값 알고리즘으로의 입력을 위해 사용자 공급된 버퍼 유닛을 형성하도록 조합될 수 있게 하는 순서일 수 있다.
인코딩은 2개의 독립적 목적을 제공할 수 있다. 첫째로, 저장을 위해 데이터를 인코딩함으로써, 보안이 증가된다. 코드를 알고 있는(즉, 비트 마커 테이블로의 액세스를 갖는) 개체 또는 사람만이 그것을 디코딩하여 문서를 복원할 수 있을 것이다. 둘째로, 코드가 원래 문서보다 더 적은 비트를 사용하여 생성되면, 그때는 더 적은 저장 공간이 필요로 될 것이고 비용이 절약될 수 있다.
테이블 내 적어도 복수의 고유 비트 조합에 대하여, 바람직하게는 시스템이 청크렛을 서브유닛으로 분할하지 않으면 마커는 청크렛 길이 N보다 더 작거나 또는 시스템이 청크렛을 서브유닛으로 분할하면 서브유닛 길이 A보다 더 작다. 바람직하게는 시스템이 청크렛을 서브유닛으로 분할하지 않으면, 마커는 청크렛 길이 N보다 더 크지 않거나, 시스템이 청크렛을 서브유닛으로 분할하면, 마커는 서브유닛 길이 A보다 더 크지 않다. 일부 실시예에 있어서, 모든 마커는 N보다 더 작거나 또는 A보다 더 작다. 부가적으로, 일부 실시예에 있어서, 각각의 마커는 동일한 사이즈일 수도 있고 2개 이상의 마커가 다른 사이즈일 수도 있다.
위에서 설명된 바와 같이, 비트 마커 테이블은 비트 스트링에 대한 마커를 랜덤 또는 비-랜덤 방식으로 원시 데이터에 배정할 수 있고, 비트 마커는 균일 또는 비-균일 사이즈일 수 있다. 그렇지만, 위에서 설명된 바와 같은 비트 마커 테이블 대신에, 빈도 변환기를 사용할 수 있다. 그리하여, 문서 유형 또는 문서 세트 내 더 빈번하게 나타날 것으로 예상되는 원시 데이터에 더 작은 마커를 배정할 수 있다. 이러한 전략은 모든 정보의 대략 80%가 가장 빈번한 서브유닛의 대략 상위 20% 내 들어있다는 사실을 이용한다. 환언하면, 데이터에 대응하는 서브유닛은 매우 반복적이다.
일부 실시예에 있어서, 여러 다른 사이즈인 모든 복수의 변환된 비트 스트링마다, A 비트 길이인 제1 변환된 비트 스트링 및 B 비트 길이인 제2 변환된 비트 스트링이 있으며, 여기서 A < B이고, 제1 변환된 비트 스트링의 A 비트의 아이덴티티는 제2 변환된 비트 스트링의 처음 A 비트의 아이덴티티와 동일하지 않다. 비트 마커 테이블로부터든 빈도 변환기로부터든, 마커를 사용할 때, 그것들이 서로 다른 사이즈인 경우, 그것들은 시스템이 하나의 마커가 끝나고 다음 것이 시작되는 곳을 알고 있을 수 있도록 포매팅되어야 한다. 이것은, 예를 들어, 최소한의 마커 사이즈를 설정하고 최소한의 사이즈의 각각의 스트링이 테이블 또는 변환기 내에서 고유한지 질의하고, 아니라면, 부가적 비트(들)를 판독하고 각각의 부가적 비트에 대한 질의를 반복함으로써 스트링을 계속 늘리는 판독 분석을 통해 성취될 수 있다.
정보는 변환될 수 있고 출력 코드는 마커가 비트 그룹을 표현하는데 사용되기 때문에 입력보다 더 작도록 구성될 수 있다. 그리하여, 바람직하게는 테이블 내에서, 마커 중 적어도 하나, 복수, 적어도 50%, 적어도 60%, 적어도 70%, 적어도 80%, 적어도 90% 또는 적어도 95%는 서브유닛보다 사이즈가 더 작다. 그렇지만, 변환된 데이터가 호스트로부터 수신된 데이터와 동일하거나 더 큰 사이즈 또는 해시 함수 값 알고리즘으로부터 발생된 것과 동일한 사이즈이게 하는 것에 대한 기술적 장애는 없다.
다른 일 실시예에 의하면, 전처리 단계는, (i) (예를 들어 I/O 프로토콜을 사용하여) N 바이트의 I/O 스트림을 수신하는 단계; (ii) N 바이트를 X 바이트의 단편화된 유닛으로 단편화하는 단계; (iii) X 바이트의 각각의 단편화된 유닛에 대한 발생된 해시 함수 값을 형성하도록 X 바이트의 각각의 단편화된 유닛에 암호 해시 함수(값 알고리즘)를 적용하는 단계; (iv) 상관 파일로서, X 바이트의 복수의 저장된 시퀀스의 각각과 Y 비트의 저장된 해시 함수 값을 연관시키는 상관 파일에 액세스하고 그리고 (a) X 바이트의 단편화된 유닛에 대한 발생된 해시 함수 값이 상관 파일 내에 있으면, Y 비트의 저장된 해시 함수 값을 사용자 공급된 버퍼 유닛으로서 사용하고; 그리고 (b) X 바이트의 단편화된 유닛에 대한 발생된 해시 함수 값이 상관 파일 내에 있지 않으면, 그때는 상관 파일 내 X 바이트의 단편화된 유닛과 Y 비트의 발생된 해시 함수 값을 저장하고 발생된 해시 함수 값을 사용자 공급된 버퍼 유닛으로서 사용하는 단계를 포함한다.
이러한 전처리 해시 값 알고리즘을 사용할 때, 그들이 상충할 가능성을 다룰 필요가 있다. 가장 최근 해시 값 연관이 유지되고 저장되는 중복-제거를 위한 위 설명된 방법에 대한 대안으로서, 이러한 선택사항인 전처리 단계 동안, 상관 파일 내 저장된 해시 함수 값과 동일한 해시 함수 값이 발생되지만 그에 대해 사용자 공급된 청크렛이 저장된 청크렛과 다른 경우에, 방법은 거기서 다른 Z 비트가 저장된 해시 함수 값 및 발생된 해시 함수 값과 연관되게 야기하는 상충 해결 모듈을 사용할 수 있다. 이러한 기술은, 참조에 의해 그 개시 전체가 편입되는 것인, 2013년 6월 3일자 제출 미국 특허 출원 일련 번호 제13/908,239호에 설명되어 있다.
그리하여, 이러한 전처리 단계는 제1 해시 값 테이블을 사용할 수 있고, 상충이 존재하지 않는 모든 해시 함수 값에 대해서는, Z 비트가 연관되고 Z 비트가, 예를 들어, 8 내지 16개의 영의 균일 길이이다. 비-한정적 예로서, 그 방법은 체크섬이 이전에 저장된 체크섬과 상충하지 않을 때 8 바이트의 체크섬의 단부에 8개의 영을 연관시킬 수 있다. 상충의 식별시에(예를 들어, 서로 다른 단편화된 유닛이 동일한 체크섬과 연관되어 있을 때), 가장 새로운 체크섬에 다른 Z 값이 배정될 수 있다. 그리하여, 상관 파일 내 저장된 바와 같은 Z 값이 00000000이면, 제1 상충하는 체크섬에 대한 Z 값은 00000001일 수 있고 또 다른 상충하는 체크섬은 00000010이어야 한다. 부가적 상충하는 체크섬이 있으면, 각각의 상충하는 체크섬에는 상충하는 체크섬이 식별될 때 다음 Z 값이 배정될 수 있다. 그리하여, 상충 모듈은 상관 파일이 액세스된 후에, 그리고 새롭게 발생된 해시 값이 이미 상관 파일 내에 있는 경우에만 체크로서 액세스될 수 있다. 그 후 상충 모듈은 상충이 있는지 또는 수신된 파일로부터의 단편화된 유닛 및 체크섬이 둘 다 이미 상관 파일 내 서로 연관되어 있는지 결정할 것이다. 이들 확장 파일은 저장된 버퍼 유닛과의 저장된 해시 값 연관을 교체하거나 겹쳐 기록하는 것에 대한 대안으로서 사용될 수 있다. 확장을 갖는 이들 체크섬은 사용자 공급된 버퍼 유닛으로서 입력을 형성하는데 필요한 사이즈이도록 조합될 수 있다.
전처리 단계가 해시 값 알고리즘을 사용하는 어느 경우에 있어서, 적용될 제1 해시 값 알고리즘은 제1 해시 값 테이블을 사용하는 제1 해시 값 알고리즘 또는 전처리 해시 값 알고리즘이라고 지칭될 수 있고, 제2 해시 값 알고리즘은 제2 해시 값 테이블을 사용하는 중복-제거 해시 값 알고리즘 또는 제2 해시 값 알고리즘이라고 지칭될 수 있다. 전처리 해시 값 알고리즘과 제2 해시 값 알고리즘이 둘 다 사용될 때, 위에서 언급된 바와 같이, 바람직하게는, 중복-제거 해시 값 알고리즘을 사용할 때 상충을 다루기 위해 대응하는 해시 값 테이블은 가장 최근 연관을 지지하여 선택함으로써 상충하는 연관 간을 결정하는 반면, 전처리 해시 값 알고리즘을 사용할 때 상충을 다루기 위해 대응하는 해시 값 테이블은 위에서 설명된 바와 같은 확장 방법을 사용한다.
전처리 기술을 사용할 때, 출력, 예를 들어, 비트 마커는 버퍼 유닛과 동일한 사이즈일 수 있다. 일부 실시예에 있어서, 비트 마커는 버퍼 유닛의 사이즈보다 더 클 수 있다. 이들 경우에 있어서, 시스템은 버퍼 유닛을 형성하도록 그것들을 단편화하거나, 또는 그것들이 코딩하는 데이터보다 더 큰 어느 비트 마커라도 거절하는 디폴트 모듈을 포함하고 대신에 원래 원시 데이터를 사용하여 버퍼 유닛을 형성하고, 그로써 비트 마커 테이블로의 액세스를 우회할 수 있다. 다른 실시예에 있어서, 그것들은 더 작고 버퍼 유닛을 형성하도록 또는 버퍼 유닛으로 단편화될 버퍼를 형성하도록 조합될 필요가 있을 수 있다. 이들 단계는 컴퓨터 프로그램 제품 내 모듈에 따라 CPU에 의해, 클라우드 내에서 또는 서버 상에서 수행될 수 있다.
데이터의 전처리가 기록 프로세스의 일부분이면, 그때는 데이터의 후-처리가 판독 프로세스의 일부분이어야 한다. 본 발명의 중복-제거 단계의 판독에서와 달리, 후-처리 단계는 전처리 단계에 대칭적이지만 역순으로 수행된다.
부가적으로, 본 발명의 다양한 실시예는 손실에 대항하여 데이터를 보호하기 위한 다른 방법과 조합하여 사용될 수 있다. 소정 실시예에 있어서는 데이터의 백-업을 용이하게 하도록 2개의 중개자를 사용할 수 있다. 예를 들어, 제1 중개자에서는 제1 기록 매체 상에 저장되는 데이터 파일을 파일 이름과 상관시킬 수 있다. 위에서 언급된 바와 같이, 제1 중개자는 파일 이름을 식별하는 개체 또는 사용자가 기록 매체로부터 데이터 파일을 검색할 수 있게 하도록 구성된다.
제2 중개자를 발생시키는 데이터 보호 프로토콜이 실행될 수 있다. 제2 중개자는 시간 T1에서 제1 중개자의 정확한 사본일 것이다. 그리하여, T1에서, 제1 중개자와 제2 중개자 둘 다는 제1 기록 매체 상의 동일한 LBA를 가리킬 것이다.
시간 T1 후에, 예를 들어 T2에서, 호스트는 그것이 주어진 위치 내, 예를 들어, 주어진 섹터 또는 섹터 클러스터 상에 저장되어 있다고 믿는 파일을 업데이트하기 위해 탐색할 수 있다. 호스트는 제1 저장 주소(들)에 저장된 데이터를 변경하지 않을 것이다. NCM 상의 정보가 겹쳐 기록되게 야기하기보다, 제1 중개자는 호스트가 업데이트된 파일이라고 믿는 것에 대응하는 새로운 상관 엔트리를 발생시킬 수 있다. NCM 상에 기록되는 버퍼 유닛의 전부는 아니더라도 대부분은 고유 엔트리이기 때문에, 중개자 상의 새로운 상관은 원래 상관에서의 것들과 다른 버퍼 유닛에 대해서만 원래 상관과 다를 것이다. 그리하여, 파일(A)에 대해 T0에서, 제1 중개자는 다음의 진정 LBA를 상관시킬 수 있다: 200, 201, 202, 203, 204, 205, 206. T1에서, 중개자의 사본이 만들어질 수 있다. T2에서, 사용자는 파일(A)을 업데이트하려 할 수 있다. 제1 중개자 상에서, 다음의 진정 LBA를 가리키는 새로운 상관이 저장될 수 있다: 200, 201, 310, 203, 204, 205, 206. 그렇지만, 제2 중개자는 변경되지 않을 것이다. 그리하여, 그것들은 그것들이 가리키는 곳에 의해 다를 것이다. 앞서 저장된 상관은 제1 중개자 상에서 비활성으로 되거나 삭제되거나 겹쳐 기록될 수 있다.
2개의 중개자의 이러한 사용은, 호스트가 파일이 그것이 T1에서 그리고 또한 T2에서 존재하였을 때 저장되고 있음을 나타내도록 그 파일 시스템을 업데이트할 필요가 있게 야기하지 않고, 데이터가 T1에서 존재하였을 때 그것의 스냅샷을 제공할 수 있게 할 것이다. 그리하여, 스냅샷은 시간 T1에서 저장되는 모든 데이터 파일을 로킹하고 누구도 그들 물리적 파일을 삭제하거나 겹쳐 쓰지 못하게 방지한다. 그렇지만, 호스트가 그들 파일을 개정하기를 바라면, 그것은 그것이 그렇게 행하고 있다고 믿고 작업할 수 있는데, 그때 실제로는 파일의 새로운 부분만이 저장되고, 새로운 중개자 엔트리가 만들어진다.
위에서 시사된 바와 같이, 이러한 방법은 제1 중개자, 제2 중개자 및 비-캐시 저장 매체를 포함하는 시스템에 의해 구현될 수 있다. 제1 중개자, 제2 중개자 및 기록 매체의 각각은 비-일시적 매체로 이루어지거나, 본질적으로는 그것으로 이루어지거나, 그것을 포함하는 별개의 디바이스 상에 저장되거나 그로부터 형성될 수 있다. 부가적으로, 시스템 내에서 중개자 및 기록 매체는 서로에 그리고 선택사항으로서는 명령어를 저장하는 하나 이상의 컴퓨터 또는 CPU에 동작가능하게 결합되며, 그 명령어는 그것들이 그들 의도된 기능을 수행하게 그리고 하나 이상의 포털을 통해 네트워크를 통하여 하나 이상의 호스트에 통신하게 야기한다. 더더욱, 이러한 실시예가 2개의 중개자의 사용과 연관하여 설명되고 있기는 하지만, 2개의 별개의 중개자보다는 동일한 중개자의 2개의 섹션을 사용하여 시스템을 구현할 수 있다.
데이터를 백-업하기 위한 전술한 시스템은 2개의 중개자의 맥락에서 설명되어 있다. 그렇지만, 2개보다 많은 중개자가 저장된 파일 또는 파일 버전의 이력을 캡처링하도록 사용될 수 있다. 예를 들어, 적어도 3개, 적어도 4개, 적어도 5개, 적어도 10개 등의 중개자가 사용될 수 있다. 부가적으로, 호스트는 중개자가 정기적 간격으로, 예를 들어, 매주, 매월, 분기마다 또는 매년, 또는 비정기적 간격으로, 예를 들어, 요구에 따라 스냅샷을 찍게 할 수 있다.
데이터를 백업하기 위한 다른 방법에 의하면, 비-캐시 매체의 클론이 만들어질 수 있다. 이러한 방법에 있어서, 제1 중개자에서는, 비-캐시 저장 매체 상에 저장되는 데이터의 복수의 위치와 복수의 파일 이름을 상관시킨다. 제1 중개자는 특정 파일 이름을 식별하는 사용자가 특정 파일 이름에 대응하는 제1 비-캐시 저장 매체로부터 데이터 파일을 검색할 수 있게 하도록 구성된다. 특정 파일 전체 또는 일부는 제1 섹터 또는 섹터 클러스터 내 저장될 수 있다.
제2 비-캐시 저장 매체 및 제2 중개자에 복수의 데이터 파일(또는 제1 비-캐시 저장 매체의 모든 데이터 파일)의 사본을 만들 수 있다. 제2 중개자는 시간 T1에서 제1 중개자의 사본이고 제2 비-캐시 저장 매체에 동작가능하게 결합된다. T1 후에 있는 시간 T2에서, 사용자는 제1 비-캐시 저장 매체 상의 상기 제1 섹터 또는 섹터 클러스터 내 저장되어 있는 데이터 파일에 대한 개정을 저장하라고 시스템에 지시할 수 있다. 새로운 버퍼 유닛(또는 해시 값과 활성 연관되어 있지 않은 버퍼 유닛)만이 제1 비-캐시 저장 매체에 부가될 것이고 제1 비-캐시 저장 매체 상의 데이터의 겹쳐 기록은 없을 것이다. 대신에 새로운 상관이 제1 중개자 상에 기록될 것이다. 제2 중개자 또는 제2 비-캐시 저장 매체에 대한 변경은 이루어지지 않을 것이다. T2 후에 사용자가 파일을 요청할 때, 그 또는 그녀는 제1 중개자를 거쳐가고 파일의 가장 최근 저장된 버전을 검색할 것이다. 그렇지만, 시스템 관리책임자는 제2 비-캐시 매체 상에 저장되어 있을 더 앞선 버전으로의 액세스를 가질 것이고 제2 중개자를 거침으로써 그것을 검색할 수 있다.
이러한 방법은 제1 중개자, 제2 중개자, 제1 비-캐시 저장 매체 및 제2 비-캐시 저장 매체를 포함하는 시스템에 의해 구현될 수 있다. 제1 중개자, 제2 중개자 및 데이터 파일을 저장하기 위한 제1 및 제2 기록 매체의 각각은 비-일시적 매체로 이루어지거나, 본질적으로는 그것으로 이루어지거나, 그것을 포함하는 별개의 디바이스 상에 저장될 수 있다. 일부 실시예에 있어서, 제1 비-캐시 매체 내 저장되는 가장 최근 파일은 구형 파일이 제2 비-캐시 매체 내에서 갖는 동일한 LUN을 갖는다.
본 명세서에서 설명된 다양한 실시예의 특징 중 어느 하나는 달리 특정되지 않는 한 개시된 어느 다른 실시예와 연관하여 설명된 특징과 함께 사용될 수 있다. 그리하여, 다양한 또는 특정 실시예와 연관하여 설명된 특징은 그러한 배타성이 명시적으로 서술되거나 맥락으로부터 암시되지 않는 한 여기에서 개시된 다른 실시예와 연관하여 적합하지 않다고 해석되어서는 아니된다.

Claims (18)

  1. 비-캐시 기록 매체(non-cache recording medium) 상에 데이터를 저장하기 위한 방법으로서,
    i. 비-캐시 기록 매체에 데이터를 기록하라는 명령어를 수신하는 단계로서, 상기 명령어는 사용자 인지된 논리적 블록 주소 및 사용자 공급된 버퍼를 포함하는 상기 수신하는 단계;
    ii. 상기 사용자 공급된 버퍼를 사용자 공급된 버퍼 유닛으로 분할하는 단계;
    iii. 암호 해시 함수를 각각의 사용자 공급된 버퍼 유닛에 적용하고, 그로써 각각의 사용자 공급된 버퍼 유닛에 대한 발생된 해시 값을 발생시키는 단계;
    iv. 컴퓨터 프로그램 제품이 해시 값 테이블에 액세스하고 그리고 각각의 발생된 해시 값이 상기 해시 값 테이블 내 해시 값의 중복인지 결정하게 야기하는 알고리즘을 포함하는 상기 컴퓨터 프로그램 제품을 활성화하는 단계로서, 상기 해시 값 테이블은 복수의 저장된 해시 값의 각각을 서로 다른 저장된 버퍼 유닛, 및 진정 논리적 블록 주소와 연관시키고; 그리고
    A. 상기 발생된 해시 값이 상기 해시 값 테이블 내 있지 않으면, 그때는 상기 사용자 공급된 버퍼 유닛을 비-캐시 기록 매체 내 블록에 기록하고, 상기 사용자 공급된 버퍼 유닛, 상기 발생된 해시 값, 및 상기 사용자 공급된 버퍼 유닛이 저장되는 진정 논리적 블록 주소의 상관을 포함하도록 상기 해시 값 테이블을 업데이트하고, 상기 사용자 공급된 버퍼가 기록된 곳에 대응하는 상기 진정 논리적 블록 주소와 상기 사용자 공급된 버퍼에 대한 상기 사용자 인지된 논리적 블록 주소를 중개자 상에서 상관시키고; 그리고
    B. 상기 발생된 해시 값이 상기 해시 값 테이블 내 저장된 해시 값의 중복이면, 동일한 해시 값이 저장된 버퍼 유닛 및 상기 사용자 공급된 버퍼 유닛과 연관되지만 상기 저장된 버퍼 유닛과 상기 사용자 공급된 버퍼 유닛은 다른 값을 갖는 상황으로서 정의되는 상충이 있는지 질의하고, 그리고
    a. 상충이 있으면, 상기 사용자 공급된 버퍼 유닛을 상기 비-캐시 기록 매체 내 블록에 기록하고, 상기 저장된 버퍼 유닛과 상기 저장된 해시 값 간 상기 해시 값 테이블 내 연관을 삭제하거나 비활성으로 만들고, 상기 사용자 공급된 버퍼 유닛, 상기 발생된 해시 값, 및 상기 사용자 공급된 버퍼 유닛이 저장되는 진정 논리적 블록 주소의 상관을 포함하도록 상기 해시 값 테이블을 업데이트하고, 상기 사용자 공급된 버퍼 유닛이 기록된 곳에 대응하는 상기 진정 논리적 블록 주소와 상기 사용자 인지된 논리적 블록 주소를 상기 중개자 상에 기록하고, 그리고
    b. 상충이 없으면, 상기 사용자 공급된 버퍼 유닛을 상기 비-캐시 매체 상에 기록함이 없이 상기 사용자 발생된 버퍼 유닛과 동일한 상기 비-캐시 기록 매체 상에 저장된 버퍼 유닛의 상기 진정 논리적 블록 주소를 상기 중개자 상에 기록하고 그것을 상기 사용자 공급된 버퍼에 대한 상기 사용자 인지된 논리적 블록 주소와 상관시키는 상기 활성화하는 단계를 포함하는 방법.
  2. 제1항에 있어서, 복수의 사용자 공급된 버퍼 유닛의 각각에 대해 (iii) - (iv)를 반복하는 단계를 더 포함하되, 일괄하여 상기 복수의 사용자 공급된 버퍼 유닛은 파일에 대응하는 방법.
  3. 제1항에 있어서, 상기 사용자 공급된 버퍼는 512 바이트 내지 2MB로 이루어지는 방법.
  4. 제1항에 있어서, 사용자 인지된 논리적 블록 주소에 대해, 상기 중개자는 동일한 진정 논리적 블록 주소를 복수 회 상관시키는 방법.
  5. 제1항에 있어서, 상기 버퍼 유닛은 사이즈가 512B 또는 4K인 방법.
  6. 제5항에 있어서, 상기 해시 값은 사이즈가 8 바이트 또는 16 바이트인 방법.
  7. 제1항에 있어서, 상기 사용자 공급된 버퍼 유닛은 전처리 단계에 의해 형성되되, 상기 전처리 단계는, (i) 복수의 디지털 2진 신호를 수신하는 단계로서, 상기 디지털 2진 신호는 복수의 청크렛(chunklet)으로 조직되고, 각각의 청크렛은 N 비트 길이이되, N은 1보다 큰 정수이고 상기 청크렛은 순서를 갖는 상기 수신하는 단계; (ii) 복수의 마커의 세트를 형성하도록 X개의 마커의 세트로부터 각각의 청크렛에 마커를 배정하는 단계로서, X는 청크렛 내 비트의 여러 다른 조합의 수보다 작거나 같고, 똑같은 서브유닛에는 동일한 마커가 배정되는 상기 배정하는 단계; 및 (iii) 상기 마커를 버퍼 유닛으로서 사용하는 단계를 포함하는 방법.
  8. 제1항에 있어서, 상기 사용자 공급된 버퍼 유닛은 전처리 단계에 의해 형성되되, 상기 전처리 단계는, (i) 복수의 디지털 2진 신호를 수신하는 단계로서, 상기 디지털 2진 신호는 복수의 청크렛으로 조직되고, 각각의 청크렛은 N 비트 길이이되, N은 1보다 큰 정수이고 상기 청크렛은 순서를 갖는 상기 수신하는 단계; (ii) 각각의 청크렛을 균일한 사이즈의 서브유닛으로 분할하고 복수의 마커의 세트를 형성하도록 X개의 마커의 세트로부터 각각의 서브유닛에 마커를 배정하는 단계로서, X는 서브유닛 내 비트의 여러 다른 조합의 수보다 작거나 같고, 똑같은 서브유닛에는 동일한 마커가 배정되는 상기 배정하는 단계; 및 (iii) 상기 마커를 버퍼 유닛으로서 사용하는 단계를 포함하는 방법.
  9. 제8항에 있어서, 적어도 하나의 마커는 서브유닛보다 사이즈가 작은 방법.
  10. 제7항에 있어서, 단계(ii)는 비트 마커 테이블에 액세스하는 단계를 포함하는 방법.
  11. 제8항에 있어서, 단계(ii)는 비트 마커 테이블에 액세스하는 단계를 포함하는 방법.
  12. 제7항에 있어서, 단계(ii)는 빈도 변환기에 액세스하는 단계를 포함하는 방법.
  13. 제8항에 있어서, 단계(ii)는 빈도 변환기에 액세스하는 단계를 포함하는 방법.
  14. 데이터를 저장하기 위한 시스템으로서,
    (a) 영속적 메모리로서, 진정 논리적 블록 주소 및 저장된 해시 값과 저장된 버퍼 유닛을 연관시키도록 구성되는 해시 값 테이블을 저장하는 상기 영속적 메모리;
    (b) 비-일시적 매체 내 저장되는 컴퓨터 프로그램 제품에 동작가능하게 결합되거나 포함하는 중앙 처리 장치로서, 상기 컴퓨터 프로그램 제품은 실행될 때, 자동으로,
    i. 발생된 해시 값을 발생시키도록 하나 이상의 사용자 공급된 버퍼 유닛의 각각에 해시 값 알고리즘을 적용하고; 그리고
    ii. 상기 발생된 해시 값이 저장된 버퍼 유닛과 연관되어 있는 상기 해시 값 테이블 내 저장된 해시 값의 중복인지 결정하고, 그리고 그러하다면, 해시 값이 2개의 다른 버퍼 유닛과 연관되는 것으로 정의되는 상충이 존재하는지 결정하고 상충이 존재하면, 상기 해시 값 테이블 내 상기 해시 값이 상기 저장된 버퍼 유닛이 아니라 상기 사용자 공급된 버퍼 유닛과 연관되게 야기하도록 상기 해시 값 테이블을 업데이트하는 실행가능한 코드를 포함하는 상기 중앙 처리 장치;
    (c) 비-캐시 기록 매체로서, 블록 레벨 저장을 위해 구성되는 상기 비-캐시 기록 매체; 및
    (d) 중개자로서, 사용자 인지된 논리적 블록 주소와 진정 논리적 블록 주소의 상관을 저장하는 상기 중개자를 포함하는 시스템.
  15. 제14항에 있어서, 상기 컴퓨터 프로그램은,
    i. 상기 발생된 해시 값이 상기 해시 값 테이블 내 상기 해시 값의 중복이 아닌 경우; 또는
    ii. 상기 발생된 해시 값이 저장된 해시 값의 중복이고, 상충이 있는 경우에만 상기 사용자 공급된 버퍼 유닛을 상기 비-캐시 기록 매체에 기록하는 시스템.
  16. 제14항에 있어서, 복수의 사용자 파일에 대해, 사용자 인지된 논리적 블록 주소와 진정 논리적 블록 주소의 상관이 있고, 여러 다른 파일에 대한 복수의 상관 내에는 동일한 진정 논리적 블록 주소이지만 다른 사용자 인지된 논리적 블록 주소가 하나 이상 있는 시스템.
  17. 제14항 내지 제16항 중 어느 한 항에 있어서, 검색 모듈을 더 포함하되, 상기 검색 모듈은 해시 값 테이블에 액세스함이 없이 상기 중개자에 액세스하고 상기 중개자에 의해 지시된 순서로 복수의 버퍼 유닛을 재조합함으로써 데이터 파일을 복원하도록 구성되고, 상기 중개자에 의해 지시된 상기 순서는 상기 비-캐시 기록 매체 상의 상기 버퍼 유닛의 상기 순서와 다른 시스템.
  18. 컴퓨터 판독가능한 프로그램을 포함하는 비-일시적 컴퓨터 사용가능한 매체를 포함하는 컴퓨터 프로그램 제품으로서, 컴퓨터 상에서 실행될 때 상기 컴퓨터 판독가능한 프로그램은 상기 컴퓨터가 제1항 내지 제13항 중 어느 한 항의 방법을 포함하는 파일 시스템 내 데이터 블록을 중복-제거 및 관리하기 위한 방법을 구현하게 야기하는 컴퓨터 프로그램 제품.
KR1020157023747A 2013-02-01 2014-01-31 저장된 데이터 내 감축된 잉여 KR20150119880A (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US13/756,921 US20140223118A1 (en) 2013-02-01 2013-02-01 Bit Markers and Frequency Converters
US13/756,921 2013-02-01
US13/797,093 2013-03-12
US13/797,093 US10133636B2 (en) 2013-03-12 2013-03-12 Data storage and retrieval mediation system and methods for using same
US13/908,239 2013-06-03
US13/908,239 US9467294B2 (en) 2013-02-01 2013-06-03 Methods and systems for storing and retrieving data
PCT/US2014/014225 WO2014121109A2 (en) 2013-02-01 2014-01-31 Reduced redundancy in stored data

Publications (1)

Publication Number Publication Date
KR20150119880A true KR20150119880A (ko) 2015-10-26

Family

ID=51260352

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020157023747A KR20150119880A (ko) 2013-02-01 2014-01-31 저장된 데이터 내 감축된 잉여
KR1020157023746A KR20150121703A (ko) 2013-02-01 2014-01-31 데이터를 저장 및 검색하기 위한 방법 및 시스템

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020157023746A KR20150121703A (ko) 2013-02-01 2014-01-31 데이터를 저장 및 검색하기 위한 방법 및 시스템

Country Status (12)

Country Link
US (2) US9467294B2 (ko)
EP (2) EP2951701A4 (ko)
JP (4) JP6345698B2 (ko)
KR (2) KR20150119880A (ko)
CN (3) CN110083552A (ko)
AU (2) AU2014212163A1 (ko)
BR (1) BR112015018448A2 (ko)
CA (2) CA2900034A1 (ko)
HK (2) HK1219155A1 (ko)
MX (2) MX2015009954A (ko)
PH (2) PH12015501699A1 (ko)
WO (2) WO2014121102A2 (ko)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10133636B2 (en) 2013-03-12 2018-11-20 Formulus Black Corporation Data storage and retrieval mediation system and methods for using same
US9628108B2 (en) 2013-02-01 2017-04-18 Symbolic Io Corporation Method and apparatus for dense hyper IO digital retention
US9817728B2 (en) 2013-02-01 2017-11-14 Symbolic Io Corporation Fast system state cloning
US9304703B1 (en) * 2015-04-15 2016-04-05 Symbolic Io Corporation Method and apparatus for dense hyper IO digital retention
US9519805B2 (en) * 2013-08-01 2016-12-13 Cellco Partnership Digest obfuscation for data cryptography
JP6312344B2 (ja) * 2014-02-18 2018-04-18 日本電信電話株式会社 セキュリティ装置、その方法、およびプログラム
US10185842B2 (en) * 2015-03-18 2019-01-22 Intel Corporation Cache and data organization for memory protection
US10061514B2 (en) 2015-04-15 2018-08-28 Formulus Black Corporation Method and apparatus for dense hyper IO digital retention
US20170220498A1 (en) * 2016-02-01 2017-08-03 Symbolic Io Corporation Apparatus for personality and data transfer via physical movement of a fast memory transfer device
JP2019514146A (ja) * 2016-04-04 2019-05-30 フォーミュルス ブラック コーポレーション 高速システム状態クローニング
CN106230907B (zh) * 2016-07-22 2019-05-14 华南理工大学 一种社保大数据可视化方法及系统
CN107783728B (zh) * 2016-08-31 2021-07-23 百度在线网络技术(北京)有限公司 数据存储方法、装置和设备
CN109074226B (zh) * 2016-09-28 2020-03-20 华为技术有限公司 一种存储系统中重复数据删除方法、存储系统及控制器
CN106528703A (zh) * 2016-10-26 2017-03-22 杭州宏杉科技股份有限公司 一种重复删除的模式切换方法及装置
CN108241710A (zh) * 2016-12-27 2018-07-03 中移(苏州)软件技术有限公司 一种文件创建方法、装置以及文件查询方法、装置
US11341488B2 (en) * 2017-02-06 2022-05-24 Northern Trust Corporation Systems and methods for issuing and tracking digital tokens within distributed network nodes
KR101963822B1 (ko) * 2017-02-27 2019-04-01 충남대학교산학협력단 프로그램 분류 방법 및 장치
US10873781B2 (en) 2017-06-13 2020-12-22 Comcast Cable Communications, Llc Video fragment file processing
US11232076B2 (en) 2017-10-30 2022-01-25 AtomBeam Technologies, Inc System and methods for bandwidth-efficient cryptographic data transfer
US10509771B2 (en) * 2017-10-30 2019-12-17 AtomBeam Technologies Inc. System and method for data storage, transfer, synchronization, and security using recursive encoding
US11366790B2 (en) 2017-10-30 2022-06-21 AtomBeam Technologies Inc. System and method for random-access manipulation of compacted data files
US10572186B2 (en) 2017-12-18 2020-02-25 Formulus Black Corporation Random access memory (RAM)-based computer systems, devices, and methods
CN108984719B (zh) * 2018-07-10 2021-08-03 上海达梦数据库有限公司 基于列存储的数据删除方法、装置、服务器及存储介质
CN109521954B (zh) * 2018-10-12 2021-11-16 许继集团有限公司 一种配网ftu定点文件管理方法及装置
CN109710668B (zh) * 2018-11-29 2021-05-04 中国电子科技集团公司第二十八研究所 一种多源异构数据访问中间件构建方法
WO2020142431A1 (en) 2019-01-02 2020-07-09 Formulus Black Corporation Systems and methods for memory failure prevention, management, and mitigation
WO2020264522A1 (en) * 2019-06-27 2020-12-30 Atombeam Technologies, Inc. Data storage, transfer, synchronization, and security using recursive encoding
SG11202001978YA (en) 2019-09-11 2020-04-29 Alibaba Group Holding Ltd Shared blockchain data storage based on error correction coding in trusted execution environments
EP4052136A4 (en) * 2019-10-28 2023-11-01 Atombeam Technologies Inc. SYSTEM AND METHODS FOR EFFICIENT BANDWIDTH CRYPTOGRAPHIC DATA TRANSFER
CN113472512A (zh) * 2021-06-10 2021-10-01 东软集团股份有限公司 智能合约执行方法、装置、存储介质及电子设备
CN114676117B (zh) * 2022-05-27 2022-08-16 成都明途科技有限公司 一种岗位数据存储方法、装置及岗位机器人
CN116303124B (zh) * 2023-03-29 2024-01-30 浙江正泰仪器仪表有限责任公司 一种数据搜索方法、装置、电子设备及存储介质

Family Cites Families (77)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
NL225002A (ko) 1957-04-23
US3016527A (en) 1958-09-04 1962-01-09 Bell Telephone Labor Inc Apparatus for utilizing variable length alphabetized codes
GB1564563A (en) 1977-05-25 1980-04-10 Int Computers Ltd Data sotrage apparatus
US4286256A (en) 1979-11-28 1981-08-25 International Business Machines Corporation Method and means for arithmetic coding utilizing a reduced number of operations
US4635141A (en) 1982-10-13 1987-01-06 United States Design Corporation Method and apparatus for storing data on magnetic or optical media
FR2668867B1 (fr) 1990-11-02 1993-01-29 Burger Jacques Procede de codage binaire a taux de basculement des elements binaires sensiblement uniforme, et procedes d'incrementation et de decrementation correspondants.
US7124302B2 (en) * 1995-02-13 2006-10-17 Intertrust Technologies Corp. Systems and methods for secure transaction management and electronic rights protection
JP3277792B2 (ja) * 1996-01-31 2002-04-22 株式会社日立製作所 データ圧縮方法および装置
US5818877A (en) 1996-03-14 1998-10-06 The Regents Of The University Of California Method for reducing storage requirements for grouped data values
US6465969B1 (en) 1997-08-04 2002-10-15 Lumimove, Inc. Electroluminescent display intelligent controller
US6052785A (en) 1997-11-21 2000-04-18 International Business Machines Corporation Multiple remote data access security mechanism for multitiered internet computer networks
JP2000059227A (ja) 1998-08-07 2000-02-25 Matsushita Electric Ind Co Ltd 符号化/復号化装置、及び符号化/復号化方法
US6297753B1 (en) 1999-01-29 2001-10-02 Victor Company Of Japan, Ltd. Eight-to-fifteen modulation using no merging bit and optical disc recording or reading systems based thereon
US6785815B1 (en) * 1999-06-08 2004-08-31 Intertrust Technologies Corp. Methods and systems for encoding and protecting data using digital signature and watermarking techniques
US6560599B1 (en) 1999-06-30 2003-05-06 Microsoft Corporation Method and apparatus for marking a hash table and using the marking for determining the distribution of records and for tuning
WO2001016756A1 (fr) * 1999-08-31 2001-03-08 Fujitsu Limited Systeme de fichier et procede d'acces a un fichier
US6829695B1 (en) 1999-09-03 2004-12-07 Nexql, L.L.C. Enhanced boolean processor with parallel input
DE60042965D1 (de) * 2000-05-24 2009-10-29 Sony Deutschland Gmbh Dienstqualitätsunterhandlung
US7274697B2 (en) * 2000-11-16 2007-09-25 Tensilica, Inc. Fast IP route lookup with 16/K and 16/Kc compressed data structures
US8290160B1 (en) * 2001-10-17 2012-10-16 Appalachian Technologies Corporation of Pennsylvania Method and apparatus for secured facsimile transmission
US20030115447A1 (en) 2001-12-18 2003-06-19 Duc Pham Network media access architecture and methods for secure storage
CA2364820A1 (en) 2001-12-11 2003-06-11 Ibm Canada Limited-Ibm Canada Limitee Variable length encoding and decoding of ascending numerical sequences
US7587408B2 (en) 2002-03-21 2009-09-08 United States Postal Service Method and system for storing and retrieving data using hash-accessed multiple data stores
US6674908B1 (en) * 2002-05-04 2004-01-06 Edward Lasar Aronov Method of compression of binary data with a random number generator
JP4304360B2 (ja) 2002-05-22 2009-07-29 日本電気株式会社 音声符号化復号方式間の符号変換方法および装置とその記憶媒体
US7065619B1 (en) 2002-12-20 2006-06-20 Data Domain, Inc. Efficient data storage system
US20040143733A1 (en) 2003-01-16 2004-07-22 Cloverleaf Communication Co. Secure network data storage mediator
US7383378B1 (en) 2003-04-11 2008-06-03 Network Appliance, Inc. System and method for supporting file and block access to storage object on a storage appliance
US7143251B1 (en) 2003-06-30 2006-11-28 Data Domain, Inc. Data storage using identifiers
US7849063B2 (en) * 2003-10-17 2010-12-07 Yahoo! Inc. Systems and methods for indexing content for fast and scalable retrieval
US7290116B1 (en) * 2004-06-30 2007-10-30 Sun Microsystems, Inc. Level 2 cache index hashing to avoid hot spots
JP5432450B2 (ja) 2004-07-29 2014-03-05 オセ−テクノロジーズ ビーブイ エントロピー符号化を利用したカラー画像データの可逆圧縮
US7457813B2 (en) 2004-10-06 2008-11-25 Burnside Acquisition, Llc Storage system for randomly named blocks of data
US7330322B2 (en) 2005-01-28 2008-02-12 Seagate Technology Llc Utilizing a combination of physical tracks and virtual tracks to store data on a data storage medium
US7617370B2 (en) 2005-04-29 2009-11-10 Netapp, Inc. Data allocation within a storage system architecture
US7921088B1 (en) 2005-07-22 2011-04-05 X-Engines, Inc. Logical operations encoded by a function table for compressing index bits in multi-level compressed look-up tables
US7480766B2 (en) * 2005-08-03 2009-01-20 Sandisk Corporation Interfacing systems operating through a logical address space and on a direct data file basis
US7436330B2 (en) * 2006-03-24 2008-10-14 The University Of Mississippi High-speed data compression based on set associative cache mapping techniques
JP2007272826A (ja) * 2006-03-31 2007-10-18 Sharp Corp 情報処理装置、情報処理方法、情報処理プログラム、および記録媒体
CA2546148A1 (en) * 2006-05-09 2007-11-09 Nikolajs Volkovs Method, system and computer program for polynomial based hashing and message authentication coding with separate generation of spectrums
US7962499B2 (en) * 2006-08-18 2011-06-14 Falconstor, Inc. System and method for identifying and mitigating redundancies in stored data
AU2006204634B2 (en) 2006-08-31 2009-10-29 Canon Kabushiki Kaisha Runlength encoding of leading ones and zeros
JP2008165293A (ja) * 2006-12-27 2008-07-17 Seiko Epson Corp データ検索装置、デバイス管理装置、データ検索方法、およびコンピュータプログラム
JP4990066B2 (ja) * 2007-08-21 2012-08-01 株式会社日立製作所 論理ボリュームのペアを利用したデータ保存の方式を変更する機能を備えたストレージシステム
US9413825B2 (en) 2007-10-31 2016-08-09 Emc Corporation Managing file objects in a data storage system
GB0721648D0 (en) * 2007-11-05 2007-12-19 Roke Manor Research Internet data processing systems
US20090169001A1 (en) 2007-12-28 2009-07-02 Cisco Technology, Inc. System and Method for Encryption and Secure Transmission of Compressed Media
US8214425B2 (en) 2008-01-29 2012-07-03 Mitel Networks Corporation System and method for storing a program using partial compression
WO2009095956A1 (ja) 2008-01-31 2009-08-06 Fujitsu Limited データ圧縮・復元方法及び圧縮・復元プログラム
JP2009251725A (ja) * 2008-04-02 2009-10-29 Hitachi Ltd 記憶制御装置及び記憶制御装置を用いた重複データ検出方法。
US8745336B2 (en) 2008-05-29 2014-06-03 Vmware, Inc. Offloading storage operations to storage hardware
US8527482B2 (en) 2008-06-06 2013-09-03 Chrysalis Storage, Llc Method for reducing redundancy between two or more datasets
JP5414223B2 (ja) * 2008-09-16 2014-02-12 株式会社日立ソリューションズ インターネットバックアップにおける転送データ管理システム
US8412677B2 (en) * 2008-11-26 2013-04-02 Commvault Systems, Inc. Systems and methods for byte-level or quasi byte-level single instancing
US8200923B1 (en) * 2008-12-31 2012-06-12 Emc Corporation Method and apparatus for block level data de-duplication
JP5413948B2 (ja) * 2009-01-27 2014-02-12 日本電気株式会社 ストレージシステム
EP2214315A1 (en) 2009-01-30 2010-08-04 Thomson Licensing Method and device for encoding a bit sequence
JP4816740B2 (ja) * 2009-02-09 2011-11-16 ソニー株式会社 情報処理装置、および情報処理方法、並びにプログラム
US8140491B2 (en) 2009-03-26 2012-03-20 International Business Machines Corporation Storage management through adaptive deduplication
US8812570B2 (en) * 2009-05-28 2014-08-19 Red Hat, Inc. String hashing using a number generator
CN102484484B (zh) 2009-08-25 2014-08-20 富士通株式会社 发送机、编码装置、接收机以及解码装置
JP2011082878A (ja) 2009-10-09 2011-04-21 Sony Corp 符号化装置、復号装置、情報処理システム、符号化方法およびプログラム
US8351600B2 (en) 2009-10-30 2013-01-08 Cleversafe, Inc. Distributed storage network and method for encrypting and decrypting data using hash functions
JP4892072B2 (ja) * 2010-03-24 2012-03-07 株式会社東芝 ホスト装置と連携して重複データを排除するストレージ装置、同ストレージ装置を備えたストレージシステム、及び同システムにおける重複排除方法
JP5594828B2 (ja) * 2010-07-21 2014-09-24 学校法人東京電機大学 データ分散保管装置及び方法及びプログラム及び記録媒体
US8831221B2 (en) * 2010-09-28 2014-09-09 Lsi Corporation Unified architecture for crypto functional units
US9104326B2 (en) 2010-11-15 2015-08-11 Emc Corporation Scalable block data storage using content addressing
US8918607B2 (en) 2010-11-19 2014-12-23 International Business Machines Corporation Data archiving using data compression of a flash copy
US20120239860A1 (en) 2010-12-17 2012-09-20 Fusion-Io, Inc. Apparatus, system, and method for persistent data management on a non-volatile storage media
US8892845B2 (en) * 2010-12-22 2014-11-18 Cleversafe, Inc. Segmenting data for storage in a dispersed storage network
US9639543B2 (en) * 2010-12-28 2017-05-02 Microsoft Technology Licensing, Llc Adaptive index for data deduplication
WO2012117658A1 (ja) * 2011-02-28 2012-09-07 日本電気株式会社 ストレージシステム
US8539008B2 (en) 2011-04-29 2013-09-17 Netapp, Inc. Extent-based storage architecture
US8620865B2 (en) 2011-06-24 2013-12-31 Netapp, Inc. System and method for providing a unified storage system that supports file/object duality
US20140082324A1 (en) * 2012-09-14 2014-03-20 Reuven Elhamias Method and Storage Device for Using File System Data to Predict Host Device Operations
US10133636B2 (en) 2013-03-12 2018-11-20 Formulus Black Corporation Data storage and retrieval mediation system and methods for using same
US20140223118A1 (en) 2013-02-01 2014-08-07 Brian Ignomirello Bit Markers and Frequency Converters

Also Published As

Publication number Publication date
JP2018152126A (ja) 2018-09-27
PH12015501698A1 (en) 2015-10-19
JP2018152116A (ja) 2018-09-27
JP6345698B2 (ja) 2018-06-20
PH12015501699A1 (en) 2015-10-19
BR112015018448A2 (pt) 2017-10-03
JP2016509310A (ja) 2016-03-24
CN105190573A (zh) 2015-12-23
CN105339904A (zh) 2016-02-17
WO2014121102A3 (en) 2014-10-09
EP2951703B1 (en) 2020-04-08
CN110083552A (zh) 2019-08-02
US20170026172A1 (en) 2017-01-26
WO2014121109A2 (en) 2014-08-07
US20140223196A1 (en) 2014-08-07
MX2015009954A (es) 2016-01-15
WO2014121109A3 (en) 2015-03-19
HK1219156A1 (zh) 2017-03-24
AU2014212163A1 (en) 2015-08-20
CA2900034A1 (en) 2014-08-07
CN105190573B (zh) 2019-05-17
US9467294B2 (en) 2016-10-11
HK1219155A1 (zh) 2017-03-24
JP6352308B2 (ja) 2018-07-04
EP2951703A2 (en) 2015-12-09
AU2014212170A1 (en) 2015-08-20
MX2015009953A (es) 2017-09-01
JP2016509309A (ja) 2016-03-24
CN105339904B (zh) 2019-10-11
EP2951701A4 (en) 2016-10-26
EP2951701A2 (en) 2015-12-09
KR20150121703A (ko) 2015-10-29
WO2014121102A2 (en) 2014-08-07
CA2900030A1 (en) 2014-08-07
EP2951703A4 (en) 2016-09-21
US9584312B2 (en) 2017-02-28

Similar Documents

Publication Publication Date Title
JP6345698B2 (ja) 格納されたデータにおける冗長削減
US9880746B1 (en) Method to increase random I/O performance with low memory overheads
US10466932B2 (en) Cache data placement for compression in data storage systems
US9454476B2 (en) Logical sector mapping in a flash storage array
US10768843B2 (en) Optmizing metadata management in data deduplication
EP3588260B1 (en) Mapping in a storage system
US7831789B1 (en) Method and system for fast incremental backup using comparison of descriptors
US20190146881A1 (en) Data storage and retrieval mediation system and methods for using same
US9959049B1 (en) Aggregated background processing in a data storage system to improve system resource utilization
US20190324675A1 (en) Providing data deduplication in a data storage system with parallelized computation of crypto-digests for blocks of host i/o data
US10380141B1 (en) Fast incremental backup method and system
US10845994B1 (en) Performing reconciliation on a segmented de-duplication index
US11112987B2 (en) Optmizing data deduplication

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application