SlideShare a Scribd company logo
NoSQL Databases

   an overview
Who? Why?

● During studies: Excited by simplicity
● Crawler Project:
   ○ 100 Million records
   ○ Single server
   ○ 100+ QPS
   ○ Initially: Limited query options
   ○ Now: Query them all
   ○ Experimented with all of them as a backend
What types of database are there?

● SQL
   ○ Relational (MySQL, Postgres, Oracle, DB2)
● NoSQL
   ○ Key Value Stores (Membase, Voldemort)
   ○ Document Databases (CouchDB, MongoDB, Riak)
   ○ Wide Column Stores (Cassandra, HBase, Hypertable)
   ○ Graph Databases (Neo4j)
   ○ Datastructure Servers (Redis) 
What do they often have in common

● Most of them:
   ○ Not 100% ACID compliant (but fast!)
   ○ Standardized interfaces (http, protocol buffers, ...)
   ○ Schema free
   ○ Open source

● The distributed ones:
   ○ Eventual consistency
   ○ Scaling is easy (no, really!)
Key - Value stores

   simple and fast
Key Value Stores

- Data model is an associative array (aka: hash / dictionary / ...)

                     KEY                                    VALUE

            "/user/john/profile"        "{ age: 42, friends: ['joanne', 'jose'], avatar:
                                                        'icon234.png'}"
                "users:online"                                122

        "/top_companies/acquia.php"     "<HTML><LOREM>ipsum</LOREM>...</HTML>"

          "server:build-1:packages"               "rubygems|java|tomcat"

         "server:build-1:last-launch"        "Thu Oct 06 19:38:29 +0200 2011"




         logic in the key
Key Value Stores

- Don't want to know what the "value" part is supposed to be

                    KEY                             VALUE

           "/user/john/profile"        11010101010110100101010010101010

               "users:online"          101001010010110101101001010100101

       "/top_companies/acquia.php"     11010111011100101010011101011010

         "server:build-1:packages"     11110101101001110101001110101010

        "server:build-1:last-launch"   111101010010001001010010101010110
Key Value Stores

Examples:
 ● MemcacheDB
 ● Membase
 ● Project Voldemort
 ● Scalaris
 ● (Kyoto + Tokyo) Cabinet
 ● Redis (can do way more)
 ● Berkley DB
 ● HandlerSocket for MySQL (can also do a bit more)
 ● Amazon S3


 ● Note: A lot of the other databases can be used as a key-
   value store
Document databases

know what you're talking about 
Document databases

- Data model is still an associative array

                KEY                          DOCUMENT

                 X                              Y
Document databases

- Difference: servers know about your values
                 KEY                             DOCUMENT

          "jane@hotmail.com"   "{
                                   age: 42, 
                                   friends: ['malroy@gmail.com'], 
                                   avatar: 'icon-234.png'
                               }"
          "john@example.org"   "{
                               age: 33, 
                               highscores: {
                                   'sim-garden': [
                                       {1317930201: 131232, 
                                       time-played: 320}
                                       ]
                                   }
                               }"
          "malroy@gmail.com"   "{ age: 51, friends: ['jane@hotmail.com']}"
Document databases
            KEY                             DOCUMENT

     "bob@builder.com"    "{
                              age: 23,
                              friends: ['joanne@aol.com', 'jose@bigcorp.
                          com'],
                              avatar: 'kitten-141.png'
                          }"
     "jane@hotmail.com"   "{
                              age: 42, 
                              friends: ['malroy@gmail.com'], 
                              avatar: 'icon-234.png'
                          }"
     "john@example.org"   "{
                          age: 33, 
                          highscores: {
                              'sim-garden': [
                                  {1317930201: 131232, 
                                  time-played: 320}
                                  ]
                              }
                          }"
     "malroy@gmail.com"   "{ age: 51, friends: ['jane@hotmail.com']}"
Document databases


                     Nested data types
                              "{
                              age: 33, 
                              highscores: {
                                  'sim-garden': [
     "john@example.org"               {1317930201: 131232, 
                                      time-played: 320}
                                      ]
                                  }
                              }"
Document databases



                     References by key
                     (not enforced by database)


     "malroy@gmail.com"             "{ age: 51, friends: ['jane@hotmail.com']}"
Document Databases

"Relations" by embedding:
"{
title: "The cake is a lie", 
timestamp: 1317910201, 
body: "Lorem ipsum sit dolor amet. Yadda [...] Thanks."
comments': [
        {
        author: "bob@builder.com", 
        timestamp: 1317930231
        text: "First!"
        },
        {
        author: "janedoe@example.com", 
        timestamp: 1317930359
        text: "Bob, you're an idiot!"
    }
        ]
    }
}"
Document Databases

Server side modifications:




                         Counters
Document Databases

Server side modifications:




@database.domains.update("acquia.com", "{cms: 'drupal'}")
Document Databases

                 Query for data




     db.companies.find({ "city" : "Boston" } );
Document Databases

