# US 11,310,316 B2 · Methods, devices and computer program products for storing and accessing data

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 11,310,316 B2
- Document ID: US11310316B2
- Status: Granted
- Kind: B2
- Application number: 16/795,766
- Filed: 2020-02-20
- Published: 2021-04-29
- Granted: 2022-04-19
- Earliest claimed: 2019-10-29
- Assignees: EMC IP Holding Company LLC
- Applicants: EMC IP Holding Company LLC
- Inventors: Ruixue Zhang; Pengfei Wu; Zhenzhen Lin; Si Chen
- Web page: https://patentgrep.com/patent/US11310316B2

## CPC

- H04L 67/1097: for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
- G06F 16/2255: {Hash tables}
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Methods, devices and computer program products for storing and accessing data are provided, and can effectively improve the performance and scalability of a storage system. For example, a method comprises sending, at a client device and to a seed server of a plurality of servers communicatively coupled to the client device, a request for storing data; receiving a response to the request from the seed server, the response comprising an indication on at least one server of the plurality of servers for storing the data into a target storage device; and sending, to the at least one server, at least one request for storing the data into the target storage device, such that the at least one server stores the data into the target storage device.

## Claims

### Claim 1

A method for storing data, comprising:
sending, from a client device to a seed server of a plurality of servers communicatively coupled to the client device, a request for storing data, wherein the request comprises two or more hash values of two or more data blocks, respectively, into which the data to be stored is divided;
receiving, at the client device, a response to the request from the seed server, the response comprising an indication of at least one server of the plurality of servers for storing the data into a target storage device based in part on respective distances between respective identifiers of the plurality of servers and the two or more hash values of the two or more data blocks; and
sending, from the client device to the at least one server, at least one request for storing the data into the target storage device;
wherein the identifier for a given one of the plurality of servers is computed as a hash value of feature data associated with the given server, the hash value of the feature data associated with the given server being within a same value range as the two or more hash values of the two or more data blocks.

### Claim 2 (depends on 1)

The method of claim 1, wherein sending the request to the seed server comprises:
dividing the data into the two or more data blocks;
determining respective hash values of the two or more data blocks;
including the respective hash values of the two or more data blocks in the request; and
sending, to the seed server, the request including the respective hash values of the two or more data blocks.

### Claim 3 (depends on 2)

The method of claim 2, wherein the number of the at least one server indicated by the seed server corresponds to the number of the two or more data blocks, and wherein sending the at least one request to the at least one server comprises:
generating the at least one request based on the two or more data blocks, wherein one of the at least one request comprises one of the two or more data blocks; and
sending the at least one request to the at least one server, respectively.

### Claim 4 (depends on 1)

The method of claim 1, further comprising receiving at least one response from the at least one server, the at least one response indicating that the at least one server has received the at least one request.

### Claim 5 (depends on 1)

The method of claim 1, wherein the target storage device comprises a cloud storage device.

### Claim 6 (depends on 1)

The method of claim 1, wherein the target storage device comprises the at least one server.

### Claim 7 (depends on 1)

A computer program product tangibly stored in a computer storage medium and including machine-executable instructions, the machine-executable instructions, when executed by a device, causing the device to perform steps of the method of claim 1.

### Claim 8

A client device comprises;
at least one processing unit; and
at least one memory coupled to the at least one processing unit and storing instructions for execution by the at least one processing unit, the instructions, when executed by the at least one processing unit, causing the client device to:
send to a seed server of a plurality of servers communicatively coupled to the client device, a request for storing data, wherein the request comprises two or more hash values of two or more data blocks, respectively, into which the data to be stored is divided;
receive a response to the request from the seed server, the response comprising an indication of at least one server of the plurality of servers for storing the data into a target storage device based in part on respective distances between respective identifiers of the plurality of servers and the two or more hash values of the two or more data blocks; and
send, to the at least one server, at least one request for storing the data into the target storage device;
wherein the identifier for a given one of the plurality of servers is computed as a hash value of feature data associated with the given server, the hash value of the feature data associated with the given server being within a same value range as the two or more hash values of the two or more data blocks.

