an introduction to fluiddb

38
An Introduction to FluidDB (A social database in the cloud). http://fluidinfo.com / Nicholas Tollervey ntoll@fluidinfo.com

Upload: nicholas-tollervey

Post on 07-Nov-2014

3.141 views

Category:

Technology


0 download

DESCRIPTION

The slides and notes used when presenting to Manchester Geek Night.

TRANSCRIPT

Page 1: An Introduction to FluidDB

An Introduction to FluidDB

(A social database in the cloud).

http://fluidinfo.com/

Nicholas [email protected]

Page 2: An Introduction to FluidDB

The Agenda:

What?Why?How?

Where?

A high-level, non-technical overview of the concepts behind FluidDB

Page 3: An Introduction to FluidDB

What?...is FluidDB

Page 4: An Introduction to FluidDB

FluidDB is a platform for the web of things,

each represented by an openly writable “social”

object.

But what is an openly writable social object..?

Page 5: An Introduction to FluidDB

http://www.flickr.com/photos/psd/1428129861/

An example of an openly “writable” social object in the real world. FluidDB just allows this in the digital world.

Page 6: An Introduction to FluidDB

Why?

Page 7: An Introduction to FluidDB

http://www.flickr.com/photos/jointhedots/4622191119/

Most interesting information is currently in walled gardens sitting in databases behind applications, APIs or in weird proprietary formats.

Page 8: An Introduction to FluidDB

People I know

Often you have to duplicate information in each of the different walled gardens.

Page 9: An Introduction to FluidDB

WHERE location NEAR pubs SERVING

SELECT self-catering-cottage FROM

AND pub HAS rating > 7 IN

And you usually can’t request information that combines data from the different walled gardens. For example, selecting all the self-catering cottages endorsed by the Cornish Tourist Board that are close to good pubs that serve my favourite beer. So how is FluidDB different..?

Page 10: An Introduction to FluidDB

Share, annotate, augment and re-use information.

At Fluidinfo we want to make it much easier to share, annotate, augment and re-use information. FluidDB is designed to make this possible.

Page 11: An Introduction to FluidDB

How?

Page 12: An Introduction to FluidDB

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

same database.

Page 13: An Introduction to FluidDB

• Objects - represent things

• Tags - define objects’ attributes

• Namespaces - organise tags

• Permissions - control access

FluidDB is conceptually very simple.

Page 14: An Introduction to FluidDB

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

Openly writable objects are simply tagged with information.

Page 15: An Introduction to FluidDB

Data Structure

entity / attribute / value

Page 16: An Introduction to FluidDB

Data Structure

object / tag / value(in FluidDB parlance)

Page 17: An Introduction to FluidDB

Data Structure

object / tag / value(optional)

Page 18: An Introduction to FluidDB

Namespaces/Tags

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

Namespaces and tags are pre-defined by users and applications. When you sign up for FluidDB you’re assigned a namespace corresponding to your username. Every namespace and tag can have a description and is itself represented by an object within FluidDB so meta-tagging is possible.

Page 19: An Introduction to FluidDB

An object

about = “book:Dune”

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

Every FluidDB object has a Universally Unique ID (this allows applications to operate on a specific object) and an optional unique “about” tag that can be used to indicate what the object represents.

Page 20: An Introduction to FluidDB

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”

Page 21: An Introduction to FluidDB

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”

There are two “types” of information: primitive (boolean, string, numeric, null etc...) and opaque (that have an associated mime-type).

Page 22: An Introduction to FluidDB

snoissimreP(seem to be back-to-front)

How does FluidDB ensure that users and applications retain control over their information..?

Page 23: An Introduction to FluidDB

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”

The traditional mechanism is to control the thing being written to: a database table or document for example. But FluidDB’s aim is to make the world writeable so Objects have no owners or associated permissions.

Page 24: An Introduction to FluidDB

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 only apply to the namespaces, tags and tag-values. Therefore users and applications retain control over who sees, reads, writes or creates data without inhibiting the writability of FluidDB.

Page 25: An Introduction to FluidDB

You control who can see, read or use your tags.

Page 26: An Introduction to FluidDB

Anyone can tag information to an object.

http://www.flickr.com/photos/fixe/3415776837/

Page 27: An Introduction to FluidDB

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

It’s a bit like the unix filesystem where permissions on directories and files are also scoped by action (read, write and execute) and apply to specific users or groups.

Page 28: An Introduction to FluidDB

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).

Use the very simple query language to search for information. The current specification fits onto this slide.

Page 29: An Introduction to FluidDB

{“tagPaths”: [" “twitter.com/username”," “twitter.com/fullname”," “tunkrank.com/score”," “ntoll/met”," “terrycojones/met”," “python.org/member”," “ub.edu/alumni”," “ub.edu/bsc”," “uoc.edu/msc”," ... etc ...]}

Tags attached to the “about:esteve” object.

Another way to find information is to ask FluidDB for tags that are attached to interesting objects.

Page 30: An Introduction to FluidDB

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

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

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

A RESTful API

Users and applications interact with FluidDB via a RESTful HTTP API.

Page 31: An Introduction to FluidDB

Social data?

But what exactly do we mean by social data? Let’s look at a few examples:

Page 32: An Introduction to FluidDB

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

Let me demonstrate!Tickery, WeMetAt, TunkRank.

Page 33: An Introduction to FluidDB

Where?...can you find out more information and get involved?

Page 34: An Introduction to FluidDB

http://fluidinfo.com/

Page 35: An Introduction to FluidDB

• Twitter: @fluidDB @terrycojones @esteve & @ntoll

• http://youtube.com/fluiddb

• #fluiddb on Freenode IRC

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

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

Page 36: An Introduction to FluidDB

Lots of 3rd party libraries:

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

http://fluidinfo.com/developers/libs

Page 37: An Introduction to FluidDB

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

Tell us what you think!

Page 38: An Introduction to FluidDB

Questions..?