Examples:
 ● CouchDB
 ● MongoDB
 ● Terrastore
 ● OrientDB
 ● Riak
Wide column stores

   bigdata is calling
Wide column stores

- Data model is ... weird
("a sparse, distributed, persistent multidimensional sorted map") *




                                                       * Google's BigTable Paper
Wide Column Stores
Wide Column Stores


    "Users": {
        "RowKey1": {
                email : "derp@ibm.com",
                img: "http://example.com/derp.jpg"
                },
        "RowKey2": {
                email: "test@example.com",
                nickname: "The hammer"
          }
Wide Column Stores
Wide Column Stores




           eben hewitt - the cassandra data model:
           http://www.slideshare.net/ebenhewitt/cassandra-datamodel-4985524
Wide Column Stores

Examples:
 ● Cassandra
 ● HBase
 ● Hypertable 




 Note: All of those target multi-machine scalability
Graph Databases

your DB is now in a relationship
Graph Databases
Data model usually consists of:

                            Nodes


                        Relationships


                          Properties




Note: They can have billions of those on a single machine!
Graph Databases




                  source: neo4j wiki
Graph Databases




       http://www.slideshare.net/peterneubauer/neo4j-5-cool-graph-examples-4473985
Graph Databases




                  neo4j.org
Graph Databases
Traversal:
 1. start at a node A
 2. Collect all connected nodes if they:
     1. have a certain property on themselves
     2. have a certain property on their relationship to node A
Graph Databases
Traversal:
"All Bostonians that know PHP"
Graph databases

"How do I find my first node to start the traversal from?"
Graph databases

Examples:
 ● Neo4J
 ● Sones
Data structure servers

       aka: Redis
Data structure servers (redis)

Data schema:
 ● Strings
 ● Hashes
 ● Lists
 ● Sets
 ● Sorted sets.
Data structure servers (redis)

Functionality for Lists:
 ● push/pop (blocking or non-blocking, from left or right)
 ● trim (-> capped lists)
     ○ example: a simple log buffer for the last 10000 messages:
     ○
     ○ def log(message)
     ○   @redis.lpush(:log_collection, message)
     ○   @redis.ltrim(:log_collection, 0, 10000)
     ○ end


 ● brpoplpush()
Data structure servers (redis)

Functionality for Strings:
 ● decrement/increment (integers + soon float)
 ● getbit,setbit,getrange,setrange ( -> fixed length bitmaps?)
 ● append (-> grow the bitmaps)
 ● mget/mset (set/get multiple keys at once)
 ● expire (great for caching, works for all keys)

@redis.incr(:counter_acquia_com, 1)
@redis.setbit(:room_vacancy, 42, 0) #guest moved in room 42
@redis.setbit(:room_vacancy, 42, 1) #guest moved out
Data structure servers (redis)

Functionality for Hashes:
 ● decrement/increment (integers + soon float)
    ○ visitor counter?
 ● hexists (determine if a field exists) 
    ○ check if e.g. this customer is a credit card number in
      the system (server side!) 
Data structure servers (redis)

Functionality for Sets:
 ● server side intersections, unions, differences
     ○ Give me all keys in the set "customers:usa" that are
       also in the set "customers:devcloud"
     ○ What is the difference between the sets "sales-leads"
       and "already-called"
         ■ result can be saves as a new set
 ● "sorted sets"
     ○ sets with a score
     ○ score can be incremented/decremented
     ○  server side intersections and unions available
Data structure servers (redis)

Pub/Sub:
 ● A simple publish subscribe system
 ● publish(channel, message)
 ● subscribe(channel) / unsubscribe(channel)
     ○ also available: subscribe to a certain pattern
         ■ psubscribe(:alert_channel, "prio:high:*")
           {|message| 
               send_sms(@on_call, message)
           }
Data structure servers (redis)

Using "redis-benchmark" on my MBP:

GET: 69930.07 requests per second
SET: 70921.98 requests per second
INCR: 71428.57 requests per second
LPUSH: 70422.53 requests per second
LPOP: 69930.07 requests per second
SADD: 70422.53 requests per second
SPOP: 74626.87 requests per second
Search in NoSQL

  Where's Waldo?
How can I get my data?

Access by known key (most of them)




    db.get("domains:acquia.com")
         db.get("users:john")
How can I get my data?

Map-Reduce (CouchDB, Riak, MongoDB)
How can I get my data?

Map-Reduce (example: where do my customers come from?)

Map:
function(doc) {
  if (doc.Type == "customer") {
    emit(doc.country, 1);
 }
}

Reduce:
function (key, values) {
    return sum(values);
}
How can I get my data?

Secondary Indexes (e.g. Riak, Cassandra, MongoDB)



                MongoDB:
    db.users.find({last_name: 'Smith'})
How can I get my data?

Graph traversal (Graph databases)

    


       Chose your poison: SPARQL/Gremlin/Blueprint/...
How can I get my data?

External search services
    


   ● Elastic Search has CouchDB Integration (+unofficial MongoDB)
  ● "Solandra" allows you to save your Solr index to Cassandra 
             ● "Riak Search" got integrated into Riak
Personal favorites

● Riak (scales really nicely over several servers)
● Redis (fast and useful) 
● MongoDB (annoying to scale, but fast for smaller things, really nice querying options)
● Elasticsearch (clutter free and easily scalable search)
Links

nosql.mypopescu.com
"My curated guide to NoSQL Databases and Polyglot Persistence"


www.nosqlweekly.com
"A free weekly newsletter featuring curated news, articles, new releases, jobs etc
related to NoSQL."

More Related Content

What's hot

MongoDB San Francisco 2013: Data Modeling Examples From the Real World presen...
MongoDB San Francisco 2013: Data Modeling Examples From the Real World presen...MongoDB San Francisco 2013: Data Modeling Examples From the Real World presen...
MongoDB San Francisco 2013: Data Modeling Examples From the Real World presen...
MongoDB
 
Schema Design with MongoDB
Schema Design with MongoDBSchema Design with MongoDB
Schema Design with MongoDB
rogerbodamer
 
Building Apps with MongoDB
Building Apps with MongoDBBuilding Apps with MongoDB
Building Apps with MongoDB
Nate Abele
 
MongoDB dessi-codemotion
MongoDB dessi-codemotionMongoDB dessi-codemotion
MongoDB dessi-codemotion
Massimiliano Dessì
 
CouchDB
CouchDBCouchDB
CouchDB
King Huang
 
Webinar: General Technical Overview of MongoDB for Dev Teams
Webinar: General Technical Overview of MongoDB for Dev TeamsWebinar: General Technical Overview of MongoDB for Dev Teams
Webinar: General Technical Overview of MongoDB for Dev Teams
MongoDB
 
Building web applications with mongo db presentation
Building web applications with mongo db presentationBuilding web applications with mongo db presentation
Building web applications with mongo db presentationMurat Çakal
 
Building a Cross Channel Content Delivery Platform with MongoDB
Building a Cross Channel Content Delivery Platform with MongoDBBuilding a Cross Channel Content Delivery Platform with MongoDB
Building a Cross Channel Content Delivery Platform with MongoDB
MongoDB
 
MongoDB Advanced Schema Design - Inboxes
MongoDB Advanced Schema Design - InboxesMongoDB Advanced Schema Design - Inboxes
MongoDB Advanced Schema Design - Inboxes
Jared Rosoff
 
MongoDB Europe 2016 - ETL for Pros – Getting Data Into MongoDB The Right Way
MongoDB Europe 2016 - ETL for Pros – Getting Data Into MongoDB The Right WayMongoDB Europe 2016 - ETL for Pros – Getting Data Into MongoDB The Right Way
MongoDB Europe 2016 - ETL for Pros – Getting Data Into MongoDB The Right Way
MongoDB
 
Schema Design by Example ~ MongoSF 2012
Schema Design by Example ~ MongoSF 2012Schema Design by Example ~ MongoSF 2012
Schema Design by Example ~ MongoSF 2012
hungarianhc
 
Socialite, the Open Source Status Feed
Socialite, the Open Source Status FeedSocialite, the Open Source Status Feed
Socialite, the Open Source Status Feed
MongoDB
 
Building your first app with mongo db
Building your first app with mongo dbBuilding your first app with mongo db
Building your first app with mongo db
MongoDB
 
MongoDB Workshop
MongoDB WorkshopMongoDB Workshop
MongoDB Workshop
eagerdeveloper
 
MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB
 
MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB
 
Agile Schema Design: An introduction to MongoDB
Agile Schema Design: An introduction to MongoDBAgile Schema Design: An introduction to MongoDB
Agile Schema Design: An introduction to MongoDB
Stennie Steneker
 
Data Modeling for the Real World
Data Modeling for the Real WorldData Modeling for the Real World
Data Modeling for the Real World
Mike Friedman
 

What's hot (20)

MongoDB San Francisco 2013: Data Modeling Examples From the Real World presen...
MongoDB San Francisco 2013: Data Modeling Examples From the Real World presen...MongoDB San Francisco 2013: Data Modeling Examples From the Real World presen...
MongoDB San Francisco 2013: Data Modeling Examples From the Real World presen...
 
Schema Design with MongoDB
Schema Design with MongoDBSchema Design with MongoDB
Schema Design with MongoDB
 
Building Apps with MongoDB
Building Apps with MongoDBBuilding Apps with MongoDB
Building Apps with MongoDB
 
MongoDB dessi-codemotion
MongoDB dessi-codemotionMongoDB dessi-codemotion
MongoDB dessi-codemotion
 
CouchDB
CouchDBCouchDB
CouchDB
 
Webinar: General Technical Overview of MongoDB for Dev Teams
Webinar: General Technical Overview of MongoDB for Dev TeamsWebinar: General Technical Overview of MongoDB for Dev Teams
Webinar: General Technical Overview of MongoDB for Dev Teams
 
Building web applications with mongo db presentation
Building web applications with mongo db presentationBuilding web applications with mongo db presentation
Building web applications with mongo db presentation
 
Building a Cross Channel Content Delivery Platform with MongoDB
Building a Cross Channel Content Delivery Platform with MongoDBBuilding a Cross Channel Content Delivery Platform with MongoDB
Building a Cross Channel Content Delivery Platform with MongoDB
 
MongoDB Advanced Schema Design - Inboxes
MongoDB Advanced Schema Design - InboxesMongoDB Advanced Schema Design - Inboxes
MongoDB Advanced Schema Design - Inboxes
 
MongoDB Europe 2016 - ETL for Pros – Getting Data Into MongoDB The Right Way
MongoDB Europe 2016 - ETL for Pros – Getting Data Into MongoDB The Right WayMongoDB Europe 2016 - ETL for Pros – Getting Data Into MongoDB The Right Way
MongoDB Europe 2016 - ETL for Pros – Getting Data Into MongoDB The Right Way
 
Schema Design by Example ~ MongoSF 2012
Schema Design by Example ~ MongoSF 2012Schema Design by Example ~ MongoSF 2012
Schema Design by Example ~ MongoSF 2012
 
MediaGlu and Mongo DB
MediaGlu and Mongo DBMediaGlu and Mongo DB
MediaGlu and Mongo DB
 
Socialite, the Open Source Status Feed
Socialite, the Open Source Status FeedSocialite, the Open Source Status Feed
Socialite, the Open Source Status Feed
 
Building your first app with mongo db
Building your first app with mongo dbBuilding your first app with mongo db
Building your first app with mongo db
 
MongoDB Workshop
MongoDB WorkshopMongoDB Workshop
MongoDB Workshop
 
MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Chicago 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
 
MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
MongoDB .local Toronto 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pi...
 
Agile Schema Design: An introduction to MongoDB
Agile Schema Design: An introduction to MongoDBAgile Schema Design: An introduction to MongoDB
Agile Schema Design: An introduction to MongoDB
 
Data exchange formats
Data exchange formatsData exchange formats
Data exchange formats
 
Data Modeling for the Real World
Data Modeling for the Real WorldData Modeling for the Real World
Data Modeling for the Real World
 

Similar to NoSQL databases

Modeling JSON data for NoSQL document databases
Modeling JSON data for NoSQL document databasesModeling JSON data for NoSQL document databases
Modeling JSON data for NoSQL document databases
Ryan CrawCour
 
Managing Social Content with MongoDB
Managing Social Content with MongoDBManaging Social Content with MongoDB
Managing Social Content with MongoDB
MongoDB
 
MongoDB - A Document NoSQL Database
MongoDB - A Document NoSQL DatabaseMongoDB - A Document NoSQL Database
MongoDB - A Document NoSQL DatabaseRuben Inoto Soto
 
CouchDB @ red dirt ruby conference
CouchDB @ red dirt ruby conferenceCouchDB @ red dirt ruby conference
CouchDB @ red dirt ruby conference
leinweber
 
CouchDB at JAOO Århus 2009
CouchDB at JAOO Århus 2009CouchDB at JAOO Århus 2009
CouchDB at JAOO Århus 2009Jason Davies
 
The Rise of NoSQL
The Rise of NoSQLThe Rise of NoSQL
The Rise of NoSQL
Arnd Kleinbeck
 
MongoDB, PHP and the cloud - php cloud summit 2011
MongoDB, PHP and the cloud - php cloud summit 2011MongoDB, PHP and the cloud - php cloud summit 2011
MongoDB, PHP and the cloud - php cloud summit 2011
Steven Francia
 
Semi Formal Model for Document Oriented Databases
Semi Formal Model for Document Oriented DatabasesSemi Formal Model for Document Oriented Databases
Semi Formal Model for Document Oriented Databases
Daniel Coupal
 
Azure DocumentDB: Advanced Features for Large Scale-Apps
Azure DocumentDB: Advanced Features for Large Scale-AppsAzure DocumentDB: Advanced Features for Large Scale-Apps
Azure DocumentDB: Advanced Features for Large Scale-Apps
Andrew Liu
 
OSDC 2012 | Scaling with MongoDB by Ross Lawley
OSDC 2012 | Scaling with MongoDB by Ross LawleyOSDC 2012 | Scaling with MongoDB by Ross Lawley
OSDC 2012 | Scaling with MongoDB by Ross Lawley
NETWAYS
 
Edição de Texto Rico com React e Draft.js
Edição de Texto Rico com React e Draft.jsEdição de Texto Rico com React e Draft.js
Edição de Texto Rico com React e Draft.js
Guilherme Vierno
 
Couchbase Korea User Group 2nd Meetup #2
Couchbase Korea User Group 2nd Meetup #2Couchbase Korea User Group 2nd Meetup #2
Couchbase Korea User Group 2nd Meetup #2
won min jang
 
Kicking ass with redis
Kicking ass with redisKicking ass with redis
Kicking ass with redisDvir Volk
 
MongoDB at ZPUGDC
MongoDB at ZPUGDCMongoDB at ZPUGDC
MongoDB at ZPUGDC
Mike Dirolf
 
Mongodb intro
Mongodb introMongodb intro
Mongodb intro
christkv
 
Aggregation Framework MongoDB Days Munich
Aggregation Framework MongoDB Days MunichAggregation Framework MongoDB Days Munich
Aggregation Framework MongoDB Days Munich
Norberto Leite
 
Why NoSQL Makes Sense
Why NoSQL Makes SenseWhy NoSQL Makes Sense
Why NoSQL Makes Sense
MongoDB
 

Similar to NoSQL databases (20)

Modeling JSON data for NoSQL document databases
Modeling JSON data for NoSQL document databasesModeling JSON data for NoSQL document databases
Modeling JSON data for NoSQL document databases
 
Managing Social Content with MongoDB
Managing Social Content with MongoDBManaging Social Content with MongoDB
Managing Social Content with MongoDB
 
Mongo db presentation
Mongo db presentationMongo db presentation
Mongo db presentation
 
MongoDB - A Document NoSQL Database
MongoDB - A Document NoSQL DatabaseMongoDB - A Document NoSQL Database
MongoDB - A Document NoSQL Database
 
CouchDB @ red dirt ruby conference
CouchDB @ red dirt ruby conferenceCouchDB @ red dirt ruby conference
CouchDB @ red dirt ruby conference
 
Latinoware
LatinowareLatinoware
Latinoware
 
CouchDB at JAOO Århus 2009
CouchDB at JAOO Århus 2009CouchDB at JAOO Århus 2009
CouchDB at JAOO Århus 2009
 
The Rise of NoSQL
The Rise of NoSQLThe Rise of NoSQL
The Rise of NoSQL
 
MongoDB, PHP and the cloud - php cloud summit 2011
MongoDB, PHP and the cloud - php cloud summit 2011MongoDB, PHP and the cloud - php cloud summit 2011
MongoDB, PHP and the cloud - php cloud summit 2011
 
Semi Formal Model for Document Oriented Databases
Semi Formal Model for Document Oriented DatabasesSemi Formal Model for Document Oriented Databases
Semi Formal Model for Document Oriented Databases
 
Azure DocumentDB: Advanced Features for Large Scale-Apps
Azure DocumentDB: Advanced Features for Large Scale-AppsAzure DocumentDB: Advanced Features for Large Scale-Apps
Azure DocumentDB: Advanced Features for Large Scale-Apps
 
OSDC 2012 | Scaling with MongoDB by Ross Lawley
OSDC 2012 | Scaling with MongoDB by Ross LawleyOSDC 2012 | Scaling with MongoDB by Ross Lawley
OSDC 2012 | Scaling with MongoDB by Ross Lawley
 
Edição de Texto Rico com React e Draft.js
Edição de Texto Rico com React e Draft.jsEdição de Texto Rico com React e Draft.js
Edição de Texto Rico com React e Draft.js
 
Couchbase Korea User Group 2nd Meetup #2
Couchbase Korea User Group 2nd Meetup #2Couchbase Korea User Group 2nd Meetup #2
Couchbase Korea User Group 2nd Meetup #2
 
Kicking ass with redis
Kicking ass with redisKicking ass with redis
Kicking ass with redis
 
MongoDB at ZPUGDC
MongoDB at ZPUGDCMongoDB at ZPUGDC
MongoDB at ZPUGDC
 
Mongodb intro
Mongodb introMongodb intro
Mongodb intro
 
MongoDB
MongoDBMongoDB
MongoDB
 
Aggregation Framework MongoDB Days Munich
Aggregation Framework MongoDB Days MunichAggregation Framework MongoDB Days Munich
Aggregation Framework MongoDB Days Munich
 
Why NoSQL Makes Sense
Why NoSQL Makes SenseWhy NoSQL Makes Sense
Why NoSQL Makes Sense
 

More from Marc Seeger

DevOps Boston - Heartbleed at Acquia
DevOps Boston - Heartbleed at AcquiaDevOps Boston - Heartbleed at Acquia
DevOps Boston - Heartbleed at Acquia
Marc Seeger
 
The current state of anonymous filesharing
The current state of anonymous filesharingThe current state of anonymous filesharing
The current state of anonymous filesharing
Marc Seeger
 
Lunch and learn: Cucumber and Capybara
Lunch and learn: Cucumber and CapybaraLunch and learn: Cucumber and Capybara
Lunch and learn: Cucumber and CapybaraMarc Seeger
 
building blocks of a scalable webcrawler
building blocks of a scalable webcrawlerbuilding blocks of a scalable webcrawler
building blocks of a scalable webcrawler
Marc Seeger
 
Communitygetriebe Android Systementwicklung
Communitygetriebe Android SystementwicklungCommunitygetriebe Android Systementwicklung
Communitygetriebe Android SystementwicklungMarc Seeger
 
Eventdriven I/O - A hands on introduction
Eventdriven I/O - A hands on introductionEventdriven I/O - A hands on introduction
Eventdriven I/O - A hands on introductionMarc Seeger
 
Alternative Infrastucture
Alternative InfrastuctureAlternative Infrastucture
Alternative Infrastucture
Marc Seeger
 
Communitygetriebene Android Systemerweiterungen
Communitygetriebene Android SystemerweiterungenCommunitygetriebene Android Systemerweiterungen
Communitygetriebene Android Systemerweiterungen
Marc Seeger
 
Key-Value Stores: a practical overview
Key-Value Stores: a practical overviewKey-Value Stores: a practical overview
Key-Value Stores: a practical overviewMarc Seeger
 
ZFS
ZFSZFS
The Dirac Video CoDec
The Dirac Video CoDecThe Dirac Video CoDec
The Dirac Video CoDec
Marc Seeger
 
Anonimität - Konzepte und Werkzeuge
Anonimität - Konzepte und WerkzeugeAnonimität - Konzepte und Werkzeuge
Anonimität - Konzepte und Werkzeuge
Marc Seeger
 
Security In Dect
Security In DectSecurity In Dect
Security In DectMarc Seeger
 
Social Media in der Unternehmenskommunikation
Social Media in der UnternehmenskommunikationSocial Media in der Unternehmenskommunikation
Social Media in der Unternehmenskommunikation
Marc Seeger
 
xDSL, DSLAM & CO
xDSL, DSLAM & COxDSL, DSLAM & CO
xDSL, DSLAM & CO
Marc Seeger
 
Ruby Xml Mapping
Ruby Xml MappingRuby Xml Mapping
Ruby Xml Mapping
Marc Seeger
 
HdM Stuttgart Präsentationstag PPTP VPN WLAN Update
HdM Stuttgart Präsentationstag PPTP VPN WLAN UpdateHdM Stuttgart Präsentationstag PPTP VPN WLAN Update
HdM Stuttgart Präsentationstag PPTP VPN WLAN Update
Marc Seeger
 

More from Marc Seeger (17)

DevOps Boston - Heartbleed at Acquia
DevOps Boston - Heartbleed at AcquiaDevOps Boston - Heartbleed at Acquia
DevOps Boston - Heartbleed at Acquia
 
The current state of anonymous filesharing
The current state of anonymous filesharingThe current state of anonymous filesharing
The current state of anonymous filesharing
 
Lunch and learn: Cucumber and Capybara
Lunch and learn: Cucumber and CapybaraLunch and learn: Cucumber and Capybara
Lunch and learn: Cucumber and Capybara
 
building blocks of a scalable webcrawler
building blocks of a scalable webcrawlerbuilding blocks of a scalable webcrawler
building blocks of a scalable webcrawler
 
Communitygetriebe Android Systementwicklung
Communitygetriebe Android SystementwicklungCommunitygetriebe Android Systementwicklung
Communitygetriebe Android Systementwicklung
 
Eventdriven I/O - A hands on introduction
Eventdriven I/O - A hands on introductionEventdriven I/O - A hands on introduction
Eventdriven I/O - A hands on introduction
 
Alternative Infrastucture
Alternative InfrastuctureAlternative Infrastucture
Alternative Infrastucture
 
Communitygetriebene Android Systemerweiterungen
Communitygetriebene Android SystemerweiterungenCommunitygetriebene Android Systemerweiterungen
Communitygetriebene Android Systemerweiterungen
 
Key-Value Stores: a practical overview
Key-Value Stores: a practical overviewKey-Value Stores: a practical overview
Key-Value Stores: a practical overview
 
ZFS
ZFSZFS
ZFS
 
The Dirac Video CoDec
The Dirac Video CoDecThe Dirac Video CoDec
The Dirac Video CoDec
 
Anonimität - Konzepte und Werkzeuge
Anonimität - Konzepte und WerkzeugeAnonimität - Konzepte und Werkzeuge
Anonimität - Konzepte und Werkzeuge
 
Security In Dect
Security In DectSecurity In Dect
Security In Dect
 
Social Media in der Unternehmenskommunikation
Social Media in der UnternehmenskommunikationSocial Media in der Unternehmenskommunikation
Social Media in der Unternehmenskommunikation
 
xDSL, DSLAM & CO
xDSL, DSLAM & COxDSL, DSLAM & CO
xDSL, DSLAM & CO
 
Ruby Xml Mapping
Ruby Xml MappingRuby Xml Mapping
Ruby Xml Mapping
 
HdM Stuttgart Präsentationstag PPTP VPN WLAN Update
HdM Stuttgart Präsentationstag PPTP VPN WLAN UpdateHdM Stuttgart Präsentationstag PPTP VPN WLAN Update
HdM Stuttgart Präsentationstag PPTP VPN WLAN Update
 

Recently uploaded

Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
Vlad Stirbu
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 

Recently uploaded (20)

Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 

NoSQL databases

  • 1. NoSQL Databases an overview
  • 2. Who? Why? ● During studies: Excited by simplicity ● Crawler Project: ○ 100 Million records ○ Single server ○ 100+ QPS ○ Initially: Limited query options ○ Now: Query them all ○ Experimented with all of them as a backend
  • 3. What types of database are there? ● SQL ○ Relational (MySQL, Postgres, Oracle, DB2) ● NoSQL ○ Key Value Stores (Membase, Voldemort) ○ Document Databases (CouchDB, MongoDB, Riak) ○ Wide Column Stores (Cassandra, HBase, Hypertable) ○ Graph Databases (Neo4j) ○ Datastructure Servers (Redis) 
  • 4. What do they often have in common ● Most of them: ○ Not 100% ACID compliant (but fast!) ○ Standardized interfaces (http, protocol buffers, ...) ○ Schema free ○ Open source ● The distributed ones: ○ Eventual consistency ○ Scaling is easy (no, really!)
  • 5. Key - Value stores simple and fast
  • 6. Key Value Stores - Data model is an associative array (aka: hash / dictionary / ...) KEY VALUE "/user/john/profile" "{ age: 42, friends: ['joanne', 'jose'], avatar: 'icon234.png'}" "users:online" 122 "/top_companies/acquia.php" "<HTML><LOREM>ipsum</LOREM>...</HTML>" "server:build-1:packages" "rubygems|java|tomcat" "server:build-1:last-launch" "Thu Oct 06 19:38:29 +0200 2011" logic in the key
  • 7. Key Value Stores - Don't want to know what the "value" part is supposed to be KEY VALUE "/user/john/profile" 11010101010110100101010010101010 "users:online" 101001010010110101101001010100101 "/top_companies/acquia.php" 11010111011100101010011101011010 "server:build-1:packages" 11110101101001110101001110101010 "server:build-1:last-launch" 111101010010001001010010101010110
  • 8. Key Value Stores Examples: ● MemcacheDB ● Membase ● Project Voldemort ● Scalaris ● (Kyoto + Tokyo) Cabinet ● Redis (can do way more) ● Berkley DB ● HandlerSocket for MySQL (can also do a bit more) ● Amazon S3 ● Note: A lot of the other databases can be used as a key- value store
  • 9. Document databases know what you're talking about 
  • 10. Document databases - Data model is still an associative array KEY DOCUMENT X Y
  • 11. Document databases - Difference: servers know about your values KEY DOCUMENT "jane@hotmail.com" "{     age: 42,      friends: ['malroy@gmail.com'],      avatar: 'icon-234.png' }" "john@example.org" "{ age: 33,  highscores: {     'sim-garden': [         {1317930201: 131232,          time-played: 320}         ]     } }" "malroy@gmail.com" "{ age: 51, friends: ['jane@hotmail.com']}"
  • 12. Document databases KEY DOCUMENT "bob@builder.com" "{     age: 23,     friends: ['joanne@aol.com', 'jose@bigcorp. com'],     avatar: 'kitten-141.png' }" "jane@hotmail.com" "{     age: 42,      friends: ['malroy@gmail.com'],      avatar: 'icon-234.png' }" "john@example.org" "{ age: 33,  highscores: {     'sim-garden': [         {1317930201: 131232,          time-played: 320}         ]     } }" "malroy@gmail.com" "{ age: 51, friends: ['jane@hotmail.com']}"
  • 13. Document databases Nested data types "{ age: 33,  highscores: {     'sim-garden': [ "john@example.org"         {1317930201: 131232,          time-played: 320}         ]     } }"
  • 14. Document databases References by key (not enforced by database) "malroy@gmail.com" "{ age: 51, friends: ['jane@hotmail.com']}"
  • 15. Document Databases "Relations" by embedding: "{ title: "The cake is a lie",  timestamp: 1317910201,  body: "Lorem ipsum sit dolor amet. Yadda [...] Thanks." comments': [         {         author: "bob@builder.com",          timestamp: 1317930231         text: "First!"         },         {         author: "janedoe@example.com",          timestamp: 1317930359         text: "Bob, you're an idiot!"     }         ]     } }"
  • 16. Document Databases Server side modifications: Counters
  • 17. Document Databases Server side modifications: @database.domains.update("acquia.com", "{cms: 'drupal'}")
  • 18. Document Databases Query for data db.companies.find({ "city" : "Boston" } );
  • 19. Document Databases Examples: ● CouchDB ● MongoDB ● Terrastore ● OrientDB ● Riak
  • 20. Wide column stores bigdata is calling
  • 21. Wide column stores - Data model is ... weird ("a sparse, distributed, persistent multidimensional sorted map") * * Google's BigTable Paper
  • 23. Wide Column Stores "Users": {     "RowKey1": {             email : "derp@ibm.com",             img: "http://example.com/derp.jpg"             },     "RowKey2": {             email: "test@example.com",             nickname: "The hammer"       }
  • 25. Wide Column Stores eben hewitt - the cassandra data model: http://www.slideshare.net/ebenhewitt/cassandra-datamodel-4985524
  • 26. Wide Column Stores Examples: ● Cassandra ● HBase ● Hypertable  Note: All of those target multi-machine scalability
  • 27. Graph Databases your DB is now in a relationship
  • 28. Graph Databases Data model usually consists of: Nodes Relationships Properties Note: They can have billions of those on a single machine!
  • 29. Graph Databases source: neo4j wiki
  • 30. Graph Databases http://www.slideshare.net/peterneubauer/neo4j-5-cool-graph-examples-4473985
  • 31. Graph Databases neo4j.org
  • 32. Graph Databases Traversal: 1. start at a node A 2. Collect all connected nodes if they: 1. have a certain property on themselves 2. have a certain property on their relationship to node A
  • 34. Graph databases "How do I find my first node to start the traversal from?"
  • 35. Graph databases Examples: ● Neo4J ● Sones
  • 37. Data structure servers (redis) Data schema: ● Strings ● Hashes ● Lists ● Sets ● Sorted sets.
  • 38. Data structure servers (redis) Functionality for Lists: ● push/pop (blocking or non-blocking, from left or right) ● trim (-> capped lists) ○ example: a simple log buffer for the last 10000 messages: ○ ○ def log(message) ○   @redis.lpush(:log_collection, message) ○   @redis.ltrim(:log_collection, 0, 10000) ○ end ● brpoplpush()
  • 39. Data structure servers (redis) Functionality for Strings: ● decrement/increment (integers + soon float) ● getbit,setbit,getrange,setrange ( -> fixed length bitmaps?) ● append (-> grow the bitmaps) ● mget/mset (set/get multiple keys at once) ● expire (great for caching, works for all keys) @redis.incr(:counter_acquia_com, 1) @redis.setbit(:room_vacancy, 42, 0) #guest moved in room 42 @redis.setbit(:room_vacancy, 42, 1) #guest moved out
  • 40. Data structure servers (redis) Functionality for Hashes: ● decrement/increment (integers + soon float) ○ visitor counter? ● hexists (determine if a field exists)  ○ check if e.g. this customer is a credit card number in the system (server side!) 
  • 41. Data structure servers (redis) Functionality for Sets: ● server side intersections, unions, differences ○ Give me all keys in the set "customers:usa" that are also in the set "customers:devcloud" ○ What is the difference between the sets "sales-leads" and "already-called" ■ result can be saves as a new set ● "sorted sets" ○ sets with a score ○ score can be incremented/decremented ○  server side intersections and unions available
  • 42. Data structure servers (redis) Pub/Sub: ● A simple publish subscribe system ● publish(channel, message) ● subscribe(channel) / unsubscribe(channel) ○ also available: subscribe to a certain pattern ■ psubscribe(:alert_channel, "prio:high:*") {|message|      send_sms(@on_call, message) }
  • 43. Data structure servers (redis) Using "redis-benchmark" on my MBP: GET: 69930.07 requests per second SET: 70921.98 requests per second INCR: 71428.57 requests per second LPUSH: 70422.53 requests per second LPOP: 69930.07 requests per second SADD: 70422.53 requests per second SPOP: 74626.87 requests per second
  • 44. Search in NoSQL Where's Waldo?
  • 45. How can I get my data? Access by known key (most of them) db.get("domains:acquia.com") db.get("users:john")
  • 46. How can I get my data? Map-Reduce (CouchDB, Riak, MongoDB)
  • 47. How can I get my data? Map-Reduce (example: where do my customers come from?) Map: function(doc) {   if (doc.Type == "customer") {     emit(doc.country, 1);  } } Reduce: function (key, values) {     return sum(values); }
  • 48. How can I get my data? Secondary Indexes (e.g. Riak, Cassandra, MongoDB) MongoDB: db.users.find({last_name: 'Smith'})
  • 49. How can I get my data? Graph traversal (Graph databases)      Chose your poison: SPARQL/Gremlin/Blueprint/...
  • 50. How can I get my data? External search services      ● Elastic Search has CouchDB Integration (+unofficial MongoDB) ● "Solandra" allows you to save your Solr index to Cassandra  ● "Riak Search" got integrated into Riak
  • 51. Personal favorites ● Riak (scales really nicely over several servers) ● Redis (fast and useful)  ● MongoDB (annoying to scale, but fast for smaller things, really nice querying options) ● Elasticsearch (clutter free and easily scalable search)
  • 52. Links nosql.mypopescu.com "My curated guide to NoSQL Databases and Polyglot Persistence" www.nosqlweekly.com "A free weekly newsletter featuring curated news, articles, new releases, jobs etc related to NoSQL."