IP Library Granted Patent US 8,433,823
Granted Patent B2
US 8,433,823 · App. 13/225,261 · Granted Apr 30, 2013

Random access data compression

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,433,823
App. No.
13/225,261
Filed
Sep 2, 2011
Granted
Apr 30, 2013
Kind
B2
Art Unit
2163
USPC
709/247
Abstract

Methods, program products, and systems implementing random access data compression are disclosed. Data can be stored in a data structure in compressed or non-compressed form. The data structure can include a header block, one or more data blocks, and one or more index blocks. Each data block can include data compressed using different compression technology. The header block can include searchable references to the data blocks, which can be located in the data structure after the header block. The searchable references permit non-sequential access to the data blocks. The data blocks can be organized independent of a file system structure. The header block can additionally include references to the one or more index blocks, which can expand the references in the header block.

Claims (59)

1. A method executed by one or more data processing devices, comprising:

receiving data to be compressed;

creating a header block, an index block, and one or more data blocks, each data block including a compressed portion of the received data, the header block including a reference to the index block and a first portion of an index to the one or more data blocks, the index block including a second portion of the index to the one or more data blocks;

storing the header block in a serialized data structure; and

storing the one or more data blocks in the serialized data structure after the header block, the first portion of the index indicating a location of each of the one or more data blocks that is located before the index block in the serialized data structure, and the second portion of the index indicating a location of each of the one or more data blocks that is located after the index block in the serialized data structure, wherein the index includes a triplet of values, the values including:

a first index identifying an uncompressed offset value;

a second index identifying an uncompressed data size; and

a third index identifying an offset of a data block.

2. The method of claim 1 , where the header block includes a configurable block size of each data block.

3. The method of claim 1 , further comprising accessing the serialized data structure to retrieve the data non-sequentially, including:

receiving a request to decompress a section of the data, the request specifying a location of the section in the data before the data were compressed;

identifying a triplet of values, the first index of the triplet of values corresponding to the location specified in the request;

identifying a data block using the third index in the identified triplet of values;

decompressing the identified data block; and

identifying the section of the data from the decompressed data block.

4. The method of claim 1 , where the index block includes additional triplets of values and a reference to an additional index block, the index block and the additional index block forming a tree data structure for storing references to the one or more data blocks.

5. The method of claim 4 , where the received data include a plurality of log messages, each log message including offset information usable for identifying a location of the log message from the one or more data blocks using the triplets of values.

6. The method of claim 4 , where the serialized data are stored on a file system and are accessible through a block accessor configured to translate a reference to a point of data to a point of the serialized data stored on the file system.

7. The method of claim 1 , where each data block includes a compression identifier identifying a compression mechanism used in compressing the data into the data block.

8. The method of claim 1 , where the one or more data blocks include a first data block and a second data block, the first data block including data compressed using a first compression mechanism, the second data block including data compressed using a second compression mechanism that is different from the first compression mechanism.

9. The method of claim 1 , where the index is file system independent.

10. The method of claim 1 , where storing the one or more data blocks in the data structure after the header block includes storing the one or more data blocks sequentially after the header block.

11. A computer program product stored on a storage device, operable to cause one or more processors to perform operations comprising:

receiving data to be compressed;

creating a header block, an index block, and one or more data blocks, each data block including a compressed portion of the received data, the header block including a reference to the index block and a first portion of an index to the one or more data blocks, the index block including a second portion of the index to the one or more data blocks;

storing the header block in a serialized data structure; and

storing the one or more data blocks in the data structure after the header block, the first portion of the index indicating a location of each of the one or more data blocks that is located before the index block in the serialized data structure, and the second portion of the index indicating a location of each of the one or more data blocks that is located after the index block in the serialized data structure, wherein the index includes a triplet of values, the values including:

a first index identifying an uncompressed offset value;

a second index identifying an uncompressed data size; and

a third index identifying an offset of a data block.

12. The computer program product of claim 11 , where:

the received data include a plurality of log messages, each log message including offset information usable for identifying a location of the log message from the one or more data blocks using the triplets of values.

