1. A computer-implemented method comprising: allocating a respective queue to each of a plurality of threads, wherein the queue is configured to queue data requests from the respective thread and for a first data store; determining, for each of a plurality of threads, a respective maximum quantity of pending requests for the thread, wherein a quantity of pending requests sent from the respective queue to the first data store is equal to the maximum quantity of pending requests determined for the thread; determining, for each of the threads, a respective current quantity of operations per second; determining, for each of one or more first threads in the plurality of threads, a respective updated quantity of pending requests based on whether the current quantity of operations per second for the first thread is less than an expected quantity of operations per second for the first thread; and adjusting, for each first thread, the quantity of pending requests of the first thread sent to the first data store based on the updated quantity of pending requests of the first thread.