Patent ID: 8706710

Claim:
A method for storing and retrieving 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; allocating the stored data-elements to data-blocks of the block-stores, wherein each one of the block-stores comprises one or more data-blocks, wherein each data-block comprises the stored data-elements of only one of the received plurality of data-streams, wherein the data-blocks of a single data-stream are logically grouped, and wherein each one of the data-blocks are read and written as a single unit; assigning to each one of the data-blocks a block-identifier, wherein the block-identifier is globally unique; further allocating the block-allocated data-elements to events of the data-blocks, wherein each one of the data-blocks comprise one or more events, wherein each one of the events comprises the block-allocated data-elements of the corresponding data-block; assigning to each one of the event-allocated data-elements a token-name, wherein each one of the event-allocated data-elements has a token-name, wherein the token-names are human-readable names; reading stream-schema of the received plurality of data-streams, wherein each one of the received plurality of data-streams has a stream-schema, wherein each stream-schema further comprises a list of token-names for the event-allocated data-elements of the corresponding data-stream, wherein the event-allocated data-elements of the corresponding data-stream are capable of being identified based on the list of token-names, wherein each stream-schema further comprises an index-definition for each corresponding data-stream; generating indices for the event-allocated data-elements based on the corresponding index-definition and the corresponding list of token-names; executing at least one query of the event-allocated data-elements based on at least one of the indices; and, retrieving the event-allocated data-elements based on results from at least one query.