A method for performing queries on a distributed time series data storage system having a time series database that stores data blocks containing time stamped data across a plurality of data nodes running on one or more computing devices, and an index database that stores indices associated with the data blocks, each index comprising metadata describing the data being stored in the corresponding data block, the method comprising: sending a query to a query layer running on a first computing device, the query specifying criteria that define a set of data to be retrieved from the time series data storage system and an analysis to be performed on the set of data; requesting from the index database the indices identifying the data blocks stored in the time series database that may contain time series data that meet the criteria, by comparing the criteria and the metadata; returning the indices back to the query layer; preparing a sub-query that can be performed on the time stamped data within each of the identified data blocks so as to produce data matching the criteria, the sub-query including the criteria and a logical operation to be performed on the data matching the criteria, the logical operation being based upon the analysis specified in the query; sending the sub-query to the time series database with a list of the data blocks, identified by the returned indices, stored in the time series database needed to evaluate the query; receiving the sub-query at a control node of the time series database, and using information in a storage map regarding which data nodes contain which data blocks to forward the sub-query to an evaluator running on each of the plurality of data nodes that hold data corresponding to the data blocks in the list; evaluating the criteria specified in the sub-query in each evaluator with respect to the data blocks stored on the same data node on which the evaluator is running in order to select a subset of data; performing the logical operation specified in the sub-query in each evaluator on the subset of data generated in that evaluator in the evaluating step above to generate a sub-result; receiving each sub-result from each evaluator at an output handler; and combining the sub-result from each evaluator into a query result. sending a query to a query layer running on a first computing device, the query specifying criteria that define a set of data to be retrieved from the time series data storage system and an analysis to be performed on the set of data; requesting from the index database the indices identifying the data blocks stored in the time series database that may contain time series data that meet the criteria, by comparing the criteria and the metadata; returning the indices back to the query layer; preparing a sub-query that can be performed on the time stamped data within each of the identified data blocks so as to produce data matching the criteria, the sub-query including the criteria and a logical operation to be performed on the data matching the criteria, the logical operation being based upon the analysis specified in the query; sending the sub-query to the time series database with a list of the data blocks, identified by the returned indices, stored in the time series database needed to evaluate the query; receiving the sub-query at a control node of the time series database, and using information in a storage map regarding which data nodes contain which data blocks to forward the sub-query to an evaluator running on each of the plurality of data nodes that hold data corresponding to the data blocks in the list; evaluating the criteria specified in the sub-query in each evaluator with respect to the data blocks stored on the same data node on which the evaluator is running in order to select a subset of data; performing the logical operation specified in the sub-query in each evaluator on the subset of data generated in that evaluator in the evaluating step above to generate a sub-result; receiving each sub-result from each evaluator at an output handler; and combining the sub-result from each evaluator into a query result.