A computer-implemented method, comprising: identifying one or more compressed blocks (236, 612) in a set of stored compressed blocks (236, 612) responsive to a request to access data in the set of stored compressed blocks (236, 612); and decompressing string prefixes inside the identified compressed blocks (236, 612) using front coding; decompressing string suffixes inside the identified compressed blocks (236, 612) using a re-pair decompression; and generating uncompressed data, wherein the re-pair decompression includes iteratively expanding each symbol in a symbol tree corresponding to the data stored in the identified compressed blocks (236, 612), wherein the symbol tree includes a plurality of nodes, wherein the plurality of nodes includes at least one of the following: a terminal character, a non-terminal character, and any combination thereof, wherein the number of terminal characters is limited to a predetermined number, wherein the number of iterative expansions of each symbols is determined based on the predetermined number; the one or more compressed blocks (236, 612) are generated from one or more front coded buckets of strings in a dictionary, the one or more front-coded buckets are configured to be sampled to form one or more superblocks, wherein each one or more superblocks are configured to be compressed to generate a shared grammar for compression of the one or more compressed blocks (236, 612), wherein the one or more compressed blocks (236, 612) are compressed using re-pair compression, wherein the re-pair decompression further includes: initializing a stack position in a memory corresponding to each symbol in the symbol tree; simultaneously loading, using vector instructions, each symbol in the symbol tree from storage into the memory; combining loaded symbols into the uncompressed data by evaluating one or more predicates associated with the symbols; and repeating, using the predetermined number, the simultaneously loading and the combining. identifying one or more compressed blocks (236, 612) in a set of stored compressed blocks (236, 612) responsive to a request to access data in the set of stored compressed blocks (236, 612); and decompressing string prefixes inside the identified compressed blocks (236, 612) using front coding; decompressing string suffixes inside the identified compressed blocks (236, 612) using a re-pair decompression; and generating uncompressed data, wherein the re-pair decompression includes iteratively expanding each symbol in a symbol tree corresponding to the data stored in the identified compressed blocks (236, 612), wherein the symbol tree includes a plurality of nodes, wherein the plurality of nodes includes at least one of the following: a terminal character, a non-terminal character, and any combination thereof, wherein the number of terminal characters is limited to a predetermined number, wherein the number of iterative expansions of each symbols is determined based on the predetermined number; the one or more compressed blocks (236, 612) are generated from one or more front coded buckets of strings in a dictionary, the one or more front-coded buckets are configured to be sampled to form one or more superblocks, wherein each one or more superblocks are configured to be compressed to generate a shared grammar for compression of the one or more compressed blocks (236, 612), wherein the one or more compressed blocks (236, 612) are compressed using re-pair compression, wherein the re-pair decompression further includes: initializing a stack position in a memory corresponding to each symbol in the symbol tree; simultaneously loading, using vector instructions, each symbol in the symbol tree from storage into the memory; combining loaded symbols into the uncompressed data by evaluating one or more predicates associated with the symbols; and repeating, using the predetermined number, the simultaneously loading and the combining. initializing a stack position in a memory corresponding to each symbol in the symbol tree; simultaneously loading, using vector instructions, each symbol in the symbol tree from storage into the memory; combining loaded symbols into the uncompressed data by evaluating one or more predicates associated with the symbols; and repeating, using the predetermined number, the simultaneously loading and the combining.