A forensic analysis apparatus for matching a contributor of a test sample with a contributor of one or more stored samples, the apparatus comprising a master node and a plurality of worker nodes, wherein each worker node is configured to, in parallel with the other worker nodes: establish a stored result database for a respective locus in the DNA of the one or more stored samples, the stored result database comprising all possible genotypes present in the stored samples based on one or more predetermined alleles identified at the respective locus, the stored result database further comprising unique codes linking each genotype to the stored samples which contain that genotype, and respective probability values representing the probability of that genotype belonging to one or more contributors of the stored samples; establish a test result database for the same respective locus in the DNA of a test sample, the test result database comprising all possible genotypes present in the test sample based on one or more predetermined alleles identified at the respective locus; and compare each genotype of the test result database against each genotype of the stored result database to identify any matches therebetween and produce a match list for the respective locus, the match list comprising unique codes identifying the stored samples which contain the matching genotypes at the respective locus, and wherein the master node is configured to: instruct, for a pair of worker nodes, a worker node with a shorter match list to send its match list to a worker node with a longer match list for comparison of the respective match lists to identify any matches therebetween and produce a further match list, the further match list comprising unique codes identifying any stored samples which contain the matching genotypes across the two respective loci; repeat the instruction of worker node pairs until the match lists and further match lists for all of the respective loci have been compared to produce a final match list, the final match list comprising unique codes identifying any stored samples which contain the matching genotypes across all of the respective loci; and identify a contributor of a stored sample as a potential match with a contributor of the test sample based on unique codes which are common to each of the loci in combination with the respective probability values. establish a stored result database for a respective locus in the DNA of the one or more stored samples, the stored result database comprising all possible genotypes present in the stored samples based on one or more predetermined alleles identified at the respective locus, the stored result database further comprising unique codes linking each genotype to the stored samples which contain that genotype, and respective probability values representing the probability of that genotype belonging to one or more contributors of the stored samples; establish a test result database for the same respective locus in the DNA of a test sample, the test result database comprising all possible genotypes present in the test sample based on one or more predetermined alleles identified at the respective locus; and compare each genotype of the test result database against each genotype of the stored result database to identify any matches therebetween and produce a match list for the respective locus, the match list comprising unique codes identifying the stored samples which contain the matching genotypes at the respective locus, and wherein the master node is configured to: instruct, for a pair of worker nodes, a worker node with a shorter match list to send its match list to a worker node with a longer match list for comparison of the respective match lists to identify any matches therebetween and produce a further match list, the further match list comprising unique codes identifying any stored samples which contain the matching genotypes across the two respective loci; repeat the instruction of worker node pairs until the match lists and further match lists for all of the respective loci have been compared to produce a final match list, the final match list comprising unique codes identifying any stored samples which contain the matching genotypes across all of the respective loci; and identify a contributor of a stored sample as a potential match with a contributor of the test sample based on unique codes which are common to each of the loci in combination with the respective probability values. instruct, for a pair of worker nodes, a worker node with a shorter match list to send its match list to a worker node with a longer match list for comparison of the respective match lists to identify any matches therebetween and produce a further match list, the further match list comprising unique codes identifying any stored samples which contain the matching genotypes across the two respective loci; repeat the instruction of worker node pairs until the match lists and further match lists for all of the respective loci have been compared to produce a final match list, the final match list comprising unique codes identifying any stored samples which contain the matching genotypes across all of the respective loci; and identify a contributor of a stored sample as a potential match with a contributor of the test sample based on unique codes which are common to each of the loci in combination with the respective probability values.