Todays datacenters face two big challenges. One comes from the fact that the quantity of data that needs to be stored and processed grows faster than the performance of general purpose processors. This is especially limiting for machine-learning type of workloads, that by now occupy a significant portion of modern datacenters. The other challenge is rooted in the design of modern data-intensive applications. These often consist of two "layers" of machines: one that stores and manages the data, and one that performs computations. This provides more flexibility in how many compute-nodes the application can use during its runtime, but it also introduces various data movement inefficiencies between nodes, that often limit the overall scalability of the application. In this talk, I will present Caribou, a system that addresses the above described data movement bottlenecks by executing parts of the computation closer to the data source without slowing data retrieval down. Thanks to the changing hardware landscape, we can use specialized hardware to implement this distributed storage solution for data-intensive applications in a way that ensures both small energy footprint and high performance.