Data Structures for Data-Intensive Applications: Tradeoffs and Design Guidelines