To test the performance of MySQL persistence compared to LevelDB, I ran a series of tests. The tests performed 200 batches, with each batch consisting of:
- Creating 1,000 objects with a basic Dublin Core metadata record
- Listing 1,000 objects
- Retrieving the RDF for the 1,000 objects
Each step was timed, and graphs of the times are shown below. The test scripts are available to view/download.
Using Client-Supplied Identifiers (Single Container)
Using client-supplied identifiers, placing all child objects in a single container, the performance of MySQL and LevelDB was very similar:
- Both had list and read times that were essentially flat as the number of child objects grew
- Both had create times that steadily grew as the number of child objects grew
- Both increasingly erratic performance after around 45,000 child objects were created
Using Auto-Generated Identifiers
Using auto-generated identifiers, placing child objects in a 4-level hierarchy, the performance of MySQL and LevelDB was similar for create and read times, but significantly different for list operations:
- Both had create and read times that were essentially flat as the number of child objects grew
- Both had list times that grew as the number of child objects grew, but the MySQL list operations grew much more quickly