One look at the datasheet suggests it has enough ammunition to serve the purpose.
The approach to sync the data from the sensor and the controller loop is : Whenever the data is ready in the sensor's register it generates a event/interrupt on a pin. This notifies the controller to pick up data.
To solve your problem :
Try this first approach - I'm not sure if this will work. Datasheet doesn't mention anywhere about this DRDY bit in detail. But give it a shot.
Enable/Set the I2_DRDY Bit in CTRL_REG3 and connect the physical DRDY pin to pin 2 or 3 on arudino uno.
attachInterrupt(0,data_pickup,RISING); /* Assuming the DRDY Pin generates a rising edge when data is ready, if it generates falling edge, put falling*/
/*For example */
/*initiate a SPI/I2C transcation here and pickup data into your program now.
I prefer to put a flag variable here and set it to true and do other things in loop*/ For example
Now coming to second approach that will save some time for arduino to do other things while the data is being put into internal FIFO is like this
Configure FIFO registers to enable. Set a FIFO Threshold and use the interrupt again to start reading. But this time, you have to read 31 samples in a burst read.
You still need to connect DRDY pin to arduino and use the interrupt code as above.
Enable I2_WTM bit in CTRL_REG3 for watermark FIFO level
Enable FIFO_EN in CTRL_REG5 for FIFO to enable.
Set the FIFO_CTRL_REG to 01011111
This will put FIFO in stream mode and it has FIFO threshold set to 31 samples. You can tinker with the number of samples you want by setting lower 5 bits.
The above code approach will remain same, except now you need to do a burst read for 31 samples.
I would suggest you try the first approach initially, as it will ensure, whenever the ADC samples, it will generate the interrupt and you pick up the data.
the latter approach is when you want conserve power and optimize the system.
To know more about interrupts : Look for Arduino documentation and learn about it. Google it.