SlideShare a Scribd company logo
1 of 52
Download to read offline
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 MongoDBrogerbodamer
 
Building Apps with MongoDB
Building Apps with MongoDBBuilding Apps with MongoDB
Building Apps with MongoDBNate Abele
 
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 TeamsMongoDB
 
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 MongoDBMongoDB
 
MongoDB Advanced Schema Design - Inboxes
MongoDB Advanced Schema Design - InboxesMongoDB Advanced Schema Design - Inboxes
MongoDB Advanced Schema Design - InboxesJared 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 WayMongoDB
 
Schema Design by Example ~ MongoSF 2012
Schema Design by Example ~ MongoSF 2012Schema Design by Example ~ MongoSF 2012
Schema Design by Example ~ MongoSF 2012hungarianhc
 
Socialite, the Open Source Status Feed
Socialite, the Open Source Status FeedSocialite, the Open Source Status Feed
Socialite, the Open Source Status FeedMongoDB
 
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 dbMongoDB
 
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 MongoDBStennie Steneker
 
Data Modeling for the Real World
Data Modeling for the Real WorldData Modeling for the Real World
Data Modeling for the Real WorldMike 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 databasesRyan CrawCour
 
Managing Social Content with MongoDB
Managing Social Content with MongoDBManaging Social Content with MongoDB
Managing Social Content with MongoDBMongoDB
 
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 conferenceleinweber
 
CouchDB at JAOO Århus 2009
CouchDB at JAOO Århus 2009CouchDB at JAOO Århus 2009
CouchDB at JAOO Århus 2009Jason Davies
 
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 2011Steven 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 DatabasesDaniel 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-AppsAndrew 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 LawleyNETWAYS
 
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.jsGuilherme 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 #2won 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 ZPUGDCMike Dirolf
 
Mongodb intro
Mongodb introMongodb intro
Mongodb introchristkv
 
Aggregation Framework MongoDB Days Munich
Aggregation Framework MongoDB Days MunichAggregation Framework MongoDB Days Munich
Aggregation Framework MongoDB Days MunichNorberto Leite
 
Why NoSQL Makes Sense
Why NoSQL Makes SenseWhy NoSQL Makes Sense
Why NoSQL Makes SenseMongoDB
 

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 AcquiaMarc Seeger
 
The current state of anonymous filesharing
The current state of anonymous filesharingThe current state of anonymous filesharing
The current state of anonymous filesharingMarc 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 webcrawlerMarc 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 InfrastuctureMarc Seeger
 
Communitygetriebene Android Systemerweiterungen
Communitygetriebene Android SystemerweiterungenCommunitygetriebene Android Systemerweiterungen
Communitygetriebene Android SystemerweiterungenMarc 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
 
The Dirac Video CoDec
The Dirac Video CoDecThe Dirac Video CoDec
The Dirac Video CoDecMarc Seeger
 
Anonimität - Konzepte und Werkzeuge
Anonimität - Konzepte und WerkzeugeAnonimität - Konzepte und Werkzeuge
Anonimität - Konzepte und WerkzeugeMarc 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 UnternehmenskommunikationMarc Seeger
 
xDSL, DSLAM & CO
xDSL, DSLAM & COxDSL, DSLAM & CO
xDSL, DSLAM & COMarc Seeger
 
Ruby Xml Mapping
Ruby Xml MappingRuby Xml Mapping
Ruby Xml MappingMarc 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 UpdateMarc 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

TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 

Recently uploaded (20)

TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 

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