SlideShare a Scribd company logo
Sergio Bossa                        @sbtourist


               Terrastore
          A document database for
                developers
About Me
Software architect and engineer
   Gioco Digitale (online gambling and casinos).

Long time open source enthusiast and contributor
  Spring.
  Taconite.
  Terracotta.
  Actorom, Terrastore ...

(Micro)-Blogger
   http://twitter.com/sbtourist
   http://sbtourist.blogspot.com
NOSQL ... what?
1998
   Just a tiny non-relational database.
2009
   Non-relational databases as a replacement for
   relational ones?
Nowadays ...
   Not Only SQL.
       Use the right tool for your job.
NOSQL ... why?
          When you're in troubles with ...

Data Model.
   Relational mismatch.
   Variable schema.
Data Access Patterns.
   Expensive joins.
   Denormalized data.
Scalability.
   More data.
   More processing.
No SQL, Yes ... ?
Heterogeneity.
   Key/Value based.
      Voldemort.
   Document based.
      MongoDB.
      Riak.
      Terrastore.
   Column based.
      Cassandra.
      HBase.
   Graph based.
      Neo4J.
Terrastore!
Document Store.
   Ubiquitous.
   Consistent.
   Distributed.
   Scalable.
Written in Java.
Based on Terracotta.
Open Source.
Apache-licensed.
Your data, your documents
     {
         "name" : "Sergio",
         "surname" : "Bossa",
         "twitter" : "@sbtourist"
     }
Access everywhere
Keep consistent
Distribute as a single cluster
Distribute as multiple clusters
But ... Why Terrastore?!?!
Make ...
Simple things easy
Complex things
   possible
  ( almost ;)
Get started in seconds
   One command installation and startup ...

$> ant -f terrastore-install.xml 
quickstart -Dquickstart.dir=...
Easy installation
   Master:

$> ant -f terrastore-install.xml 
single-master 
-Dmaster.server.port 9510 
-Dinstall.dir=...


   Server:

$> ant -f terrastore-install.xml 
server 
-Dinstall.dir=...
No complex configuration
    Master:
$master>./start.sh


    Server:
$server>./start.sh 
--master 
--httpHost 
--httpPort 
--nodeHost 
--nodePort 
...
No impedence mismatch
   Java:
public class Character {
  private String name;
  private List<Character> friends;
  private List<Character> foes;
  // ...
}


   Json:
{"name" : "Spider-man",
"friends" : [{"name" : "Iceman"}]
"foes" : [{"name" : "Kingpin"}]}
Simple basic operations
    Put documents in buckets ...

PUT /bucket/key
Content-Type: application/json
{...}

    Get documents from buckets ...

GET /bucket/key
Content-Type: application/json
{...}
Range queries
      Find documents in bucket with keys in a given range
      ...
GET /bucket/range?comparator=comparator_name&
startKey=start_key&
endKey=end_key&
timeToLive=max_age
Content-Type: application/json
{...}
Built-in comparators
Lexicographical
   Ascendant.
   Descendant.
Numerical.
   Ascendant.
   Descendant.
What if ... custom comparators?
@AutoDetect(name="my-comparator")
public class MyComparator implements
  terrastore.store.operators.Comparator {

    public int compare(String key1, String key2) {
      // ...
    }
}
Predicate queries
    Find documents in bucket satisfying a given predicate
    condition ...
GET /bucket/predicate?
predicate=type:expression
Content-Type: application/json
{...}
Conditional put/get
    Conditionally put documents in buckets ...

PUT /bucket/key?
predicate=type:expression
Content-Type: application/json
{...}

    Conditionally get documents from buckets ...

GET /bucket/key?
predicate=type:expression
Content-Type: application/json
{...}
Built-in predicate conditions
JXPapth
   Based on X-Path.
   Find people whose name is 'Sergio':
      jxpath:/name[.='Sergio']
JavaScript
   Applies a JavaScript-like condition.
   Find people whose name is 'Sergio':
      js:value.name=='Sergio'
