U.S. patent application number 16/943940 was filed with the patent office on 2020-11-12 for efficient backup, search and restore.
This patent application is currently assigned to SkyKick, Inc.. The applicant listed for this patent is SkyKick, Inc.. Invention is credited to Corey Brent Caldwell, Robert William Davis, John Dennis, Douglas Handler, Matthew Steven Hintzke, Christopher Rayner, Evan Richman, Todd Schwartz, Bradley Younge.
Application Number | 20200356445 16/943940 |
Document ID | / |
Family ID | 1000004989688 |
Filed Date | 2020-11-12 |
![](/patent/app/20200356445/US20200356445A1-20201112-D00000.png)
![](/patent/app/20200356445/US20200356445A1-20201112-D00001.png)
![](/patent/app/20200356445/US20200356445A1-20201112-D00002.png)
![](/patent/app/20200356445/US20200356445A1-20201112-D00003.png)
![](/patent/app/20200356445/US20200356445A1-20201112-D00004.png)
![](/patent/app/20200356445/US20200356445A1-20201112-D00005.png)
![](/patent/app/20200356445/US20200356445A1-20201112-D00006.png)
![](/patent/app/20200356445/US20200356445A1-20201112-D00007.png)
![](/patent/app/20200356445/US20200356445A1-20201112-D00008.png)
United States Patent
Application |
20200356445 |
Kind Code |
A1 |
Dennis; John ; et
al. |
November 12, 2020 |
EFFICIENT BACKUP, SEARCH AND RESTORE
Abstract
A backup, search, and restore service is provided. The service
can be achieved through a backup system, and a search and restore
server. A user can be enabled to initiate a search request for one
or more data items. A search can be performed by the search and
restore server using metadata for the data items backed up by the
backup system to return the one or more data items. The metadata
for the data items can be generated by the backup system when data
items are backed up by the backup system. The backup system may
back up the data items on an incremental basis. The user can be
enabled to select a data item in the one or more data items for
restoration on the data system. Header information of the selected
data item can be obtained from the data system to determine whether
the restoration is necessary.
Inventors: |
Dennis; John; (Seattle,
WA) ; Richman; Evan; (Seattle, WA) ; Schwartz;
Todd; (Seattle, WA) ; Younge; Bradley;
(Denver, CO) ; Handler; Douglas; (Seattle, WA)
; Caldwell; Corey Brent; (Seattle, WA) ; Hintzke;
Matthew Steven; (Seattle, WA) ; Rayner;
Christopher; (Seattle, WA) ; Davis; Robert
William; (Seattle, WA) |
|
Applicant: |
Name |
City |
State |
Country |
Type |
SkyKick, Inc. |
Seattle |
WA |
US |
|
|
Assignee: |
SkyKick, Inc.
Seattle
WA
|
Family ID: |
1000004989688 |
Appl. No.: |
16/943940 |
Filed: |
July 30, 2020 |
Related U.S. Patent Documents
|
|
|
|
|
|
Application
Number |
Filing Date |
Patent Number |
|
|
15087930 |
Mar 31, 2016 |
10747622 |
|
|
16943940 |
|
|
|
|
62140741 |
Mar 31, 2015 |
|
|
|
Current U.S.
Class: |
1/1 |
Current CPC
Class: |
G06F 2201/84 20130101;
G06F 16/245 20190101; G06F 16/184 20190101; G06F 11/1451 20130101;
G06F 16/951 20190101; G06F 11/14 20130101; G06F 11/1464
20130101 |
International
Class: |
G06F 11/14 20060101
G06F011/14; G06F 16/951 20060101 G06F016/951; G06F 16/182 20060101
G06F016/182; G06F 16/245 20060101 G06F016/245 |
Claims
1. A method of using a server for restoring data items to a data
system from a backup system, the method being performed by the
server and comprising: receiving, over a network from the data
system, from the backup system, metadata information for each of a
plurality of data items, wherein the metadata information provides
a summary about the data item relating to a content of the data
item; receiving, from the client computer, a restoration request
indicating to restore a first data item to the data system; in
response to the restoration request, obtaining, from the data
system, first header information for the first data item and first
metadata information regarding the first data item, wherein the
header information provides a description about the first data
item; comparing first metadata information with the first header
information; determine whether a version of the first data item is
to be restored from the backup system onto the data system based on
a result of the comparison of the first metadata information
regarding the first data item to the first header information; and
when the version of the first data item is determined to be
restored on the data system, sending an instruction to the backup
system to effectuate restoration of the version of the first data
item on the data system.
2. The method of claim 1, wherein the determination whether to
restore the first data item on the data system comprises
determining whether the first data item exists on the data
system.
3. The method of claim 2, wherein, when it is determined that the
first data item does not exist on the data system, the first data
item is determined to be restored on the data system.
4. The method of claim 2, further comprising: when it is determined
that the first data item exists on the data system: determining
whether the restoration request from the user is a specific request
or a batch request; when the restoration request from the user is
determined as being the specific request, the first data item is
determined to be restored on the data system; and when the
restoration request from the user is determined as being the batch
request, the first item is determined not to be restored on the
data system.
5. The method of claim 4, wherein when the restoration request from
the user is determined as being a specific request and the first
data item is determined to be restored on the data system, the
restoration of the first data item on the data system is
effectuated by duplicating the first item on the data system.
6. The method of claim 3, wherein effectuating the restoration of
the first data item on the data system includes causing the backup
system to transmit a copy of the first data item on the data
system.
7. The method of claim 1, wherein the data system is an electronic
mail server.
8. The method of claim 7, wherein the first data item includes at
least one of an electronic mail message, a contact item, a calendar
item, and a task item.
9. The method of claim 7, wherein the first data item includes a
file item.
10. A server for restoring data items to a data system from a
backup system, the server comprising one or more processors
configured by machine-readable instructions to perform: receiving,
over a network from the data system, from the backup system,
metadata information for each of a plurality of data items, wherein
the metadata information provides a summary about the data item
relating to a content of the data item; receiving, from the client
computer, a restoration request indicating to restore the first
data item to the data system; in response to the restoration
request, obtaining, from the data system, first header information
for the first data item and first metadata information regarding
the first data item, wherein the header information provides a
description about the first data item; comparing the first metadata
information with the first header information; determine whether a
version of the first data item is to be restored from the backup
system onto the data system based on a result of the comparison of
the first metadata information regarding the first data item to the
first header information; and when the version of the first data
item is determined to be restored on the data system, sending an
instruction to the backup system to effectuate restoration of the
version of the first data item on the data system.
11. The server of claim 10, wherein the determination whether to
restore the first data item on the data system comprises
determining whether the first data item exists on the data
system.
12. The server of claim 11, wherein, when it is determined that the
first data item does not exist on the data system, the first data
item is determined to be restored on the data system.
13. The server of claim 11, further comprising: when it is
determined that the first data item exists on the data system:
determining whether the restoration request from the first user is
a specific request or a batch request; when the restoration request
from the user is determined as being a specific request, the first
data item is determined to be restored on the data system; and when
the restoration request from the user is determined as being the
batch request, the first item is determined not to be restored on
the data system.
14. The server of claim 13, wherein when the restoration request
from the first user is determined as being a specific request and
the first data item is determined to be restored on the data
system, the restoration of the first data item on the data system
is effectuated by duplicating the first item on the data
system.
15. The server of claim 11, wherein effectuating the restoration of
the first data item on the data system includes causing the backup
system to transmit a copy of the first data item on the data
system.
16. The server of claim 10, wherein the data system is an
electronic mail server.
17. The server of claim 16, wherein the first data item includes at
least one of an electronic mail message, a contact item, a calendar
item, and a task item.
18. The server of claim 16, wherein the first data item includes a
file item.
Description
CROSS-REFERENCES TO RELATED APPLICATIONS
[0001] This application is a continuation of and claims benefit to
U.S. patent application Ser. No. 15/087,930, filed on Mar. 31, 2016
for "EFFICIENT BACKUP, SEARCH AND RESTORE", which claims priority
under 35 U.S.C. .sctn. 119(e) of U.S. Provisional Patent
Application No. 62/140,741, filed Mar. 31, 2015 for "EFFICIENT
CLOUD BACKUP OF SERVER". The disclosures of the above mentioned
applications are hereby incorporated in their entirety by reference
for all purposes.
BACKGROUND
[0002] The disclosure generally relates to data storage and
retrieval in computer networks. Specifically, the disclosure
relates to enhanced methods and systems for backup, versioning,
restoration, and retrieval of data for online messaging,
collaboration, and data storage systems.
[0003] Data-back systems for backing up data storage associated
with a user are generally known in the art. Data items such as
files, email, calendar, contact management, collaboration, customer
relationship management (CRM), customer service portals (CSP),
and/or any other types of data items can be stored in the data
storage and backed up by those systems. In implementations, those
systems typically create restore points or snapshot views of the
data storage in time, such that the user can restore to a previous
restore point when desired. That is, those systems can create a
restore point by backing-up the data storage at certain time point,
and the restore point can be used by the user to restore data items
in the data storage to that time point. However, this restoring
process can be tedious and lengthy. Those systems typically restore
entire data storage to the restore point even when the user only
needs a few files to be restored.
[0004] Therefore, there is a need for efficient backup, search and
restoration for data items. Embodiments of the invention address
this, individually and collectively.
BRIEF SUMMARY
[0005] Embodiments can provide a data backup, search and restore
service that enables a user to restore desired data items. In
accordance with the disclosure, a search and restore interface can
be implemented on a client computer associated with a user. Through
the search and restore interface, the user can be enabled to
initiate a search for one or more data items. For example, the user
can be enabled to input a text string to specify search criteria to
which the data items should match. A search can be then performed
by comparing metadata information regarding individual data items
with the search criteria. One or more data items matching the
search criteria can be obtained as a result of the search, and
metadata describing the one or more matching items can be presented
to the user through the search and restore interface. The user can
then be enabled to select at least one data item in the one or more
data items for restoration on a data system.
[0006] In certain implementations, the data item on the data system
can be restored by comparing the header information for the data
item on the data system and that on the backup system. In those
implementations, the search and restore server can be configured to
determine whether the data item is to be restored on the data
system based on a result of the comparison.
[0007] In accordance with the disclosure, data items stored on a
data system can be efficiently backed-up through a backup system.
The backup system can be configured to back up the data item
individually or in a batch. The backup system can back up a given
data item by storing the data item in one or more storage
locations. Metadata information can be captured and stored by the
backup system to summarize the backed-up data items.
[0008] In certain implementations, for backing-up data items on a
particular data system, the backup system can be configured to send
a request to the data system for headers of data items matching one
or more criteria. The backup system can be configured to then
receive from the data system a set of headers of the data items,
compare the newly received headers with header information for the
data items previously received, and determine from a result of the
comparison a set of data items to be backed-up. The backup system
can be configured to then send a request to the data system for the
determined data items, and receive from the data system the
requested data items.
[0009] Other embodiments are directed to systems and computer
readable media associated with methods described herein.
[0010] A better understanding of the nature and advantages of
embodiments of the present invention may be gained with reference
to the following detailed description and the accompanying
drawings.
BRIEF DESCRIPTION OF THE DRAWINGS
[0011] Some embodiments of the inventive subject matter are
illustrated herein by way of example, and not limitation, in the
figures of the accompanying drawings, in which:
[0012] FIG. 1 illustrates one example of various components working
together for efficient backup of data items in accordance with the
disclosure;
[0013] FIG. 2 illustrates an exemplary implementation of a search
and restore system, and an exemplary implementation of a backup
system shown in FIG. 1;
[0014] FIG. 3 illustrates an exemplary method for backing-up one or
more data items in accordance with the disclosure;
[0015] FIG. 4 illustrates one exemplary implementation of the
method illustrated in FIG. 3;
[0016] FIG. 5 illustrates one exemplary method for enabling a user
to search and restore one or more data items;
[0017] FIG. 6 illustrates an exemplary method for encrypting and
storing a data item in accordance with the disclosure;
[0018] FIG. 7A illustrates an exemplary interface enabling a user
to initiate a search for one or more data items matching a search
criteria specified by the user;
[0019] FIG. 7B illustrates another exemplary interface enabling a
user to restore one or more data items on the data system shown in
FIG. 1; and
[0020] FIG. 8 shows a block diagram of an example computer system
usable with system and methods according to embodiments of the
present invention.
TERMS
[0021] Data items that can be backed-up, searched and restored in
accordance with the disclosure can include file items, electronic
mail items, and/or any other type of data items. A file item may be
referred to a file resource on a file system for persistently
storing information, which may be available to a computer program.
An electronic mail item may be referred items implemented and
provided by an electronic mail program. Examples of an electronic
mail item can include an electronic mail message, a calendar item,
a contact item, a task item, a contact item, a note item, just to
name a few.
[0022] A data system is a system that can store data items for use
by a user through the user's computer. Examples of a data system
may include a file system, a network storage system, an electronic
mail system, a cloud-based system, an application server and/or any
other data systems. In implementations, the data system can be
configured to include a data storage to store the data items; or
the data system can be configured to store the data items on one or
more remote storage locations operatively connected to the data
system, for example a remote data center, a remote cloud server or
any other types of remote data storage.
[0023] An electronic mail system (email system herein) is a system
that facilitates exchanging digital messages between users.
Examples of an email server can include Microsoft Exchange
Server.RTM., Lotus Notes.RTM. server, Gmail server, Unix mail
server, just to name a few. An electronic mail client application
(email client herein) is a computer program executed on the client
computer of a user to enable a user to send and receive digital
messages or emails. Emails are stored in the user's mailbox on the
remote email server until the user's email client requests them to
be downloaded to the user's computer. The email client can be set
up to connect to multiple mailboxes at the same time and to request
the download of emails either automatically, such as at pre-set
intervals, or the request can be manually initiated by the user.
The email client can contain a user interface to display and edit
text. The email client can be set up automatically to connect to
the user's mail server. Examples of an email client can include
Microsoft Outlook.RTM., Lotus Notes client, Unix Pine, Google web
mail client, just to name a few.
[0024] Metadata is data that describes one or more data items.
Metadata for a particular data item can summarize basic information
about the data item, such as one or more locations where the data
item is stored during the backup process, a timestamp associated
with the data item, a size of the data item, one or more keywords
in the data item, a category of the data item and/or any other
suitable information that can summarize the data item.
[0025] Header information, or header, of a data item may be
referred to as supplemental data placed at the beginning of a block
of data in the data item. A header of the data item may include
information describe the data in the data item, such as a size of
the data, last modification time of the data, a name of the data
item (e.g., a file name, a task name, a contact name), just to name
a few. The header of the data item can provide a list of technical
details about the data item. For example, when the data item is an
email message, the header information can provide information
specifying a sender of the message, a program used to compose the
message, one or more email systems the message passed through on
its way to the recipient, and/or any other information.
DETAILED DESCRIPTION
[0026] Embodiments can provide a backup, search and restoration
service enabling a user to restore one or more data items on a data
system. The data system can be configured to provide services such
as messaging (email, calendar, contact management), online
collaboration, CRM, CSP and online storage. Some examples of these
data systems can include, for example, Office 365 Exchange, Office
365 SharePoint, Office 365 Project, OneDrive, Box, Microsoft
Dynamics CRM, and Salesforce. Embodiments can enable a user to
search and restore one or more data items on the data system. A
user interface can be provided and implemented on a computer
associated with the user. The interface can enable the user to
initiate a search for one or more data items matching a search
criteria specified by the user through the interface. A search can
be then performed by comparing metadata information regarding
individual data items with the search criteria. One or more data
items matching the search criteria can be obtained as a result of
the search, and metadata describing the one or more matching items
can be presented to the user through the search and restore
interface. The user can then be enabled to select at least one data
item in the one or more data items for restoration on a data
system. The data item on the data system can be restored by
comparing the header information for the data item on the data
system and that on the backup system. In those implementations, the
search and restore server can be configured to determine whether
the data item is to be restored on the data system based on a
result of the comparison.
[0027] In certain embodiments, data items stored on a data system
can be efficiently backed-up through a backup system. The backup
system can be configured to back up the data item individually or
in a batch. The backup system can back up a given data item by
storing the data item in one or more storage locations. Metadata
information can be captured and stored by the backup system to
summarize the backed-up data items.
[0028] With the operations for efficiently backing-up, searching
and restoring one or more data items having been generally
described, an architecture of various systems and components
working together to achieve such operations will be described and
illustrated in the section below.
I. Backup, Search and Restore System
[0029] The efficient backing-up, searching and restoring data item
service in accordance with the disclosure can be achieved with a
variety of system architectures, which may include a plurality of
client computers, one or more data systems, one or more servers
configured to provide a backup service, one or more servers
configured to provide a search service, one or more servers
configured to provide a restore service, one or more remote data
storage servers, and/or any other components. It should be
understood that functions or operations implemented by separate
servers or systems in the embodiments described herein can be
combined and implemented by a single server or system in some other
embodiments; or that functions or operations implemented by a
single server or system in the embodiments described herein can be
separately implemented by different servers and/or systems in some
other embodiments.
[0030] FIG. 1 illustrates one example of various components working
together for efficient backing-up, searching and restoring data
items in accordance with the disclosure. In this example, a backup
system 102, a search and restore server 104, a data system 106, a
plurality of file storage systems 108a-n, and a plurality of client
computers 110a-n are shown for achieving the efficient backing-up,
searching, and restoring data items in accordance with the
disclosure.
[0031] The backup system 102 can be configured to perform
operations to backup data items on the data system 106. The
operations performed by the backup system can include managing the
metadata information regarding each of the data items in a memory
of the server. The operations performed by the backup system can
include taking a snapshot view of the data system by obtaining
header information for the data items from the data system 106. The
operations performed by the backup system can include performing
header information for the data items to determine one or more data
items to be backed up. The operations performed by the backup
system can include determining one or more data items currently
backed-up to be deleted due to changes on the data system 106. The
operations performed by the backup system can include providing an
interface for implementation on a client computer 110, such as
client computer 110a or 110n, and/or any other operations.
[0032] The search and restore server 104 can be configured to
perform operations to search and restore one or more data items on
the data system 106 in response to a search request from a client
computer 110, such as client computer 110a or 110n. The search and
restore operations performed by the search and restore server 104
can include providing a user interface that enables a user to
specify one or more criteria for initiating the search request. In
some examples, the search and restore operations performed by the
search and restore server 104 can include performing a search of
the metadata information managed by the backup system 102 to
identify the one or more matching items, thereby obtaining a result
set including a first data item. In some examples, the search and
restore operations performed by the search and restore server 104
can include providing first metadata regarding a first data item to
a client computer associated with the user, such as 110a or 110n,
for presentation to the user. In some examples, the search and
restore operations performed by the search and restore server 104
can include receiving, from the client computer, a restoration
request indicating to restore the first data item to the data
system. In some examples, the search and restore operations
performed by the search and restore server 104 can include
performing an analysis to determine which data items or which
versions of the data items requested by the user are to be restored
on the data system 106, and/or any other operations.
[0033] The data system 106 can be configured to store data items
for use by the user through the client computer 110, such as client
computer 110a or 110n. Examples of a data system 106 may include a
file system, a network storage system, an electronic mail system, a
cloud-based system, an application server and/or any other data
systems. The data system 106 can provide one or more services
including messaging (email, calendar, contact management), online
collaboration, CRM, CSP and online storage. Some examples of these
data systems can include, for example, Office 365 Exchange, Office
365 SharePoint, Office 365 Project, OneDrive, Box, Microsoft
Dynamics CRM, and Salesforce. In implementations, the data system
106 can be configured to include a data storage to store the data
items; or the data system 106 can be configured to store the data
items on one or more remote storage locations operatively connected
to the data system 106, for example a remote data center, a remote
cloud server or any other types of remote data storage.
[0034] The file storage 108a to 108n can be configured to store
data items for the backup service provided by the backup system
102. In some implementations, the backup system 102 may be
configured to store a particular data item entirely on a file
storage, such as file storage 108. In some other implementations,
the backup system 102 may be configured to divide the data item
into multiple pieces and store the multiple pieces across one or
more different file storage 108a to 108n. In those implementations,
the metadata information regarding the data item may include
information indicating how the data item can be assembled from the
multiple pieces stored on the file storage 108a to 108n.
[0035] The client computers 110a-n can be configured to present one
or more data items requested by an associated user; to implement an
interface to enable a user to initiate a search request for one or
more data items; initiate a restoration request to enable the user
to request one of the one or more data items to be restored; and/or
any other operations. The client computers 110a-n can include a
mobile device such as an tablet, a smart phone, a phablet, and/or
any other type(s) of mobile devices; a laptop computer, a desktop
computer, a netbook, a mainframe computer, a terminal, a game
console, a network console, and/or any other type(s) of client
computer.
[0036] It should be understood the various devices, systems and
servers shown in FIG. 1 can be configured with each other over a
computer network or locally. For example, the client computer 110a
or 110n can be configured to communicate with the data system 106
through an intranet provided by a business; the backup system 102
can be configured to communicate with data system 106 through the
internet; and the backup system 102 can configured to communicate
with search and restore server 104 via a cable.
[0037] FIG. 2 illustrates an exemplary implementation of a search
and restore server 104 and an exemplary implementation of a backup
system 102 shown in FIG. 1. As shown, in some implementations, as
in the example shown in FIG. 2, the backup system 102 can include
one or more of a processor 202 configured to execute program
components, which can include an interface component 204, a
snapshot view component 206, a metadata component 208, a backup
component 210, and/or any other components.
[0038] The interface component 204 can be configured to provide
user interfaces for implementation on client computers 110a to
110n. The user interfaces provided by interface component 204 may
include a graphical user interface (GUI), a voice interface, a
gesture interface, and/or any other type of user interface. The
user interfaces provided by the interface component 204 may include
field controls enabling a user to specify one or more criteria for
initiating a request to search for one or more matching data items.
An example of such a user interface is illustrated in FIG. 7A. The
user interfaces provided by the interface component 204 may include
field controls enabling a user to initiate a restoration request
indicating to restore one or more data items on the data system
106. An example of such a user interface is illustrated in FIG.
7B.
[0039] The snapshot view component 206 can be configured to take a
snapshot view of the data system 106, which can represent a current
state of the data system 106. In some implementations, taking the
snapshot view of the data system 106 can include obtaining header
information for the data items on the data system 106. For a
particular data item on the data system 106, the header information
include information describing the data in the data item, such as a
size of the data, last modification time of the data, a name of the
data item (e.g., a file name, a task name, a contact name), and the
like. In those implementations, the header information for the data
items on the data system 106 may be readily provided by the data
system 106. However, this is not necessarily the only case. In some
implementations, the data system 106 may be configured to generate
the header information for the data items dynamically on request.
In any case, a snapshot view of the data system 106 can be
scheduled and stored in a daily job queue. In one example, the
snapshot view of the data system 106 is scheduled to be taken six
times throughout a day.
[0040] As mentioned, the snapshot view of the data system 106 can
represent a current state of the data system 106. For example, if
the data system 106 is an electronic mail system, the data system
106 may store email messages, calendar items, task items, contact
items, and/or any other data items for individual users. In that
example, header information for those data items may be readily
provided by the data system 106. For instance, the header
information for an email message can include information indicating
a sender of the email message, a subject of the email message, a
date and time when the email message is received, a size of the
email message, and/or any other header information provided by the
data system 106. As another example, if the data system 106 is a
file system, the data system 106 may store files as data items. In
that example, header information for a particular file may indicate
a size of the file, a filename of the file, a data and time when
the file is last modified or created, and/or any other header
information for the particular file.
[0041] In some implementations, the snapshot view component 206 can
be configured to take a full snapshot view or a fast snapshot view
of the data system 106. A full snapshot view of the data system 106
may contain header information for all of the data items on the
data system 106 when the full snapshot view of the data system 106
is taken. A fast snapshot view of the data system 106 may contain
header information for only the data items that have been modified,
added or deleted since the last full snapshot view was taken. In
those implementations, the snapshot view component 206 can be
configured to determine whether a current full snapshot view of
data system 106 as maintained by the backup system 102 was taken
before a predetermined time period, e.g., a day. For example, the
snapshot view component 206 can be configured to take a full
snapshot view if the existing full snapshot view was taken more
than one day ago; and to take a fast snapshot view if the existing
full snapshot view was taken less than one day.
[0042] In some implementations, the snapshot view component 206 can
be configured to take the full snapshot view of the data system 106
in a hierarchical fashion. For example, the snapshot view component
206 can be configured to obtain headers for the data items at a
first level (e.g. root level directories and/or file(s), email
inbox, master calendar), at a second level (e.g., second level
directories and/or file(s), email messages and/or folders, calendar
items), at a third level (e.g., third level directories and/or
file(s), email messages in the folders and/or subfolders of the
folders), task items in the calendar items), and so on.
[0043] In some implementation, the snapshot view component 206 can
be configured to take the fast view of the data system 106 also in
a hierarchical fashion. For example, the snapshot view component
206 can be configured to obtain headers for the data items at a
first level (e.g. root level directories and/or file(s), email
inbox, master calendar) that have been updated (e.g. modified,
deleted or added) since the last full snapshot view was taken, at a
second level (e.g., second level directories and/or file(s), email
messages and/or folders, calendar items) that have been updated
since the last full snapshot view was taken, at a third level
(e.g., third level directories and/or file(s), email messages in
the folders and/or subfolders of the folders) that have been
updated since the last full snapshot view was taken, and so on.
[0044] The metadata component 208 can be configured to manage
metadata for data items that have been backed up by the backup
system 102. The metadata for a particular data item can summarize
basic information about the data item, such as one or more
locations where the data item is stored during the backup process,
a timestamp associated with the data item, a size of the data item,
one or more keywords in the data item, a category of the data item
and/or any other suitable information that can summarize the data
item. Managing metadata for the data items may include generate
metadata for a new data item to be backed up, modifying metadata
for an existing data item that have been modified at the data
system 106 (e.g., size change, location change, and so on),
deleting metadata for a data item that has been deleted on the data
system 106, updating and maintaining a master index of metadata for
the data items backed up by the backup system 102, obtaining
metadata for a specific data item backed up by the backup system
102, and/or any other operations. As illustration, the metadata
component 208 can be configured to generate metadata for the new
data item before storing the new data item on one or more file
storage 108a-n. The metadata component 208 can be configured then
add the newly generated metadata the master index so that the new
data back item can be efficiently accessed.
[0045] In some implementations, the metadata component 208 can be
configured to compare header information regarding a particular
data item on the data system 106 with the metadata for that data
item on the backup system to determine whether the metadata for
that data item needs to be updated. For example, if a particular
file on the data system 106 has been modified, the metadata
component 208 can capture such a change and update the metadata for
that file to reflect the change--e.g., by updating the file size
information in the metadata. The metadata component 208 can also be
configured to add metadata for a data item that is newly created on
the data system.
[0046] In implementations, the metadata component 208 can be
configured to store the metadata for the data items locally on a
storage of the backup system 102. For example, the metadata
component 208 can be configured to store metadata information for a
data item to be backed up on a local storage of the backup system
102. However, this is not necessarily the only case. In some
implementations, the metadata component 208 can be configured to
store metadata information for the data item on one or more file
storage 108, such as file storage 108a-n.
[0047] The backup component 210 can be configured to compare header
information header information for the data items in the current
snapshot view and those in the last snapshot view to determine one
or more data items to be backed up. As illustration, the header
information for a given data item on the data system 106 may
indicate a size of the data item, a date and time of the data item,
and/or any other identifying information that are dynamically
updated when the data item is modified. In one implementation, a
hash representing a combination of multiple data item attributes
(such as size, date and time, and other information) may be
included in the header information for the data item.
[0048] For example, by comparing the header information, it can be
determined whether one or more attributes, such as size or date and
time, have changed by such a comparison. As another example, it can
be determined that a data item has been added to the data system
106. If it is determined that a change to the data item or the
addition of the data item has taken place as indicated by a result
of the comparison, the backup component 210 can be configured to
download the data item. In implementations, the data items can be
versioned, and the backup component 210 can be configured to
download the current version of the data item on the data system
106 and replace the previous version of the data item with the
current version of the data item.
[0049] In some implementations, the backup component 210 can be
configured to divide a given data item that is to be backed up into
multiple parts. In those implementations, the multiple parts of the
given data item can be stored on one or more file storage 108a to
108n. An identification of each of the multiple part can be given
by the backup component 210 to indicate a position of the part with
respect to the entire data item. For example, a first part of the
data item can be given an identification "part 1: filename of the
data item", a second part of the data item can be given an
identification "part 2: filename of the data item", a third part of
the data item can be given an identification "part 3: filename of
the data item", and so on.
[0050] In some implementations, the backup component 210 can be
configured to encrypt and compress the data items when storing the
data items on the file storage 108a-108n. Conventional encryption
and compression algorithms can be used. An exemplary process for
encrypting and compressing the data items will be described in FIG.
6.
[0051] With the exemplary implementation of the backup system 102
having been described, an exemplary implementation of the search
& restore server 104 will be provided. As shown, the search
& restore server 104 can include one or more of a processor 212
configured to execute program components, which can include a
search component 214, a restore component 216, a metadata lite
component 218, and/or any other components.
[0052] The search component 214 can be configured to perform a
search of the metadata information to identify the one or more
matching data items that match one or more criteria specified by a
user through a search request, thereby obtaining a result set. For
example, the user search request may search for data item(s) from a
particular sender. In some implementations, as in the
implementation shown in FIG. 2, the search component 214 can
receive the search request from the client computer 110, such as
110a or 110n, via the backup system 102. That is, the backup system
102, via the interface component 204, can first receive the search
request from the client computer 110, and then forward the search
request to the search and restore server for execution. However,
this is not necessarily the only case. In some other
implementations, the search component 214 can be configured to
receive the search request directly from the client computer 110.
After receiving such a request, the search component 214 can
generate instructions to search metadata information managed by
metadata component 208, and obtain a result set. The result set can
contain metadata for one or more data items that match the search
criteria (data items from a particular sender). The search
component 214 can be configured to provide the metadata for the
data items in the result set to the client computer for
presentation to the user.
[0053] The restore component 216 can be configured to receive a
restoration request indicating to restore a particular data item on
the data system 106, and generate and send instructions to the
backup system 102 to restore the data item on the data system 106.
To achieve this, the restore component 216 can be configured to
obtain, from the data system 106, header information for the
requested data item, and obtain, from the backup system, metadata
information for the requested data item. The restore component 216
can be configured to then compare the obtained header information
and the metadata information for the data items. Based on a result
of the comparison, the restore component 216 can be configured to
determine whether a previous version of the data item needs to be
restored from the backup system 102 onto the data system 106. When
the previous version of the requested data item is to be restored
on the data system 106, the restore component 216 can be configured
to send an instruction to the backup system 102 to effectuate the
restoration of the requested data item on the data system.
[0054] In some implementations, the restore component 216 can be
configured to determine whether the data item is specifically
requested to be restored by the user. When the restore component
216 determines that the restoration request for the data item is
specifically requested, the restore component 216 can be configured
to restore the requested data item from the backup system 102 onto
the data system 106 even if the requested data item exists on the
data system. The user can specifically request the data item to be
restored when the user only selects that item to be restored in the
user interface. On the other hand, the user can request the data
item to be restored in a batch, i.e., not specifically, when the
user selects an entire container, for example an email inbox or a
file folder, to be restored, wherein the container comprises the
data item. As illustration, the user may request his/her email
inbox, which can include a particular email message, to be
restored. This can be considered as a batch restoration request. On
the other hand, the user may request, specifically, that email
message to be restored, which can be considered a specific
restoration request.
[0055] As another illustration, the user may request a file folder,
which can include a particular file, to be restored. This can be
considered as a batch restoration request. The user can also
request, specifically, the file to be restored, which can be
considered as specific restoration request. In response to a
specific restoration request, the restore component 216 can be
configured to restore a version of the requested data item from the
backup system 102 onto the data system 106 regardless whether a
version of the requested data item has already existed on the data
system 106. For example, if the user specifically requests an email
message with a particular subject to be restored and the data
system 106 has that message, the restore component 216 can be
configured to still restore the backed up version of that message
from the backup system 102 onto the data system 106 without
removing the version on the data system 106.
[0056] The metadata lite component 218 can be configured to
maintain a sub-index of the metadata managed by the backup system
102 and to facilitate access to the metadata using the sub-index.
Maintaining the sub-index of the metadata by the metadata lite
component 218 can include synchronizing with master index of the
metadata maintained by the backup system 102 periodically, updating
the sub-index of the metadata according to the master index, and/or
any other operations. The metadata lite component 218 can be
configured to obtain access to the metadata using the sub-index and
providing the metadata to the search component 214 for performing
the search as mentioned above. For example, the search component
214 can be configured to employ the metadata lite component 218 to
gain access to the metadata stored on the file storage 108a-n.
[0057] It should be understood the function and operations
attributed to various components of the backup system 102, and the
search and restore server 104 described above are merely
illustrative. In some other embodiments, some of these components
can be combined or further divided. It should also be understood
the architectural arrangement of the backup system 102, and search
and restore server 104 described above is also illustrative. In
some other examples, the backup system 102, and search and restore
server 104 may be combined as one system. In some still some other
examples, the search and restore server 104 described above may be
achieved through separate servers, e.g., a search server and a
restore server. In yet some other examples, the backup system 102
may comprise multiple servers implementing the components described
above as attributed to the backup system 102. For instance, the
backup system 102 may comprise a web server implementing the
interface component 204, a backup server implementing the backup
component 210, a data management server implementing the snapshot
view component 206 and the metadata component 208.
II. Storage and Restoration Operations
[0058] With various exemplary components for achieving efficient
back up, search and restore service in accordance with the
disclosure having been generally described, this section will
provide some details about operations that can be implemented by
those components.
[0059] A. Obtaining Data Items and Metadata
[0060] Attention is now directed to FIG. 3, where an exemplary
method 300 for backing-up one or more data items in accordance with
the disclosure is illustrated. The operations of method 300
presented below are intended to be illustrative. In some
embodiments, method 300 may be accomplished with one or more
additional operations not described and/or without one or more of
the operations discussed. Additionally, the order in which the
operations of method 300 are illustrated in FIG. 3 and described
below is not intended to be limiting.
[0061] In some embodiments, method 300 may be implemented in one or
more processing devices (e.g., a digital processor, an analog
processor, a digital circuit designed to process information, an
analog circuit designed to process information, a state machine,
and/or other mechanisms for electronically processing information).
The one or more processing devices may include one or more devices
executing some or all of the operations of method 300 in response
to instructions stored electronically on an electronic storage
medium. The one or more processing devices may include one or more
devices configured through hardware, firmware, and/or software to
be specifically designed for execution of one or more of the
operations of method 300.
[0062] At 302, a snapshot view of a data system can be taken. The
snapshot view taken at 302 can represent a current state of the
data system. In some implementations, taking the snapshot view of
the data system at 302 can include obtaining header information for
the data items on the data system. In some exemplary
implementations, operations involved in 302 can be performed by a
snapshot view component the same as or substantially similar to the
snapshot view component 206 described and illustrated herein.
[0063] At 304, metadata for data items that have already been
backed up can be obtained. The metadata obtained at 304 can
summarize basic information about the data items, such as one or
more locations where the data items are stored during the backup
process, a timestamp associated with the data items, a size of the
data items, one or more keywords in the data items, a category of
the data items and/or any other suitable information that can
summarize the data items. In some exemplary implementations,
operations involved in 304 can be performed by a metadata component
the same as or substantially similar to the metadata component 208
described and illustrated herein.
[0064] At 306, one or more data items that are newer than the last
snapshot view taken can be determined. This can involve comparing
the current snapshot view taken 302 and the last snapshot view.
These data items can include data items that have been modified,
added, or deleted on the data system since the last snapshot view
was taken. In some exemplary implementations, operations involved
in 306 can be performed by a backup component the same as or
substantially similar to the backup component 210 described and
illustrated herein.
[0065] At 308, the header information for the data items determined
at 306 can be compared with the metadata information obtained at
304 to determine metadata for one or more data items on the backup
system need to updated. In some exemplary implementations,
operations involved in 308 can be performed by a metadata component
the same as or substantially similar to the metadata component 208
described and illustrated herein.
[0066] At 310, metadata for the one or more data items are updated
as determined by 308. In some exemplary implementations, operations
involved in 310 can be performed by a metadata component the same
as or substantially similar to the metadata component 208 described
and illustrated herein.
[0067] At 312, data items determined at 306 can be downloaded from
the data system. In some exemplary implementations, operations
involved in 312 can be performed by a backup component the same as
or substantially similar to the backup component 210 described and
illustrated herein.
[0068] At 314, each data items downloaded at 312 can be encrypted
and compressed. An exemplary process for encrypting and compressing
the data items will be described in FIG. 6. In some exemplary
implementations, operations involved in 314 can be performed by a
backup component the same as or substantially similar to the backup
component 210 described and illustrated herein.
[0069] At 316, each data items that have been downloaded, encrypted
and compressed can stored on file storage. In some exemplary
implementations, operations involved in 316 can be performed by a
backup component the same as or substantially similar to the backup
component 210 described and illustrated herein.
[0070] At 318, one or more search jobs in progress can be updated
with the metadata updated at 310. For example, a search job in
response to a user search request for one or more data items
matching user specified criteria may be in progress when the
metadata is updated at 310. As described above, such a search job
examines the metadata to determine a result set, and the search job
needs to be updated when the metadata is updated. In
implementations, the search job can be suspended temporarily when
the metadata is being updated at 310 or a configuration file of the
search job can be updated to use the modified metadata. In some
exemplary implementations, operations involved in 318 can be
performed by a backup component the same as or substantially
similar to the backup component 210 described and illustrated
herein.
[0071] FIG. 4 illustrates one exemplary implementation of method
300 by the backup system 102 shown in FIG. 1. In FIG. 4, the backup
system 102 sends a request to the data system 106 for header
information of files matching a specified set of criteria. The
backup system 102 can receive from the data system 106 file headers
matching the set of one or more criteria. The header can be used to
retrieve a system-specific identifier for the file and its modified
date. The backup system can analyze the headers received to
determine a set of files to request by analyzing the headers. The
header can be used to compare the live file to files in the backup
medium and to recognize if any specific files have gone missing
since the last snapshot view taken. The backup system 102 can then
send a request to the data system 106 for the files. The data
system 106 can respond with the requested files.
[0072] As mentioned above, the backup system 102 can be configured
to handle versioned backup. The backup system 102 may request
header information from the data system and look at the data stored
and its header information and use the header information to
compare against the data stored in the backup to see what is
already stored and what data has newer versions available. This can
be done by analyzing data stored in headers to look for the
revision number, variation number or similar of the last updated
date for items stored.
[0073] In implementations, the backup system 102 may roll
recursively through a folder structure of a data system 106. For
example, the backup system 102 may enumerate the top of a folder
and then scroll recursively folder by folder. The backup system 102
may choose to only ask for a certain number file headers per folder
or per request. For example, when recursively scrolling through a
folder structure, the backup system 102 may ask for a batch of 100
file headers. If there are more than 100 files in a folder, then
the backup system may cycle through a folder batch by batch. If
there are fewer than 100, then the backup system may ask for more
file headers from the next folder to be searched. Once a list of
items is identified for which there are newer versions available,
those files to be retrieved can similarly be requested. The
requests for the matching files may be for individual files or
batched.
[0074] The request for file headers may ask for the first set
number of files that fit a particular set of criteria. The request
may choose to specify to ignore hidden files or other specific
system files as well. The request may ask for files added, modified
or deleted since a certain time, for example the last 4 hours or
day. Queries can consist of just those files updated in over the
last 4 hours, or a fuller scan for all changes, including deletes
and additions in the last 24 hours.
[0075] B. Enabling a User to Search and Restore a Data Item
[0076] FIG. 5 illustrates one exemplary method 500 for enabling a
user to search and restore one or more data items. In some
embodiments, method 500 may be accomplished with one or more
additional operations not described and/or without one or more of
the operations discussed. Additionally, the order in which the
operations of method 500 are illustrated in FIG. 5 and described
below is not intended to be limiting.
[0077] In some embodiments, method 500 may be implemented in one or
more processing devices (e.g., a digital processor, an analog
processor, a digital circuit designed to process information, an
analog circuit designed to process information, a state machine,
and/or other mechanisms for electronically processing information).
The one or more processing devices may include one or more devices
executing some or all of the operations of method 500 in response
to instructions stored electronically on an electronic storage
medium. The one or more processing devices may include one or more
devices configured through hardware, firmware, and/or software to
be specifically designed for execution of one or more of the
operations of method 500.
[0078] At 502, a search request can be received from a user. The
search request from the user can specify one or more search
criteria for one or more data items. For example, the search
request can specify the user is looking for email messages with
particular subject, particular content, from a particular sender,
and so on. As another example, the search request can specify the
user is looking for a set of files with particular content or
created after a certain time and date. In some exemplary
implementations, operations involved in 502 can be performed by a
backup component the same as or substantially similar to the backup
system 102 described and illustrated herein.
[0079] At 504, a search can be performed to obtain one or more data
items matching the searching criteria specified in the search
request received at 502. The search performed at 504 can involve
searching metadata information managed by the backup system for the
one or more matching items. At 504, the metadata for the one or
more matching items can be provided to a client computer for
display to the user. In some exemplary implementations, operations
involved in 504 can be performed by a search component the same as
or substantially similar to the search component 214 described and
illustrated herein.
[0080] At 506, an indication to restore a particular data item in
the one or more matching items can be received from the user. For
example, the indication received at 506 can indicate that the user
desires to restore a particular email message from a specific
sender. In some exemplary implementations, operations involved in
506 can be performed by a restore component the same as or
substantially similar to the restore component 216 described and
illustrated herein.
[0081] At 508, header information for the data item requested at
506 can be obtained from the data system and compared with the
header information for the data item obtained from the previous
snapshot view. This comparison can be used to determine whether the
data item requested at 506 exists on the data system. In some
exemplary implementations, operations involved in 508 can be
performed by a restore component the same as or substantially
similar to the restore component 216 described and illustrated
herein.
[0082] At 510, a decision can be made whether data item requested
at 506 exists on the data system. As shown, in the case when it is
determined that the data item requested at 506 does not exist on
the data system, the process proceeds to 514, where the requested
data item is restored on the data system. As also shown, in the
case when it is determined that the data item requested at 506
exists on the data system, the process proceeds to 512 for further
processing. In some exemplary implementations, operations involved
in 510 can be performed by a restore component the same as or
substantially similar to the restore component 216 described and
illustrated herein.
[0083] At 512, a decision can be made whether the restoration
request for the data item as received at 506 is a specific request.
As mentioned above, the restoration request can be a specific
request when the user when the user only requests that item to be
restored in the user interface; and, by contrast, the user can
request the data item to be restored in a batch, i.e., not
specifically, when the user selects an entire data container to be
restored, wherein the data container comprises the data item. As
shown, in the case when it is determined that the restoration
request is not a specific request, the process proceeds to 516
where the request data item is not restored. As also shown, in the
case when it is determined that the restoration request is a
specific request, process proceeds to 514. In some exemplary
implementations, operations involved in 512 can be performed by a
restore component the same as or substantially similar to the
restore component 216 described and illustrated herein.
[0084] At 514, the requested data item is restored. In
implementations, 514 can involve creating a new version of the data
item on the data system and copy the content of the version
currently stored by the backup system to the new version. In
certain situations, the data item can be duplicated on the data
system in doing so when the restoration request is a specific
request. In some exemplary implementations, operations involved in
512 can be performed by a restore component the same as or
substantially similar to the restore component 216 described and
illustrated herein.
[0085] C. Encrypting and Compressing a Data Item
[0086] As mentioned above, in some implementations, a data item may
be encrypted and compressed by the backup system 102 before it is
stored in one or more of file storage 108a-n. FIG. 6 illustrates an
exemplary method 600 for encrypting and storing a data item in
accordance with the disclosure. In some embodiments, method 600 may
be accomplished with one or more additional operations not
described and/or without one or more of the operations discussed.
Additionally, the order in which the operations of method 600 are
illustrated in FIG. 6 and described below is not intended to be
limiting.
[0087] In some embodiments, method 600 may be implemented in one or
more processing devices (e.g., a digital processor, an analog
processor, a digital circuit designed to process information, an
analog circuit designed to process information, a state machine,
and/or other mechanisms for electronically processing information).
The one or more processing devices may include one or more devices
executing some or all of the operations of method 600 in response
to instructions stored electronically on an electronic storage
medium. The one or more processing devices may include one or more
devices configured through hardware, firmware, and/or software to
be specifically designed for execution of one or more of the
operations of method 600.
[0088] At 602, the backup system receives a first data stream from
the server as part of a backup of a set of files stored on the
server. The system may acquire a network stream that represents a
file to be stored from the set of files, and as it is pulling in
that stream in, it may break the stream up into chunks.
[0089] At 604, the system separates the first data stream into a
plurality of chunks. For each of those chunks, the system may
assign it an ID or label to know where it fits in to the whole
stream.
[0090] At 606, for each chunk of the plurality of chunks, the chunk
is encrypted, and the chunk is stored in a staging area. In one
embodiment, the chunk compressed, encrypted, and then key hashed
(e.g., using keyed-hash message authentication code (HMAC) of the
encrypted chunk).
[0091] In one embodiment, the staging area is not in working
memory, so as to support files that may have their combined chunk
size far exceed working memory.
[0092] At 608, a first set of chunks is identified that correspond
to the file to be stored. When all the blocks are finished being
copied, a request can be made to the storage system of the staging
area, where the request indicates the set of blocks that make up
the single file. In one implementation, the storage system is Azure
blob storage.
[0093] At 610, the first set of chunks are labeled as corresponding
to the file to be stored onto one or more of file storage 108a-n.
For example, the first set of chunks can be stored on a number of
different file storage 108a-n. In this way, security can be
achieved such that in case when one or few of file storage 108a-n
are compromised, an intruder will not be able to assemble the
entire file with the partial chunks of the files stored on the
compromised file storage.
[0094] At 612, the first set of chunks and the corresponding hashes
are stored in a persistent backup storage with the labels
identifying the first set of chunks as corresponding to the first
file.
[0095] D. User Interfaces
[0096] FIG. 7A illustrates an exemplary interface 700 enabling a
user to initiate a search for one or more data items matching a
search criteria specified by the user. In some implementations, the
interface 700 can be provided by interface component 204 and
implemented on a client computer, such as client computer 110a or
110n. As shown, interface 700 can comprise various controls, such
as a search input box 702, a search button 704, a select button
706, a dropdown menu 708 and/or any other controls. The search
input box 702 can be used to enable the user to specify a search
text string indicating one or more search criteria. For example,
the search criteria can indicate email messages with particular
content from a particular sender.
[0097] The search button 704 can be used to enable the user to
initiate a search request with the search criteria specified in the
input box 702 to be performed. The dropdown menu 708 can be used to
enable the user to select one or more types of data items to be
searched using the search criteria. For example, the first data
item type as shown can be email message, the second data item type
can be calendar items, the third data item type can be task items,
and nth data item type can be files. The select button 706 can be
used to enable the user to select a particular data item type for
the search request. For example, the user can select the email
message such that the search request is for email messages matching
the search criteria specified in the search input box 702.
[0098] FIG. 7B illustrates another example of interface 700
enabling a user to restore one or more data items on the data
system. In this example, the interface 700 shown results from the
search initiated by the interface shown in FIG. 7A. As shown, the
interface 700 can comprise a metadata information display area 712.
The display area can be configured to display metadata for data
items that match the search criteria specified by the user in the
input box 702, such as the data items 714a-n. As described above,
the metadata displayed in area 712 can be provided by the backup
system 102 via the search and restore server 104. As also shown,
the user can be enabled to select one or more items displayed in
the area 712, such as the first data item 714a and 714b as
indicated by the dotted box. After selecting the desired data items
for restoration, the user can be enabled to initiate a restoration
request to restore the selected data items by acting on restore
button 710.
III. Computer System
[0099] Any of the computer systems mentioned herein may utilize any
suitable number of subsystems. Examples of such subsystems are
shown in FIG. 8 in computer apparatus 10. In some embodiments, a
computer system includes a single computer apparatus, where the
subsystems can be the components of the computer apparatus. In
other embodiments, a computer system can include multiple computer
apparatuses, each being a subsystem, with internal components.
[0100] The subsystems shown in FIG. 8 are interconnected via a
system bus 75. Additional subsystems such as a printer 74, keyboard
78, storage device(s) 79, monitor 76, which is coupled to display
adapter 82, and others are shown. Peripherals and input/output
(I/O) devices, which couple to I/O controller 71, can be connected
to the computer system by any number of means known in the art such
as input/output (I/O) port 77 (e.g., USB, FireWire.RTM.). For
example, I/O port 77 or external interface 81 (e.g. Ethernet,
Wi-Fi, etc.) can be used to connect computer system 10 to a wide
area network such as the Internet, a mouse input device, or a
scanner. The interconnection via system bus 75 allows the central
processor 73 to communicate with each subsystem and to control the
execution of instructions from system memory 72 or the storage
device(s) 79 (e.g., a fixed disk, such as a hard drive or optical
disk), as well as the exchange of information between subsystems.
The system memory 72 and/or the storage device(s) 79 may embody a
computer readable medium. Any of the data mentioned herein can be
output from one component to another component and can be output to
the user.
[0101] A computer system can include a plurality of the same
components or subsystems, e.g., connected together by external
interface 81 or by an internal interface. In some embodiments,
computer systems, subsystem, or apparatuses can communicate over a
network. In such instances, one computer can be considered a client
and another computer a server, where each can be part of a same
computer system. A client and a server can each include multiple
systems, subsystems, or components.
[0102] It should be understood that any of the embodiments of the
present invention can be implemented in the form of control logic
using hardware (e.g. an application specific integrated circuit or
field programmable gate array) and/or using computer software with
a generally programmable processor in a modular or integrated
manner. As used herein, a processor includes a single-core
processor, multi-core processor on a same integrated chip, or
multiple processing units on a single circuit board or networked.
Based on the disclosure and teachings provided herein, a person of
ordinary skill in the art will know and appreciate other ways
and/or methods to implement embodiments of the present invention
using hardware and a combination of hardware and software.
[0103] Any of the software components or functions described in
this application may be implemented as software code to be executed
by a processor using any suitable computer language such as, for
example, Java, C, C++, C#, Objective-C, Swift, or scripting
language such as Perl or Python using, for example, conventional or
object-oriented techniques. The software code may be stored as a
series of instructions or commands on a computer readable medium
for storage and/or transmission, suitable media include random
access memory (RAM), a read only memory (ROM), a magnetic medium
such as a hard-drive or a floppy disk, or an optical medium such as
a compact disk (CD) or DVD (digital versatile disk), flash memory,
and the like. The computer readable medium may be any combination
of such storage or transmission devices.
[0104] Such programs may also be encoded and transmitted using
carrier signals adapted for transmission via wired, optical, and/or
wireless networks conforming to a variety of protocols, including
the Internet. As such, a computer readable medium according to an
embodiment of the present invention may be created using a data
signal encoded with such programs. Computer readable media encoded
with the program code may be packaged with a compatible device or
provided separately from other devices (e.g., via Internet
download). Any such computer readable medium may reside on or
within a single computer product (e.g. a hard drive, a CD, or an
entire computer system), and may be present on or within different
computer products within a system or network. A computer system may
include a monitor, printer, or other suitable display for providing
any of the results mentioned herein to a user.
[0105] Any of the methods described herein may be totally or
partially performed with a computer system including one or more
processors, which can be configured to perform the steps. Thus,
embodiments can be directed to computer systems configured to
perform the steps of any of the methods described herein,
potentially with different components performing a respective steps
or a respective group of steps. Although presented as numbered
steps, steps of methods herein can be performed at a same time or
in a different order. Additionally, portions of these steps may be
used with portions of other steps from other methods. Also, all or
portions of a step may be optional. Additionally, any of the steps
of any of the methods can be performed with modules, circuits, or
other means for performing these steps.
[0106] The specific details of particular embodiments may be
combined in any suitable manner without departing from the spirit
and scope of embodiments of the invention. However, other
embodiments of the invention may be directed to specific
embodiments relating to each individual aspect, or specific
combinations of these individual aspects.
[0107] The above description of exemplary embodiments of the
invention has been presented for the purposes of illustration and
description. It is not intended to be exhaustive or to limit the
invention to the precise form described, and many modifications and
variations are possible in light of the teaching above. The
embodiments were chosen and described in order to best explain the
principles of the invention and its practical applications to
thereby enable others skilled in the art to best utilize the
invention in various embodiments and with various modifications as
are suited to the particular use contemplated.
[0108] A recitation of "a", "an" or "the" is intended to mean "one
or more" unless specifically indicated to the contrary. The use of
"or" is intended to mean an "inclusive or," and not an "exclusive
or" unless specifically indicated to the contrary.
[0109] All patents, patent applications, publications, and
descriptions mentioned herein are incorporated by reference in
their entirety for all purposes. None is admitted to be prior
art.
* * * * *