Optimizing Flash-Based Storage Systems