Patent ID: 8077059

Claim:
A method for compressing a database of data arranged in rows and columns, said data being partitioned into one or more blocks, each block containing one or more contiguous rows, said method comprising a compression step and a serialization step wherein the compression step compresses data for a column within a block, col-data, to produce compressed data, said compressed data being subsequently serialized by the serialization step to produce a chip for storage in the database, said compression step being applied to each column of each block in the database, characterized in that the compression step: (a) if said col-data can be represented as an arithmetic sequence, encodes said col-data as an arithmetic sequence; (b) if said col-data can be represented as an arithmetic cycle, encodes said col-data as an arithmetic cycle; (c) if said col-data can be represented as a run length encoding, encodes said col-data as a run length encoding; (d) if said col-data can be represented as a repeated sequence, encodes said col-data as a repeated sequence; (e) uses a differencing sub-step to select a first datum from col-data and to calculate difference-data as the difference between successive rows in col-data; (f) if said difference-data can be represented as a repeated sequence, encodes said col-data as said first datum and a repeated sequence of said difference-data; (g) uses a storage-calculation sub-step to calculate the storage space required for: (i) said col-data; (ii) a fixed point encoding of said col-data; and (iii) a fixed point encoding of said first datum and said difference-data; (h) if the storage space calculated in (g)(ii) is less than that calculated in (g)(i) and (g)(iii), encodes said col-data as a fixed point encoding of said col-data; (i) if the storage space calculated in (g)(iii) is less than that calculated in (g)(i) and (g)(ii), encodes said col-data as a fixed point encoding of said first datum and said difference-data; (j) if said col-data are 64-bit floating point values which can all be represented in 32-bits, encodes said col-data as 32-bit floating point values; or (k) leaves said col-data unchanged.