1. A method for storing data, comprising the steps of: receiving a plurality of data-streams, wherein the plurality of data-streams are received from a plurality of distributed devices, wherein the plurality of distributed devices are connected via a network, wherein each one of the plurality of data-streams comprise data-elements; storing the data-elements of the received plurality of data-streams, wherein the stored data-elements are stored in a plurality of block-stores, wherein the block-stores are stored on the plurality of distributed devices; assigning block-identifiers to data-blocks of the block-stores, wherein the block-identifiers are globally unique, wherein each of the block-stores comprises one or more data-blocks, wherein the data-blocks of a single data-stream are logically grouped, and wherein each of the data-blocks are read and written as a single unit; allocating the stored data-elements to the data-blocks of the block-stores, wherein each data-block comprises the stored data-elements of only one of the received plurality of data-streams; further allocating the block-allocated data-elements to events of the data-blocks, wherein each of the data-blocks comprise one or more events, wherein each of the events comprises the block-allocated data-elements of the corresponding data-block; and, generating indices for the event-allocated data-elements.