### Claim 9 (depends on 8)

The client device of claim 8, wherein sending the request to the seed server comprises:
dividing the data into the two or more data blocks;
determining respective hash values of the two or more data blocks;
including the respective hash values of the two or more data blocks in the request; and
sending, to the seed server, the request including the respective hash values of the two or more data blocks.

### Claim 10 (depends on 9)

The client device of claim 9, wherein the number of the at least one server indicated by the seed server corresponds to the number of the two or more data blocks, and wherein sending the at least one request to the at least one server comprises:
generating the at least one request based on the two or more data blocks, wherein one of the at least one request comprises one of the two or more data blocks; and
sending the at least one request to the at least one server, respectively.

### Claim 11 (depends on 8)

The client device of claim 8, wherein the instructions, when executed by the at least one processing unit, further causing the client device to receive at least one response from the at least one server, the at least one response indicating that the at least one server has received the at least one request.

### Claim 12 (depends on 8)

The client device of claim 8, wherein the target storage device comprises a cloud storage device.

### Claim 13 (depends on 8)

The client device of claim 8, wherein the target storage device comprises the at least one server.

### Claim 14

A method for storing data, comprising:
receiving, from a client device communicatively coupled to a plurality of servers, a request for storing data, wherein the request comprises two or more hash values of two or more data blocks, respectively, into which the data to be stored is divided;
determining, based on the request and from the plurality of servers, at least one server for storing the data from the client device into a target storage device; and
sending, to the client device, a response to the request, the response comprising an indication of the at least one server based in part on respective distances between respective identifiers of the plurality of servers and the two or more hash values of the two or more data blocks;
wherein the identifier for a given one of the plurality of servers is computed as a hash value of feature data associated with the given server, the hash value of the feature data associated with the given server being within a same value range as the two or more hash values of the two or more data blocks.

### Claim 15 (depends on 14)

The method of claim 14, wherein the request comprises respective hash values of the two or more data blocks into which the data to be stored is divided, the plurality of servers have respective identifiers, and the identifiers and the respective hash values of the two or more data blocks fall within the same value range, and wherein determining the at least one server from the plurality of servers comprises:
for a data block of the two or more data blocks,
extracting a hash value of the data block from the request;
determining respective distances between the respective identifiers of the plurality of servers and the hash value of the data block; and
selecting, based on the distances and from the plurality of servers, a server for storing the data block into the target storage device.

### Claim 16 (depends on 14)

A computer program product tangibly stored in a computer storage medium and including machine-executable instructions, the machine-executable instructions, when executed by a device, causing the device to perform steps of the method of claim 14.

### Claim 17 (depends on 14)

An apparatus comprises at least one processing unit and at least one memory coupled to the at least one processing unit and storing instructions for execution by the at least one processing unit, the instructions, when executed by the at least one processing unit, causing the apparatus to perform steps of the method of claim 14.

### Claim 18 (depends on 17)

The apparatus of claim 17, wherein the request comprises respective hash values of two or more data blocks into which the data to be stored is divided, the plurality of servers have respective identifiers, and the identifiers and the respective hash values of the at least one data block fall within the same value range, and wherein determining the at least one server from the plurality of servers comprises:
for a data block of the two or more data blocks,
extracting a hash value of the data block from the request;
determining respective distances between the respective identifiers of the plurality of servers and the hash value of the data block; and
selecting, based on the distances and from the plurality of servers, a server for storing the data block into the target storage device.

### Claim 19 (depends on 17)

The apparatus of claim 17, wherein the target storage device comprises a cloud storage device.

### Claim 20 (depends on 17)

The apparatus of claim 17, wherein the target storage device comprises the at least one server.