13. The computer program product of claim 11 , where the header block includes a configurable block size of each data block.

14. The computer program product of claim 11 , where the index block includes additional triplets of values and a reference to an additional index block, the index block and the additional index block forming a tree data structure for storing references to the one or more data blocks.

15. The computer program product of claim 11 , the operations comprising accessing the serialized data structure to retrieve the data non-sequentially, including:

receiving a request to decompress a section of the data, the request specifying a location of the section in the data before the data were compressed;

identifying a triplet of values, the first index of the triplet of values corresponding to the location specified in the request;

identifying a data block using the third index in the identified triplet of values;

decompressing the identified data block; and

identifying the section of the data from the decompressed data block.

16. A system comprising:

one or more processors configured to perform operations comprising:

receiving data to be compressed;

creating a header block, an index block, and one or more data blocks, each data block including a compressed portion of the received data, the header block including a reference to the index block and a first portion of an index to the one or more data blocks, the index block including a second portion of the index to the one or more data blocks;

storing the header block in a serialized data structure; and

storing the one or more data blocks in the data structure after the header block, the first portion of the index indicating a location of each of the one or more data blocks that is located before the index block in the serialized data structure, and the second portion of the index indicating a location of each of the one or more data blocks that is located after the index block in the serialized data structure, wherein the index includes a triplet of values, the values including:

a first index identifying an uncompressed offset value;

a second index identifying an uncompressed data size; and

a third index identifying an offset of a data block.

17. The system of claim 16 , where:

the received data includes a plurality of log messages, each log message including offset information usable for identifying a location of the log message from the one or more data blocks using the triplets of values.

18. The system of claim 16 , where the header block includes a configurable block size of each data block.

19. The system of claim 16 , where the index block includes additional triplets of values and a reference to an additional index block, the index block and the additional index block forming a tree data structure for storing references to the one or more data blocks.

20. The system of claim 16 , the operations comprising accessing the serialized data structure to retrieve the data non-sequentially, including:

receiving a request to decompress a section of the data, the request specifying a location of the section in the data before the data were compressed;

identifying a triplet of values, the first index of the triplet of values corresponding to the location specified in the request;

identifying a data block using the third index in the identified triplet of values;

decompressing the identified data block; and

identifying the section of the data from the decompressed data block.

Assignments (12)
SECURITY INTEREST Recorded May 24, 2024
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 067662/0568 →
RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001) Recorded Apr 14, 2023
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: CITRIX SYSTEMS, INC.; CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.)
Reel/Frame 063339/0525 →
PATENT SECURITY AGREEMENT Recorded Apr 14, 2023
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 063340/0164 →
CHANGE OF NAME Recorded Feb 7, 2023
From: TIBCO SOFTWARE INC.
To: CLOUD SOFTWARE GROUP, INC.
Reel/Frame 062714/0634 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062112/0262 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 062113/0001 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 062113/0470 →
RELEASE REEL 052115 / FRAME 0318 Recorded Oct 3, 2022
From: KKR LOAN ADMINISTRATION SERVICES LLC
To: TIBCO SOFTWARE INC.
Reel/Frame 061588/0511 →
RELEASE (REEL 034536 / FRAME 0438) Recorded Sep 30, 2022
From: JPMORGAN CHASE BANK, N.A.
To: TIBCO SOFTWARE INC.
Reel/Frame 061574/0963 →
RELEASE (REEL 054275 / FRAME 0975) Recorded May 7, 2021
From: JPMORGAN CHASE BANK, N.A.
To: TIBCO SOFTWARE INC.
Reel/Frame 056176/0398 →
SECURITY AGREEMENT Recorded Nov 2, 2020
From: TIBCO SOFTWARE INC.
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 054275/0975 →
SECURITY AGREEMENT Recorded Mar 6, 2020
From: TIBCO SOFTWARE INC.
To: KKR LOAN ADMINISTRATION SERVICES LLC, AS COLLATERAL AGENT
Reel/Frame 052115/0318 →