1. A method of de-duplicating a volume of data, the method comprising: partitioning the volume of data into input segments; for each of the input segments, traversing nodes of a search tree in accordance with the value of a fixed-size portion of the input segment to determine if the search tree contains a pointer to a matching fixed-sized portion of a segment within a dictionary; if the search tree contains the pointer: comparing the input segment with the segment within the dictionary pointed to by the pointer; and substituting a token representative of the segment within the dictionary for at least part of the input segment determined to match the segment within the dictionary; and constructing the search tree based on fixed-size portions of multiple segments within the dictionary, wherein the search tree comprises at least a first search tree and a second search tree, and wherein adding branch nodes and leaf nodes within the search tree comprises: adding branch and leaf nodes within the first search tree corresponding to the fixed-size portions of data; associating respective code values with the leaf nodes within the first search tree; concatenating at least two of the code values to generate a synthesized value; and adding one or more branch nodes and a leaf node within the second search tree corresponding the synthesized value.