What if ... custom conditions?
@AutoDetect(name="my-condition")
public class MyCondition implements
  terrastore.store.operators.Condition {

    public boolean isSatisfied(String key,
       Map<String, Object> value, String expression) {
      // ...
    }
}
Server-side updates
   Atomically execute complex updates to a document ...

PUT /bucket/key/update?function=function_name&
timeout=timeout_value
Content-Type: application/json
{...}
Built-in update functions
Atomic Counters
   Atomically increment/decrement/set-up one or
   more counters.
Merge
   Merge the stored document with provided values.
JavaScript custom update
   Update the stored document by executing a user-
   provided javascript function.
What if ... custom functions?
@AutoDetect(name="my-function")
public class MyFunction implements
  terrastore.store.operators.Function {

    public Map<String, Object> apply(String key,
      Map<String, Object> value,
      Map<String, Object> parameters) {
      // ...
    }
}
Easy scale-out
    A command line parameter:

$server>./start.sh 
--master 
--ensemble

    And a json configuration file:

{
"localCluster" : "apple",
"discoveryInterval" : 5000,
"clusters" : ["apple", "orange"],
"seeds" : {"orange" : "192.168.1.2:6001"}
}
DSL-like Java APIs
     Fluent APIs.
     Http-based.
     Transparent (yet configurable) object conversion.
// Create client:
TerrastoreClient client =
new TerrastoreClient("http://localhost:8080",
new HTTPConnectionFactory());

