an introduction to fluiddb
DESCRIPTION
The slides and notes used when presenting to Manchester Geek Night.TRANSCRIPT
![Page 1: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/1.jpg)
An Introduction to FluidDB
(A social database in the cloud).
http://fluidinfo.com/
Nicholas [email protected]
![Page 2: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/2.jpg)
The Agenda:
What?Why?How?
Where?
A high-level, non-technical overview of the concepts behind FluidDB
![Page 3: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/3.jpg)
What?...is FluidDB
![Page 4: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/4.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/5.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/6.jpg)
Why?
![Page 7: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/7.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/8.jpg)
People I know
Often you have to duplicate information in each of the different walled gardens.
![Page 9: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/9.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/10.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/11.jpg)
How?
![Page 12: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/12.jpg)
There is only one FluidDB. All users and applications share the
same database.
![Page 13: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/13.jpg)
• Objects - represent things
• Tags - define objects’ attributes
• Namespaces - organise tags
• Permissions - control access
FluidDB is conceptually very simple.
![Page 14: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/14.jpg)
http://ntoll.org/images/93.jpg
Openly writable objects are simply tagged with information.
![Page 15: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/15.jpg)
Data Structure
entity / attribute / value
![Page 16: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/16.jpg)
Data Structure
object / tag / value(in FluidDB parlance)
![Page 17: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/17.jpg)
Data Structure
object / tag / value(optional)
![Page 18: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/18.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/19.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/20.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/21.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/22.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/23.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/24.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/25.jpg)
You control who can see, read or use your tags.
![Page 26: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/26.jpg)
Anyone can tag information to an object.
http://www.flickr.com/photos/fixe/3415776837/
![Page 27: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/27.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/28.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/29.jpg)
{“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://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/30.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/31.jpg)
Social data?
But what exactly do we mean by social data? Let’s look at a few examples:
![Page 32: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/32.jpg)
http://www.flickr.com/photos/8001265@N08/2259250324/
Let me demonstrate!Tickery, WeMetAt, TunkRank.
![Page 33: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/33.jpg)
Where?...can you find out more information and get involved?
![Page 35: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/35.jpg)
• 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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/36.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/37.jpg)
We’re listening to youthough the usual caveats apply ;-)
Tell us what you think!
![Page 38: An Introduction to FluidDB](https://reader034.vdocument.in/reader034/viewer/2022051816/545c7a2eb1af9f3c0a8b4775/html5/thumbnails/38.jpg)
Questions..?