1. A computer-implemented method for storing data in a knowledge base, comprising: receiving a plurality of assertions wherein an assertion comprises a subject, a property and an object and wherein an assertion can have a functional property such that for a given subject and a given property the object has a single value at any time, and if a new assertion is received with the given subject and the given property and a different object value then the newly received assertion is valid and any previously received assertions are no longer valid; maintaining a knowledge base that includes (1) a history table that stores previously received assertions, and (2) a snapshot table that stores currently valid assertions; maintaining a snapshot cache in memory that stores a subset of the assertions in the snapshot table; initiating a processing cycle, which is a period of time during which the received plurality of assertions is processed; selecting an assertion for processing; generating an assertion tuple that corresponds to the selected assertion, wherein the assertion tuple includes the subject, property and object of the selected assertion, a transaction time, which is the starting time of the cycle, and a certainty value set to true, indicating that the selected assertion is true as of the transaction time; determining that the property of the selected assertion is functional; writing a retraction tuple to the history table that indicates that a previous assertion with the same subject and property as the selected assertion is retracted, wherein the certainty value of the retraction tuple is set to false; writing the assertion tuple to the snapshot table; and writing the assertion tuple to the history table.