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

An Introduction To NoSQL & MongoDB
An Introduction To NoSQL & MongoDBAn Introduction To NoSQL & MongoDB
An Introduction To NoSQL & MongoDB
Lee Theobald
 
Mongodb basics and architecture
Mongodb basics and architectureMongodb basics and architecture
Mongodb basics and architecture
Bishal Khanal
 
Apache HBase™
Apache HBase™Apache HBase™
Apache HBase™
Prashant Gupta
 
Apache ZooKeeper
Apache ZooKeeperApache ZooKeeper
Apache ZooKeeper
Scott Leberknight
 
Transformations and actions a visual guide training
Transformations and actions a visual guide trainingTransformations and actions a visual guide training
Transformations and actions a visual guide training
Spark Summit
 
ElasticSearch Basic Introduction
ElasticSearch Basic IntroductionElasticSearch Basic Introduction
ElasticSearch Basic Introduction
Mayur Rathod
 
MongoDB Fundamentals
MongoDB FundamentalsMongoDB Fundamentals
MongoDB Fundamentals
MongoDB
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
Jin wook
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
NodeXperts
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
MongoDB
 
What's New in Apache Hive
What's New in Apache HiveWhat's New in Apache Hive
What's New in Apache Hive
DataWorks Summit
 
Indexing with MongoDB
Indexing with MongoDBIndexing with MongoDB
Indexing with MongoDB
MongoDB
 
NOSQL vs SQL
NOSQL vs SQLNOSQL vs SQL
NOSQL vs SQL
Mohammed Fazuluddin
 
Hive+Tez: A performance deep dive
Hive+Tez: A performance deep diveHive+Tez: A performance deep dive
Hive+Tez: A performance deep dive
t3rmin4t0r
 
Apache Sqoop Tutorial | Sqoop: Import & Export Data From MySQL To HDFS | Hado...
Apache Sqoop Tutorial | Sqoop: Import & Export Data From MySQL To HDFS | Hado...Apache Sqoop Tutorial | Sqoop: Import & Export Data From MySQL To HDFS | Hado...
Apache Sqoop Tutorial | Sqoop: Import & Export Data From MySQL To HDFS | Hado...
Edureka!
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
Ravi Teja
 
Introduction to MongoDB.pptx
Introduction to MongoDB.pptxIntroduction to MongoDB.pptx
Introduction to MongoDB.pptx
Surya937648
 
Caching
CachingCaching
Caching
Nascenia IT
 
Big data and Hadoop
Big data and HadoopBig data and Hadoop
Big data and Hadoop
Rahul Agarwal
 

What's hot (20)

An Introduction To NoSQL & MongoDB
An Introduction To NoSQL & MongoDBAn Introduction To NoSQL & MongoDB
An Introduction To NoSQL & MongoDB
 
Mongodb basics and architecture
Mongodb basics and architectureMongodb basics and architecture
Mongodb basics and architecture
 
Apache HBase™
Apache HBase™Apache HBase™
Apache HBase™
 
Apache ZooKeeper
Apache ZooKeeperApache ZooKeeper
Apache ZooKeeper
 
Transformations and actions a visual guide training
Transformations and actions a visual guide trainingTransformations and actions a visual guide training
Transformations and actions a visual guide training
 
ElasticSearch Basic Introduction
ElasticSearch Basic IntroductionElasticSearch Basic Introduction
ElasticSearch Basic Introduction
 
MongoDB Fundamentals
MongoDB FundamentalsMongoDB Fundamentals
MongoDB Fundamentals
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
 
MongoDB
MongoDBMongoDB
MongoDB
 
What's New in Apache Hive
What's New in Apache HiveWhat's New in Apache Hive
What's New in Apache Hive
 
Indexing with MongoDB
Indexing with MongoDBIndexing with MongoDB
Indexing with MongoDB
 
NOSQL vs SQL
NOSQL vs SQLNOSQL vs SQL
NOSQL vs SQL
 
Hive+Tez: A performance deep dive
Hive+Tez: A performance deep diveHive+Tez: A performance deep dive
Hive+Tez: A performance deep dive
 
Apache Sqoop Tutorial | Sqoop: Import & Export Data From MySQL To HDFS | Hado...
Apache Sqoop Tutorial | Sqoop: Import & Export Data From MySQL To HDFS | Hado...Apache Sqoop Tutorial | Sqoop: Import & Export Data From MySQL To HDFS | Hado...
Apache Sqoop Tutorial | Sqoop: Import & Export Data From MySQL To HDFS | Hado...
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Introduction to MongoDB.pptx
Introduction to MongoDB.pptxIntroduction to MongoDB.pptx
Introduction to MongoDB.pptx
 
Caching
CachingCaching
Caching
 
Big data and Hadoop
Big data and HadoopBig data and Hadoop
Big data and Hadoop
 

Similar to Terrastore - A document database for developers

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

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

The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
The Magic Revealed: Four Real-World Examples of Using the Client Object Model...
 
OrientDB introduction - NoSQL
OrientDB introduction - NoSQLOrientDB introduction - NoSQL
OrientDB introduction - NoSQL
 
Infrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and OpsInfrastructure-as-code: bridging the gap between Devs and Ops
Infrastructure-as-code: bridging the gap between Devs and Ops
 
Hands On Spring Data
Hands On Spring DataHands On Spring Data
Hands On Spring Data
 
Guillotina
GuillotinaGuillotina
Guillotina
 
Elasticsearch And Apache Lucene For Apache Spark And MLlib
Elasticsearch And Apache Lucene For Apache Spark And MLlibElasticsearch And Apache Lucene For Apache Spark And MLlib
Elasticsearch And Apache Lucene For Apache Spark And MLlib
 
Reversing JavaScript
Reversing JavaScriptReversing JavaScript
Reversing JavaScript
 
Null Bachaav - May 07 Attack Monitoring workshop.
Null Bachaav - May 07 Attack Monitoring workshop.Null Bachaav - May 07 Attack Monitoring workshop.
Null Bachaav - May 07 Attack Monitoring workshop.
 
Hammock, a Good Place to Rest
Hammock, a Good Place to RestHammock, a Good Place to Rest
Hammock, a Good Place to Rest
 
CouchDB Mobile - From Couch to 5K in 1 Hour
CouchDB Mobile - From Couch to 5K in 1 HourCouchDB Mobile - From Couch to 5K in 1 Hour
CouchDB Mobile - From Couch to 5K in 1 Hour
 
Play framework
Play frameworkPlay framework
Play framework
 
Just one-shade-of-openstack
Just one-shade-of-openstackJust one-shade-of-openstack
Just one-shade-of-openstack
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC
 
Fun Teaching MongoDB New Tricks
Fun Teaching MongoDB New TricksFun Teaching MongoDB New Tricks
Fun Teaching MongoDB New Tricks
 
Hidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-PersistenceHidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-Persistence
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial EnEjb3 Struts Tutorial En
Ejb3 Struts Tutorial En
 
Ejb3 Struts Tutorial En
Ejb3 Struts Tutorial EnEjb3 Struts Tutorial En
Ejb3 Struts Tutorial En
 
Kerberizing spark. Spark Summit east
Kerberizing spark. Spark Summit eastKerberizing spark. Spark Summit east
Kerberizing spark. Spark Summit east
 
REST easy with API Platform
REST easy with API PlatformREST easy with API Platform
REST easy with API Platform
 
Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016
Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016
Erik Skytthe - Monitoring Mesos, Docker, Containers with Zabbix | ZabConf2016
 

More from Sergio Bossa

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

More from Sergio Bossa (8)

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

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