Home : Projects : Samsa
Samsa is an unusual database server and RAD platform. Its purpose is to support the rapid development of information systems in which a variety of software agents work collaboratively with a shared repository of records. It differs from most database systems significantly, in particular aiming to optimise reaction to change, both in terms of facilitating rapid responses by software agents to changes in the repository and in terms of responding to changes in the needs of the owners of the database system.
Unlike relational and object databases, Samsa databases do not have strong types or structures. Instead, the database is an essentially disorganised pile of records, with the types of records and fields being of interest only to the clients. There are no tables - or, in a sense, there is one big table. If an additional field is needed for some objects (or even just for a single object), it can be added without formality. This chaos is tamed by a very simple but powerful querying and browsing mechanism.
Rather than treating reactions to changes in the data almost as an afterthought with triggers or a simple notification system separate from the data manipulation commands, change listening is at least as important as querying in Samsa. A client program can describe to the server, in a request which looks quite similar to a query, the sort of change in which it is interested, and the server will notify the client of any such change as soon as it is made.
Samsa is designed to be implemented in server 'communities'. Although it is of course possible to dedicate a single machine to supporting the Samsa repository, the intention is that many smaller machines will be used, improving performance and stability. A typical implementation would have one or more large 'core' servers in one or more computer rooms, and much more numerous smaller supporting servers, which might be installed on desktop machines, using spare storage and processing resources to support the community. In theory, failure of all core servers in a Samsa community can have very little effect on the operation of the Samsa application, with queries and notifications being handled entirely by this cloud of supporting machines. Communities with good performance and excellent reliability could be built using no core servers at all, with a few hundred or more desktop machines handling the entire 'server side'.
The project is still in the very early stages, and at the moment I'm having to prioritise other things, but I'm quite interested in this idea and would be interested in using it myself so no doubt I'll return to it as time allows and add more design notes and eventually software.






