So far we really use std::map. But, this is not ideal in terms of performance. node-id is up to 256, snapshots are almost always very few, so we can do array-based something.
This class got a bit bloated and hard to do a whitebox test because of dependencies to other modules. Dump-part and merge-part should be separated into its own classes in a way testcases can independently test them. Maybe reducer should be its own package?
initialize() should only set thread. We should separate other initialization from it because the new thread might be already accessing those properties (at least valgrind is unhappy). We should have 'launch()' method instead.