Good description of a process for picking a good protocol for a specific usecase scenario: https://eng.uber.com/trip-data-squeeze/