Enabling Non-Volatile Memory For Data-Intensive Applications