An Introduction To FluidDB - a social database in the cloud

Preview:

DESCRIPTION

Introductory material that answers the what, why and how questions relating to FluidDB (a new cloud-based database that simplifies creating, sharing, annotating and reusing information).

Citation preview

An Introduction to FluidDB

http://fluidinfo.com

What?

FluidDB is a database “in the cloud” built by Fluidinfo and currently in private-Alpha testing.

There is only one FluidDB. All users and applications share the same database.

Why..?

As Wikipedia is to traditional encyclopaedias so FluidDB is to traditional database solutions.

Make the world writeablehttp://www.flickr.com/photos/psd/1428129861/

No pre-defined schemahttp://www.flickr.com/photos/juhansonin/3227851094/

Create, share, organise and understand information

The Glass Wall http://www.liamdelahunty.com/tips/usability_bbc_redesign_the_glass_wall.php

Simplify and enhance the model of control

http://www.flickr.com/photos/chiaramarra/1048662923/

How?

Key Concepts

• Objects - represent things*

• Tags - define object’s attributes

• Namespaces - organise tags

• Permissions - control access

* NOT instantiations of classes as in OO, but simply “objects” in the common-sense use of the term.

Data structure

subject / predicate / value(similar to RDF)

Data structure

object / tag / value(in FluidDB parlance)

Objects are tagged with information

http://ntoll.org/images/93.jpg

Namespaces and tags are pre-defined by users

ntoll/ratingterrycojones/books/reviewamazon.com/book/titleamazon.com/book/authoramazon.com/book/isbnesteve/books/covertimoreilly/has_read

(Every namespace and tag has a description and is itself represented by an object so meta-tagging is allowed)

An object

about = “book:Dune”

id =“e127475b-eb93-48e1-a24f-dde6825b9ed8”

(The about tag is a convention to help indicate what the object represents. It is optional but must be unique)

A basic object:

An object

about = “book:Dune”

ntoll/rating = 5ter

rycojones/

books/rev

iew =

“I love

sandworm

s”

amazon.com/books/title =

“Dune”

amaz

on.co

m/b

ooks

/aut

hor =

“Fra

nk H

erbe

rt”

amazon.com/books/isbn =

“87-418-7517-6”

timoreilly/has_read

estev

e/boo

ks/co

ver =

id =“e127475b-eb93-48e1-a24f-dde6825b9ed8”

An object

about = “book:Dune”

ntoll/rating = 5ter

rycojones/

books/rev

iew =

“I love

sandworm

s”

amazon.com/books/title =

“Dune”

amaz

on.co

m/b

ooks

/aut

hor =

“Fra

nk H

erbe

rt”

amazon.com/books/isbn =

“87-418-7517-6”

timoreilly/has_read

estev

e/boo

ks/co

ver =

booleanstring (& set)numericopaquenull

id =“e127475b-eb93-48e1-a24f-dde6825b9ed8”

Value Types:

Opaque tag values each have a MIME type

type = image/png

Other “primitive” types are returned as json

A simple and elegant RESTful API

https://fluiddb.fluidinfo.com/objects/e127475b-eb93-48e1-a24f-dde6825b9ed8/ntoll/rating

HTTP ‘GET’ returns the value, HTTP ‘PUT’ adds/updates it etc...

Full API: http://api.fluidinfo.com/fluidDB/api/*/*/*

https://fluiddb.fluidinfo.com/objects/OBJECT_ID/NAMESPACE(S)/TAG

e.g.

snoissimreP(seem to be back-to-front)

about = “book:Dune”

ntoll/rating = 5ter

rycojones/

books/rev

iew =

“I love

sandworm

s”

amazon.com/books/title =

“Dune”

amaz

on.co

m/b

ooks

/aut

hor =

“Fra

nk H

erbe

rt”

amazon.com/books/isbn =

“87-418-7517-6”

timoreilly/has_read

estev

e/boo

ks/co

ver =

Traditional:

id =“e127475b-eb93-48e1-a24f-dde6825b9ed8”

An object

about = “book:Dune”

ntoll/rating = 5ter

rycojones/

books/rev

iew =

“I love

sandworm

s”

amazon.com/books/title =

“Dune”

amaz

on.co

m/b

ooks

/aut

hor =

“Fra

nk H

erbe

rt”

amazon.com/books/isbn =

“87-418-7517-6”

timoreilly/has_read

estev

e/boo

ks/co

ver =

FluidDB:

id =“e127475b-eb93-48e1-a24f-dde6825b9ed8”

Permissions

• Apply to namespaces, tags and tag-values not objects

• Scoped by actions (e.g. “see”, “create”, “read”)

• Either “open” or “closed” with a list of exceptions

Search(is simple)

FluidDB’s Query Language• Equality & Inequality: To find objects based on the numeric values or

exact textual values, e.g., tim/rating > 5, or geo/name = "Llandefalle".

• Textual: To find objects based on text matching their tag values, for example, sally/opinion matches “fantastic”.

• Presence: Use has to request objects that have a given tag. For example, has sally/opinion.

• Set contents: The contains operator can be used to select objects with a matching value in a set of strings. The query mary/product-reviews/keywords contains "kids" would match the object with a tag called /mary/product-reviews/keywords and value ["cool", "kids", "adventure" ].

• Exclusion: 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).

er... that’s it(QL fits on one slide and enhancements are coming soon)

LIVE DEMO!http://www.flickr.com/photos/8001265@N08/2259250324/

Where?

• http://fluidinfo.com - First stop for more

• http://fluidinfo.com/accounts/new - Sign up!

• http://tickery.net - Twitter on steroids

• http://bit.ly/dicP8O - FluidRefreshmentDB

• http://fluiddbexplorer.appspot.com - Browser

• @fluidDB @terrycojones @esteve on Twitter

• #fluidDB on Freenode IRC

• http://groups.google.com/group/fluiddb-users

• http://groups.google.com/group/fluiddb-discuss

Lots of 3rd party libraries: http://bit.ly/9vvIal

Java, Clojure, Lisp, .NET, Perl, Python, Ruby, PHP & Javascript (all open-source)

We’re listening to youthough the usual caveats apply ;-)

Nicholas Tollervey ntoll@ntoll.org

ntoll on Twitter & IRC

http://www.flickr.com/photos/cambodia4kidsorg/260004685/

Questions / Discussion

Recommended