Do you think that you will ever have a need to do more then just find the highest value for each index? Basically you want to know when an index is making new highes, right? I ask because I have similar requirements for equities traded locally (I live in Australia). My solution was to process each log file and store the daily data for each stock in a separate file. I have code that uses WWW::Mechanize and friends, to log into my broker's web site and dl the end of day data. This file is then used to update the data for each stock.
In the code that I use to try and find a profitable way to trade options, I load the stock into a hash of arrays. The keys to the hash is date, open, high, low, close and volume. I have actually wrapped the hash up in a class for convenience and to handle any possible changes to the data that might cause a change to the implementation.
This method has worked well for me over a number of years and I would recommend doing something similar.