Fluidinfo is the makers of FluidDB, an online “cloud” database. Using a flexible underlying representation of information and a new model of control, FluidDB allows users and applications to work with information more naturally. That includes dynamically organizing, sharing, combining and augmenting information, and searching in ways that have previously not been possible. It also allows users to choose exactly which information to share with whom, with separate controls for reading and writing.
It allows almost unlimited information personalization by individual users and applications, and also between them. This makes it simple to build a wide variety of applications that benefit from cooperation, and which are open to unanticipated future enhancements.
Fluidinfo emphasizes three aspects that make it unique among existing public data stores:
- Data model
- Query language
The data model aims to be as flexible as possible, permitting a wide range of information to be stored in Fluidinfo. The fundamental difference between attribute-value stores (along the lines of EAVschemas) and traditional RDBMS is the lack of a highly-defined top-down structure. The essence of Fluidinfo consists of arbitrary objects, which can be considered points in a data space to which tags may be attached. Objects have no owners, similar to concepts in the “real” world. Tags are initially controlled by the user/application that creates them and can be attached to objects, in a fashion reminiscent of how humans use their minds to create and associate information with physical objects or concepts. One of the underlying motivations of Fluidinfo is to make working with information more natural. Anyone can attach tags to any data object, but only people with the right roles can see and search these tags.
The query language was designed to perform complex queries in as simple a manner as possible. The syntax is superficially reminiscent of information retrieval query languages such as CQL which are characterized as less complicated than traditional database query languages such as SQL. The query language always return object identifiers based on tag values, using the predicates below:
- [advt]Numeric: To find objects based on the numeric value of tags; e.g. tim/rating > 5
- Textual: To find objects based on text matching of their tag values; e.g. sally/opinion matches fantastic
- Presence: Use has to request objects that have a given tag; e.g. has sally/opinion
- Set contents: A tag on an object can hold a set of strings. For example, a tag called mary/product-reviews/keywords might be on an object with a value of [ “cool”, “kids”, “adventure” ]. The contains operator can be used to select objects with a matching value. The query mary/product-reviews/keywords contains “kids” would match the object in this example.
- Exclusion: You can exclude objects with the except keyword. For example has nytimes.com/appeared except has james/seen. The except operator performs a set difference.
- Logic: Query components can be combined with and and or. For example has sara/rating and tim/rating > 5.
- Grouping: Parentheses can be used to group query components. For example has sara/rating and (tim/rating > 5 or mike/rating > 7).
For each action that be applied to any tag or namespace within Fluidinfo, there is:
- A policy (either ‘open’ or ‘closed’); and
- A (possibly empty) list of exceptions to the policy.
The various actions that can be performed on a tag are read, update, create and see. The combination of the various actions with policies and exceptions provides a fine-grained permission model within Fluidinfo. It should be re-emphasized that only tags and namespaces have permissions allowing for various levels of control. Objects (the basic Fluidinfo data structure) do not have owners and so cannot be controlled by users/applications.