summaryrefslogtreecommitdiff
path: root/README.md
blob: 7c51dc54393d9389ba71bd8588f1cf7d6385c137 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Code for the slcon3 "XML damage control" presentation 
=====================================================

This repo contains contains a benchmark of several XML libraries that
I have written for the presentation. Most of the libraries are C ones
because the goal is to compare some of the simplest but most efficient
tools that ease the pain of having to work with XML.

The libraries compared in this benchmark are:

* ezxml
* simple xml (sxmlc)
* mini xml (mxml)
* yxml
* Go's encoding/xml
* Python's elementtree


Compile
-------

You will have to install the mini-xml (mxml) library somewhere and
then make sure that the compiler can find it by editing the Makefile
(provided the library is not installed in one of the usual places). All
other libraries have been copied into the benchmark programs (in their
own C file ending on 'lib.c').

As soon as you have the mxml library installed you can just run the usual

make

to compile everything.


Run the benchmark
-----------------

To run the benchmark you need the test input XML files which are a subset
of all the Open Access Pubmed Central full text XML files[0]. The exact
subset used can be found in the 'xmldata/subset.txt' file. The input
consists of 10'000 small XML files that have to be copied into their
subdirectories in the 'xmldata' directory (just untar the tar.gz file
found at the link location there).

If you have located and copied all the input files into 'xmldata/'
you can execute the "runbenchmarks.sh" script to run the benchmark.

The benchmarks will be run 10 times each (taking around 45 minutes to
complete) while being timed. The 10 time measurements will be appended
to log files (so that running the benchmark several times will result in
more data points). The "runbenchmarks.sh" script will convert the time
measurements to seconds afterwards and then run a R one-liner I found
on the internet[1] to print out the mean and the standard deviation of
the measurements to $programname.statistics files.


[0] I used a subet of ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/oa_bulk/non_comm_use.A-B.xml.tar.gz
    (warning: the file is about 1.2GB in size)
[1] http://stackoverflow.com/questions/9789806/command-line-utility-to-print-statistics-of-numbers-in-linux