// Create object:
Person sbtourist = new Person("Sergio Bossa”, "sbtourist")

// Put:
client.bucket("people").key("1").put(person);

// Get:
sbtourist = client.bucket("people").key("1").get(Person.class);
Support for other languages
Clojure
   http://github.com/sbtourist/terrastore-cloj
Python
   http://dnene.bitbucket.org/docs/pyterrastore
Scala
   http://github.com/ssuravarapu/Terrastore-Scala-Client
   http://github.com/teigen/terrastore-scala
Easy to add more!
Pure Javascript Web Console
More!
Backup
   Import/export documents to/from buckets.
Events management
   Get notified of document updates.
       Third-party products integration.
       Write-behind.
   ActiveMQ integration for higher reliability.
Custom data partitioning
   Retain control of where your data is placed.
Indexing and searching
   Terrastore-Search.
       ElasticSearch integration.
Cross-origin resource sharing support
   Integrate with browser-based clients.
Now that I have an hammer ...
 Don't go blinded.
   Use the right tool for the job!

 Terrastore is best suited for:
    Data hot spots.
    Computational data.
    Complex, rich or variable data.
    Throw-away data.
Final words ... engaging.
Explore
   http://code.google.com/p/terrastore
Download
   http://code.google.com/p/terrastore/downloads/list
Hack
   http://code.google.
   com/p/terrastore/source/checkout
Participate
   http://groups.google.com/group/terrastore-
   discussions
Enjoy!
Q&A  Contact me on:
http://twitter.com/sbtourist

More Related Content

What's hot (20)

PPTX
NOSQL vs SQL
Mohammed Fazuluddin
 
PDF
Middleware upgrade to Oracle Fusion Middleware(FMW) 12c.Real Case stories.
Andrejs Vorobjovs
 
PPTX
Introduction of ssis
deepakk073
 
PPTX
Nosql seminar
Shreyashkumar Nangnurwar
 
PPTX
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...
Simplilearn
 
PPTX
Building a modern data warehouse
James Serra
 
PPTX
Qlik sense- Technical Seminar
Sanjana Gondane
 
PDF
OAC and ODI! A Match Made in…the cloud?
Rodrigo Radtke de Souza
 
PPTX
Apache Superset - open source data exploration and visualization (Conclusion ...
Lucas Jellema
 
PDF
AWS Glue - let's get stuck in!
Chris Taylor
 
PPTX
Oracle GoldenGate Performance Tuning
Bobby Curtis
 
PDF
Intro to Elasticsearch
Clifford James
 
PPTX
Spark Workshop
Navid Kalaei
 
PPTX
All of the Performance Tuning Features in Oracle SQL Developer
Jeff Smith
 
PPTX
Snowflake + Power BI: Cloud Analytics for Everyone
Angel Abundez
 
PDF
Owning Your Own (Data) Lake House
Data Con LA
 
DOCX
Data guard architecture
Vimlendu Kumar
 
PDF
Understanding Presto - Presto meetup @ Tokyo #1
Sadayuki Furuhashi
 
ODP
Mongo indexes
paradokslabs
 
PPTX
ABCs of AWS: S3
Mark Cohen
 
NOSQL vs SQL
Mohammed Fazuluddin
 
Middleware upgrade to Oracle Fusion Middleware(FMW) 12c.Real Case stories.
Andrejs Vorobjovs
 
Introduction of ssis
deepakk073
 
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...
Simplilearn
 
Building a modern data warehouse
James Serra
 
Qlik sense- Technical Seminar
Sanjana Gondane
 
OAC and ODI! A Match Made in…the cloud?
Rodrigo Radtke de Souza
 
Apache Superset - open source data exploration and visualization (Conclusion ...
Lucas Jellema
 
AWS Glue - let's get stuck in!
Chris Taylor
 
Oracle GoldenGate Performance Tuning
Bobby Curtis
 
Intro to Elasticsearch
Clifford James
 
Spark Workshop
Navid Kalaei
 
All of the Performance Tuning Features in Oracle SQL Developer
Jeff Smith
 
Snowflake + Power BI: Cloud Analytics for Everyone
Angel Abundez
 
Owning Your Own (Data) Lake House
Data Con LA
 
Data guard architecture
Vimlendu Kumar
 
Understanding Presto - Presto meetup @ Tokyo #1
Sadayuki Furuhashi
 
Mongo indexes
paradokslabs
 
ABCs of AWS: S3
Mark Cohen
 

Similar to Terrastore - A document database for developers (20)

PDF
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
SPTechCon
 
PDF
OrientDB introduction - NoSQL
Luca Garulli
 
PDF
Infrastructure-as-code: bridging the gap between Devs and Ops
Mykyta Protsenko
 
PDF
Hands On Spring Data
Eric Bottard
 
PDF
Guillotina
Ramon Navarro
 
PDF
Elasticsearch And Apache Lucene For Apache Spark And MLlib
Jen Aman
 
PPT
Reversing JavaScript
Roberto Suggi Liverani
 
PDF
Null Bachaav - May 07 Attack Monitoring workshop.
Prajal Kulkarni
 
PPTX
Hammock, a Good Place to Rest
Stratoscale
 
PDF
CouchDB Mobile - From Couch to 5K in 1 Hour
Peter Friese
 
PDF
Play framework
Andrew Skiba
 
PDF
Just one-shade-of-openstack
Roberto Polli
 
KEY
[Coscup 2012] JavascriptMVC
Alive Kuo
 
PDF
Fun Teaching MongoDB New Tricks
MongoDB
 
PDF
Hidden pearls for High-Performance-Persistence
Sven Ruppert
 
PDF
Ejb3 Struts Tutorial En
Ankur Dongre
 
PDF
Ejb3 Struts Tutorial En
Ankur Dongre
 
PDF
Kerberizing spark. Spark Summit east
Jorge Lopez-Malla
 
PDF
REST easy with API Platform
Antonio Peric-Mazar
 
PDF
Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016
Zabbix
 
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
SPTechCon
 
OrientDB introduction - NoSQL
Luca Garulli
 
Infrastructure-as-code: bridging the gap between Devs and Ops
Mykyta Protsenko
 
Hands On Spring Data
Eric Bottard
 
Guillotina
Ramon Navarro
 
Elasticsearch And Apache Lucene For Apache Spark And MLlib
Jen Aman
 
Reversing JavaScript
Roberto Suggi Liverani
 
Null Bachaav - May 07 Attack Monitoring workshop.
Prajal Kulkarni
 
Hammock, a Good Place to Rest
Stratoscale
 
CouchDB Mobile - From Couch to 5K in 1 Hour
Peter Friese
 
Play framework
Andrew Skiba
 
Just one-shade-of-openstack
Roberto Polli
 
[Coscup 2012] JavascriptMVC
Alive Kuo
 
Fun Teaching MongoDB New Tricks
MongoDB
 
Hidden pearls for High-Performance-Persistence
Sven Ruppert
 
Ejb3 Struts Tutorial En
Ankur Dongre
 
Ejb3 Struts Tutorial En
Ankur Dongre
 
Kerberizing spark. Spark Summit east
Jorge Lopez-Malla
 
REST easy with API Platform
Antonio Peric-Mazar
 
Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016
Zabbix
 
Ad

More from Sergio Bossa (8)

PDF
To be relational, or not to be relational? That's NOT the question!
Sergio Bossa
 
PDF
Three Languages in Thirty Minutes
Sergio Bossa
 
PDF
Actor concurrency for the JVM: a case study
Sergio Bossa
 
PDF
Scalable Databases - From Relational Databases To Polyglot Persistence
Sergio Bossa
 
PDF
Scale Your Database And Be Happy
Sergio Bossa
 
ODP
Clustering In The Wild
Sergio Bossa
 
PDF
Real Terracotta
Sergio Bossa
 
PDF
Gridify your Spring application with Grid Gain @ Spring Italian Meeting 2008
Sergio Bossa
 
To be relational, or not to be relational? That's NOT the question!
Sergio Bossa
 
Three Languages in Thirty Minutes
Sergio Bossa
 
Actor concurrency for the JVM: a case study
Sergio Bossa
 
Scalable Databases - From Relational Databases To Polyglot Persistence
Sergio Bossa
 
Scale Your Database And Be Happy
Sergio Bossa
 
Clustering In The Wild
Sergio Bossa
 
Real Terracotta
Sergio Bossa
 
Gridify your Spring application with Grid Gain @ Spring Italian Meeting 2008
Sergio Bossa
 
Ad

Terrastore - A document database for developers

  • 1. Sergio Bossa @sbtourist Terrastore A document database for developers
  • 2. About Me Software architect and engineer Gioco Digitale (online gambling and casinos). Long time open source enthusiast and contributor Spring. Taconite. Terracotta. Actorom, Terrastore ... (Micro)-Blogger http://twitter.com/sbtourist http://sbtourist.blogspot.com
  • 3. NOSQL ... what? 1998 Just a tiny non-relational database. 2009 Non-relational databases as a replacement for relational ones? Nowadays ... Not Only SQL. Use the right tool for your job.
  • 4. NOSQL ... why? When you're in troubles with ... Data Model. Relational mismatch. Variable schema. Data Access Patterns. Expensive joins. Denormalized data. Scalability. More data. More processing.
  • 5. No SQL, Yes ... ? Heterogeneity. Key/Value based. Voldemort. Document based. MongoDB. Riak. Terrastore. Column based. Cassandra. HBase. Graph based. Neo4J.
  • 6. Terrastore! Document Store. Ubiquitous. Consistent. Distributed. Scalable. Written in Java. Based on Terracotta. Open Source. Apache-licensed.
  • 7. Your data, your documents { "name" : "Sergio", "surname" : "Bossa", "twitter" : "@sbtourist" }
  • 10. Distribute as a single cluster
  • 12. But ... Why Terrastore?!?!
  • 15. Complex things possible ( almost ;)
  • 16. Get started in seconds One command installation and startup ... $> ant -f terrastore-install.xml quickstart -Dquickstart.dir=...
  • 17. Easy installation Master: $> ant -f terrastore-install.xml single-master -Dmaster.server.port 9510 -Dinstall.dir=... Server: $> ant -f terrastore-install.xml server -Dinstall.dir=...
  • 18. No complex configuration Master: $master>./start.sh Server: $server>./start.sh --master --httpHost --httpPort --nodeHost --nodePort ...
  • 19. No impedence mismatch Java: public class Character { private String name; private List<Character> friends; private List<Character> foes; // ... } Json: {"name" : "Spider-man", "friends" : [{"name" : "Iceman"}] "foes" : [{"name" : "Kingpin"}]}
  • 20. Simple basic operations Put documents in buckets ... PUT /bucket/key Content-Type: application/json {...} Get documents from buckets ... GET /bucket/key Content-Type: application/json {...}
  • 21. Range queries Find documents in bucket with keys in a given range ... GET /bucket/range?comparator=comparator_name& startKey=start_key& endKey=end_key& timeToLive=max_age Content-Type: application/json {...}
  • 22. Built-in comparators Lexicographical Ascendant. Descendant. Numerical. Ascendant. Descendant.
  • 23. What if ... custom comparators? @AutoDetect(name="my-comparator") public class MyComparator implements terrastore.store.operators.Comparator { public int compare(String key1, String key2) { // ... } }
  • 24. Predicate queries Find documents in bucket satisfying a given predicate condition ... GET /bucket/predicate? predicate=type:expression Content-Type: application/json {...}
  • 25. Conditional put/get Conditionally put documents in buckets ... PUT /bucket/key? predicate=type:expression Content-Type: application/json {...} Conditionally get documents from buckets ... GET /bucket/key? predicate=type:expression Content-Type: application/json {...}
  • 26. Built-in predicate conditions JXPapth Based on X-Path. Find people whose name is 'Sergio': jxpath:/name[.='Sergio'] JavaScript Applies a JavaScript-like condition. Find people whose name is 'Sergio': js:value.name=='Sergio'
  • 27. What if ... custom conditions? @AutoDetect(name="my-condition") public class MyCondition implements terrastore.store.operators.Condition { public boolean isSatisfied(String key, Map<String, Object> value, String expression) { // ... } }
  • 28. Server-side updates Atomically execute complex updates to a document ... PUT /bucket/key/update?function=function_name& timeout=timeout_value Content-Type: application/json {...}
  • 29. Built-in update functions Atomic Counters Atomically increment/decrement/set-up one or more counters. Merge Merge the stored document with provided values. JavaScript custom update Update the stored document by executing a user- provided javascript function.
  • 30. What if ... custom functions? @AutoDetect(name="my-function") public class MyFunction implements terrastore.store.operators.Function { public Map<String, Object> apply(String key, Map<String, Object> value, Map<String, Object> parameters) { // ... } }
  • 31. Easy scale-out A command line parameter: $server>./start.sh --master --ensemble And a json configuration file: { "localCluster" : "apple", "discoveryInterval" : 5000, "clusters" : ["apple", "orange"], "seeds" : {"orange" : "192.168.1.2:6001"} }
  • 32. DSL-like Java APIs Fluent APIs. Http-based. Transparent (yet configurable) object conversion. // Create client: TerrastoreClient client = new TerrastoreClient("http://localhost:8080", new HTTPConnectionFactory()); // Create object: Person sbtourist = new Person("Sergio Bossa”, "sbtourist") // Put: client.bucket("people").key("1").put(person); // Get: sbtourist = client.bucket("people").key("1").get(Person.class);
  • 33. Support for other languages Clojure http://github.com/sbtourist/terrastore-cloj Python http://dnene.bitbucket.org/docs/pyterrastore Scala http://github.com/ssuravarapu/Terrastore-Scala-Client http://github.com/teigen/terrastore-scala Easy to add more!
  • 35. More! Backup Import/export documents to/from buckets. Events management Get notified of document updates. Third-party products integration. Write-behind. ActiveMQ integration for higher reliability. Custom data partitioning Retain control of where your data is placed. Indexing and searching Terrastore-Search. ElasticSearch integration. Cross-origin resource sharing support Integrate with browser-based clients.
  • 36. Now that I have an hammer ... Don't go blinded. Use the right tool for the job! Terrastore is best suited for: Data hot spots. Computational data. Complex, rich or variable data. Throw-away data.
  • 37. Final words ... engaging. Explore http://code.google.com/p/terrastore Download http://code.google.com/p/terrastore/downloads/list Hack http://code.google. com/p/terrastore/source/checkout Participate http://groups.google.com/group/terrastore- discussions Enjoy!
  • 38. Q&A Contact me on: http://twitter.com/sbtourist