SlideShare a Scribd company logo
1 of 73
Download to read offline
I have a NoSQLToaster.
Why would I want a NoSQL database?
Matthew D. Groves @mgroves
Original slides by Matthew Revell - @matthewrevell
©2016 Couchbase Inc. 2
Where am I?
• Connect.Tech
• http://connect-js.com
• http://twitter.com/connect_js
©2016 Couchbase Inc. 3
Who am I?
• Matthew D. Groves
• Developer Advocate for Couchbase
• @mgroves onTwitter
• Podcast and blog: http://crosscuttingconcerns.com
• “I am not an expert, but I am an enthusiast.” – Alan Stevens
©2016 Couchbase Inc. 4
Tweet something, get a sticker!
Use #Couchbase
Tweet something interesting you’ve learned.
Tweet a picture.
I’ve got stickers and a prize for the best tweet!
©2016 Couchbase Inc. 5
Couchbase and CouchDB
Couchbase is to CouchDB
as
MySQL is to SQL Server
©2016 Couchbase Inc. 6
SQL is the norm, right?
https://commons.wikimedia.org/wiki/File:George_Wendt_at_the_41st_Emmy_Awards_cropped.jpg
~3200 BC: invention of writing in Mesopotamia
~300 BC: Library of Alexandria
~1041AD: Movable type invented in China
1450: Movable type invented in Europe
1822: Babbage’s paper on the application of difference engines
1943: Colossus, the first programmable digital computer
1957-1960: IBM SABRE, the first commercial use of a database
1970: EF Codd proposes the relational database model
1974: Ingres released
1979: Commercial launch of Oracle database
1988: Object databases appear
1989: Microsoft SQL Server version 1
1991: HTTP v0.9
1995: MySQL’s initial release
2005: CouchDB released
2006: Google’s BigTable paper
2007: Amazon’s Dynamo paper
2008-2009: The NoSQL Cambrian explosion: Riak, MongoDB,Cassandra, Redis
2010: Couchbase arrives on the scene
NoSQL isn’t a very useful term
©2016 Couchbase Inc. 9
Easy?
©2016 Couchbase Inc. 10
Scalable?
https://commons.wikimedia.org/wiki/File:Dagwood_sandwich.jpg
©2016 Couchbase Inc. 11
Commodity Hardware
https://commons.wikimedia.org/wiki/File:Rear_of_rack_at_NERSC_data_center_-_closeup.jpg
©2016 Couchbase Inc. 12
ACID vs BASE?
https://commons.wikimedia.org/wiki/File:PH_Scale.svg
Atomic
Consistent
Isolated
Durable
Basic Availability
Soft-state
Eventual consistency
©2016 Couchbase Inc. 13
Schema Schemaless
https://en.wikipedia.org/wiki/File:Star-schema-example.png
©2016 Couchbase Inc. 14
Normalized Denormalized
https://commons.wikimedia.org/wiki/File:Frown.JPG
©2016 Couchbase Inc. 15
First: Why NoSQL?
https://www.flickr.com/photos/wonderlane/13067014944
©2016 Couchbase Inc. 16
Round pegs, square holes
http://www.timesofbook.com/2013/09/blobfish-image-gallery.html#.V6iXwbgrJhE
©2016 Couchbase Inc. 17
Perhaps SQL is right for this project
©2016 Couchbase Inc. 18
Scaling can be hard
https://commons.wikimedia.org/wiki/File:Sandwiches_Vienna.jpg
©2016 Couchbase Inc. 19
Availability is hard
https://www.flickr.com/photos/jeepersmedia/14562425273/
C
A
P
©2016 Couchbase Inc. 20
Schemas can be hard
https://commons.wikimedia.org/wiki/File:MediaWiki_database_schema_1-17_(r82044).svg
©2016 Couchbase Inc. 21
Types of NoSQL databases
Document
Key/Value
Columnar
Graph
©2016 Couchbase Inc. 22
Convergence!
©2016 Couchbase Inc. 23
Document
???
©2016 Couchbase Inc. 25
What makes it a document database?
JSON
XML
BSON
©2016 Couchbase Inc. 28
The document database
understands the
format of the document
©2016 Couchbase Inc. 29
It can do
server-side stuff
Buckets
Documents
Views
N1QL
"ClientProductCode","Title","Quantity"
"TShirtCBS","Couchbase logo t-shirt (small)",29
"TShirtCBM","Couchbase logo t-shirt (medium)",72
"TShirtCBL","Couchbase logo t-shirt (large)",34
"TShirtCBXL","Couchbase logo t-shirt (extra large)",12
"StickerCBLogo","Couchbase logo sticker",256
"PenCBLogo","Couchbase logo pen",365
class Program
{
private static IBucket _bucket;
static void Main(string[] args)
{
SetupCouchbase();
LoadStockList();
ClusterHelper.Close();
}
private static void SetupCouchbase()
{
ClientConfiguration config = new ClientConfiguration();
config.Servers = new List<Uri> {new Uri("couchbase://192.168.1.5") };
ClusterHelper.Initialize(config);
_bucket = ClusterHelper.GetBucket("default");
}
private static void LoadStockList()
{
var csv = new CsvReader(File.OpenText("swag.csv"));
while (csv.Read())
{
var record = csv.GetRecord<dynamic>();
var document = new Document<dynamic>
{
Id = record.ClientProductCode,
Content = new
{
record.Title,
record.Quantity
}
};
_bucket.Insert(document);
Console.WriteLine($"Added document '{record.ClientProductCode}'");
}
}
}
private static void SetupCouchbase()
{
ClientConfiguration config = new ClientConfiguration();
config.Servers = new List<Uri> {new Uri("couchbase://192.168.1.5") };
ClusterHelper.Initialize(config);
_bucket = ClusterHelper.GetBucket("default");
}
private static void LoadStockList() {
var csv = new CsvReader(File.OpenText("swag.csv"));
while (csv.Read()) {
var record = csv.GetRecord<dynamic>();
var document = new Document<dynamic> {
Id = record.ClientProductCode,
Content = new {
record.Title,
record.Quantity
}
};
_bucket.Insert(document);
Console.WriteLine($"Added document '{record.ClientProductCode}'");
}
}
private static void GetDocument()
{
var doc = _bucket.Get<dynamic>("StickerCBLogo");
Console.WriteLine($"Document Key: {doc.Id}");
Console.WriteLine($"Title: {doc.Value.title}");
Console.WriteLine($"Quantity: {doc.Value.quantity}");
}
©2016 Couchbase Inc. 38
Typical Document Database Operations
• Upsert (aka set)
• Inserts document if key doesn’t exist, replaces otherwise
• Insert (aka add)
• Inserts document, error if it already exists
• Update (aka replace)
• Updates document, error if it doesn’t exist
• Delete
• Get
©2016 Couchbase Inc. 39
N1QL
SELECT m.*
FROM `default` m
WHERE META(m).id = ‘StickerCBLogo’
SELECT m.*
FROM `default` m
WHERE m.quantity > 10
Great for Dev
Scales Easily
Consistently Fast
©2016 Couchbase Inc. 41
Use cases for Document Databases
• User profiles
• Session stores
• Content management
• General relational replacement
• http://info.couchbase.com/15Q1TopTenUC.html
©2016 Couchbase Inc. 42
Key/Value Database
©2016 Couchbase Inc. 44
Key-Value Databases
In-memory caches
and
distributed data stores
©2016 Couchbase Inc. 45
Doesn’t care what your data is (mostly)
KEY1 { type: “json” }
KEY2 <data type=“xml”></data>
KEY3 Lorem ipsum
… 00100101000100101
KEYN
https://www.flickr.com/photos/dcmot/23168680069
Buckets
Key-Value Pairs
©2016 Couchbase Inc. 47
C# Riak
private static void DoStuffWithRiak()
{
var cluster = RiakCluster.FromConfig("riakConfig");
var client = cluster.CreateClient();
var actor = new RiakObject("actors", "James Bond","Sean Connery");
client.Put(actor);
var actorBackOut = client.Get("actors", "James Bond");
var str = System.Text.Encoding.UTF8.GetString(actorBackOut.Value.Value);
Console.WriteLine($"Value: {str}");
}
©2016 Couchbase Inc. 49
Introducing: Eventual Consistency!
©2016 Couchbase Inc. 50
Eventual Consistency
https://www.flickr.com/photos/scottchene/7046992749
https://commons.wikimedia.org/wiki/File:Timothy_Dalton_1987.jpg
https://commons.wikimedia.org/wiki/File:Sir_Roger_Moore_crop.jpg
©2016 Couchbase Inc. 51
There can be only one!
https://en.wikipedia.org/wiki/File:Highlander_film_Connor_MacLeod.jpg
©2016 Couchbase Inc. 52
So, fix it
https://www.flickr.com/photos/94086507@N00/84368105
ScalesWell
Highly Available
Data Agnostic
Maybe some extra work
©2016 Couchbase Inc. 54
Use Cases for K/V
• Data variability
• Object caching
• Session storage
• Large object storage
©2016 Couchbase Inc. 55
Columnar
Keyspaces
Column Families
Rows
Columns
©2016 Couchbase Inc. 58
Keyspace
©2016 Couchbase Inc. 59
Column Family
CREATE KEYSPACE mykeyspace
WITH replication = { 'class': 'SimpleStrategy',
'replication_factor': '1'};
CREATE TABLE users (firstname text, lastname text, age int,
email text, city text, PRIMARY KEY (lastname));
private static void DoStuffWithDataStax()
{
var cluster = Cluster.Builder().AddContactPoint("127.0.0.1").Build();
var session = cluster.Connect("mykeyspace");
session.Execute("insert into users (lastname, age, city, email, firstname)
values ('Jones', 35, 'Austin', 'bob@example.com', 'Bob')");
var userBackOut = session.Execute("select * from users where
lastname='Jones'").First();
Console.WriteLine($"{userBackOut["firstname"]} {userBackOut["age"]}");
}
Impedance Mismatch
ScalesWell (Ops Headache)
Suited to Analytics
©2016 Couchbase Inc. 64
Use cases for Columnar
•Metering data
•Really big data
•Analytics
©2016 Couchbase Inc. 65
Graph
https://commons.wikimedia.org/wiki/File:The_protein_interaction_network_of_Treponema_pallidum.png
©2016 Couchbase Inc. 66
Leonhard Euler
©2016 Couchbase Inc. 67
7 Bridges of Königsberg
©2016 Couchbase Inc. 69
Use cases for Graph databases
• Social networks / dating sites
• Fraud detection
• Parcel routing
• Shopping recommendations
©2016 Couchbase Inc. 70
Say what?
Relational
Document
Key/Value
Columnar
Graph
Object
others…
©2016 Couchbase Inc. 71
Box arrow box arrow
Web Logic
SQL
Riak
Couchbase
More Logic
Mobile
©2016 Couchbase Inc. 72
Couchbase, everybody!
http://couchbase.com/connect
http://info.couchbase.com/Connect16_Livestream_Registration.html
©2016 Couchbase Inc. 73
Where do you find us?
• developer.couchbase.com
• blog.couchbase.com
• forums.couchbase.com
• @couchbasedev
• #couchbase
• @mgroves
• @couchbase

More Related Content

Similar to I have a NoSQL Toaster - ConnectJS - October 2016

I Have a NoSQL Toaster - Troy .NET User Group - July 2017
I Have a NoSQL Toaster - Troy .NET User Group - July 2017I Have a NoSQL Toaster - Troy .NET User Group - July 2017
I Have a NoSQL Toaster - Troy .NET User Group - July 2017Matthew Groves
 
Slides: NoSQL Data Modeling Using JSON Documents – A Practical Approach
Slides: NoSQL Data Modeling Using JSON Documents – A Practical ApproachSlides: NoSQL Data Modeling Using JSON Documents – A Practical Approach
Slides: NoSQL Data Modeling Using JSON Documents – A Practical ApproachDATAVERSITY
 
i_have_a_nosql_toaster_-_qcon_-_june_2017.pptx
i_have_a_nosql_toaster_-_qcon_-_june_2017.pptxi_have_a_nosql_toaster_-_qcon_-_june_2017.pptx
i_have_a_nosql_toaster_-_qcon_-_june_2017.pptxKAMAUALEX
 
The Why, When, and How of NoSQL - A Practical Approach
The Why, When, and How of NoSQL - A Practical ApproachThe Why, When, and How of NoSQL - A Practical Approach
The Why, When, and How of NoSQL - A Practical ApproachDATAVERSITY
 
Couchbase Connect 2016: Monitoring Production Deployments The Tools – LinkedIn
Couchbase Connect 2016: Monitoring Production Deployments The Tools – LinkedInCouchbase Connect 2016: Monitoring Production Deployments The Tools – LinkedIn
Couchbase Connect 2016: Monitoring Production Deployments The Tools – LinkedInMichael Kehoe
 
Kafka & Couchbase Integration Patterns
Kafka & Couchbase Integration PatternsKafka & Couchbase Integration Patterns
Kafka & Couchbase Integration PatternsManuel Hurtado
 
Migration and Coexistence between Relational and NoSQL Databases by Manuel H...
 Migration and Coexistence between Relational and NoSQL Databases by Manuel H... Migration and Coexistence between Relational and NoSQL Databases by Manuel H...
Migration and Coexistence between Relational and NoSQL Databases by Manuel H...Big Data Spain
 
DMDW Extra Lesson - NoSql and MongoDB
DMDW  Extra Lesson - NoSql and MongoDBDMDW  Extra Lesson - NoSql and MongoDB
DMDW Extra Lesson - NoSql and MongoDBJohannes Hoppe
 
Moving Past Infrastructure Limitations
Moving Past Infrastructure LimitationsMoving Past Infrastructure Limitations
Moving Past Infrastructure LimitationsCaserta
 
Cassandra 2.0 to 2.1
Cassandra 2.0 to 2.1Cassandra 2.0 to 2.1
Cassandra 2.0 to 2.1Johnny Miller
 
SQL to NoSQL: Top 6 Questions
SQL to NoSQL: Top 6 QuestionsSQL to NoSQL: Top 6 Questions
SQL to NoSQL: Top 6 QuestionsMike Broberg
 
Paul Angus - Welcome to CloudStack Collaboration Conference
Paul Angus - Welcome to CloudStack Collaboration ConferencePaul Angus - Welcome to CloudStack Collaboration Conference
Paul Angus - Welcome to CloudStack Collaboration ConferenceShapeBlue
 
NoSQL and MongoDB Introdction
NoSQL and MongoDB IntrodctionNoSQL and MongoDB Introdction
NoSQL and MongoDB IntrodctionBrian Enochson
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octParadigma Digital
 
Simply Responsive CSS3
Simply Responsive CSS3Simply Responsive CSS3
Simply Responsive CSS3Denise Jacobs
 

Similar to I have a NoSQL Toaster - ConnectJS - October 2016 (20)

I Have a NoSQL Toaster - Troy .NET User Group - July 2017
I Have a NoSQL Toaster - Troy .NET User Group - July 2017I Have a NoSQL Toaster - Troy .NET User Group - July 2017
I Have a NoSQL Toaster - Troy .NET User Group - July 2017
 
Slides: NoSQL Data Modeling Using JSON Documents – A Practical Approach
Slides: NoSQL Data Modeling Using JSON Documents – A Practical ApproachSlides: NoSQL Data Modeling Using JSON Documents – A Practical Approach
Slides: NoSQL Data Modeling Using JSON Documents – A Practical Approach
 
i_have_a_nosql_toaster_-_qcon_-_june_2017.pptx
i_have_a_nosql_toaster_-_qcon_-_june_2017.pptxi_have_a_nosql_toaster_-_qcon_-_june_2017.pptx
i_have_a_nosql_toaster_-_qcon_-_june_2017.pptx
 
The Why, When, and How of NoSQL - A Practical Approach
The Why, When, and How of NoSQL - A Practical ApproachThe Why, When, and How of NoSQL - A Practical Approach
The Why, When, and How of NoSQL - A Practical Approach
 
Couchbase Connect 2016: Monitoring Production Deployments The Tools – LinkedIn
Couchbase Connect 2016: Monitoring Production Deployments The Tools – LinkedInCouchbase Connect 2016: Monitoring Production Deployments The Tools – LinkedIn
Couchbase Connect 2016: Monitoring Production Deployments The Tools – LinkedIn
 
Introduction to Couchbase
Introduction to CouchbaseIntroduction to Couchbase
Introduction to Couchbase
 
Kafka & Couchbase Integration Patterns
Kafka & Couchbase Integration PatternsKafka & Couchbase Integration Patterns
Kafka & Couchbase Integration Patterns
 
Migration and Coexistence between Relational and NoSQL Databases by Manuel H...
 Migration and Coexistence between Relational and NoSQL Databases by Manuel H... Migration and Coexistence between Relational and NoSQL Databases by Manuel H...
Migration and Coexistence between Relational and NoSQL Databases by Manuel H...
 
Couchbase Day
Couchbase DayCouchbase Day
Couchbase Day
 
DMDW Extra Lesson - NoSql and MongoDB
DMDW  Extra Lesson - NoSql and MongoDBDMDW  Extra Lesson - NoSql and MongoDB
DMDW Extra Lesson - NoSql and MongoDB
 
Moving Past Infrastructure Limitations
Moving Past Infrastructure LimitationsMoving Past Infrastructure Limitations
Moving Past Infrastructure Limitations
 
Cassandra 2.0 to 2.1
Cassandra 2.0 to 2.1Cassandra 2.0 to 2.1
Cassandra 2.0 to 2.1
 
Couchbase 101
Couchbase 101 Couchbase 101
Couchbase 101
 
SQL to NoSQL: Top 6 Questions
SQL to NoSQL: Top 6 QuestionsSQL to NoSQL: Top 6 Questions
SQL to NoSQL: Top 6 Questions
 
Paul Angus - Welcome to CloudStack Collaboration Conference
Paul Angus - Welcome to CloudStack Collaboration ConferencePaul Angus - Welcome to CloudStack Collaboration Conference
Paul Angus - Welcome to CloudStack Collaboration Conference
 
NoSQL and MongoDB Introdction
NoSQL and MongoDB IntrodctionNoSQL and MongoDB Introdction
NoSQL and MongoDB Introdction
 
Who *is* Jenkins?
Who *is* Jenkins?Who *is* Jenkins?
Who *is* Jenkins?
 
Manuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4octManuel Hurtado. Couchbase paradigma4oct
Manuel Hurtado. Couchbase paradigma4oct
 
Apache hadoop
Apache hadoopApache hadoop
Apache hadoop
 
Simply Responsive CSS3
Simply Responsive CSS3Simply Responsive CSS3
Simply Responsive CSS3
 

More from Matthew Groves

CREAM - That Conference Austin - January 2024.pptx
CREAM - That Conference Austin - January 2024.pptxCREAM - That Conference Austin - January 2024.pptx
CREAM - That Conference Austin - January 2024.pptxMatthew Groves
 
FluentMigrator - Dayton .NET - July 2023
FluentMigrator - Dayton .NET - July 2023FluentMigrator - Dayton .NET - July 2023
FluentMigrator - Dayton .NET - July 2023Matthew Groves
 
Cache Rules Everything Around Me - DevIntersection - December 2022
Cache Rules Everything Around Me - DevIntersection - December 2022Cache Rules Everything Around Me - DevIntersection - December 2022
Cache Rules Everything Around Me - DevIntersection - December 2022Matthew Groves
 
Putting the SQL Back in NoSQL - October 2022 - All Things Open
Putting the SQL Back in NoSQL - October 2022 - All Things OpenPutting the SQL Back in NoSQL - October 2022 - All Things Open
Putting the SQL Back in NoSQL - October 2022 - All Things OpenMatthew Groves
 
Cache Rules Everything Around Me - Momentum - October 2022.pptx
Cache Rules Everything Around Me - Momentum - October 2022.pptxCache Rules Everything Around Me - Momentum - October 2022.pptx
Cache Rules Everything Around Me - Momentum - October 2022.pptxMatthew Groves
 
Don't Drop ACID (July 2021)
Don't Drop ACID (July 2021)Don't Drop ACID (July 2021)
Don't Drop ACID (July 2021)Matthew Groves
 
Don't Drop ACID - Data Love - April 2021
Don't Drop ACID - Data Love - April 2021Don't Drop ACID - Data Love - April 2021
Don't Drop ACID - Data Love - April 2021Matthew Groves
 
Demystifying NoSQL - All Things Open - October 2020
Demystifying NoSQL - All Things Open - October 2020Demystifying NoSQL - All Things Open - October 2020
Demystifying NoSQL - All Things Open - October 2020Matthew Groves
 
Autonomous Microservices - Manning - July 2020
Autonomous Microservices - Manning - July 2020Autonomous Microservices - Manning - July 2020
Autonomous Microservices - Manning - July 2020Matthew Groves
 
CONDG April 23 2020 - Baskar Rao - GraphQL
CONDG April 23 2020 - Baskar Rao - GraphQLCONDG April 23 2020 - Baskar Rao - GraphQL
CONDG April 23 2020 - Baskar Rao - GraphQLMatthew Groves
 
JSON Data Modeling - GDG Indy - April 2020
JSON Data Modeling - GDG Indy - April 2020JSON Data Modeling - GDG Indy - April 2020
JSON Data Modeling - GDG Indy - April 2020Matthew Groves
 
Background Tasks Without a Separate Service: Hangfire for ASP.NET - KCDC - Ju...
Background Tasks Without a Separate Service: Hangfire for ASP.NET - KCDC - Ju...Background Tasks Without a Separate Service: Hangfire for ASP.NET - KCDC - Ju...
Background Tasks Without a Separate Service: Hangfire for ASP.NET - KCDC - Ju...Matthew Groves
 
Intro to SQL++ - Detroit Tech Watch - June 2019
Intro to SQL++ - Detroit Tech Watch - June 2019Intro to SQL++ - Detroit Tech Watch - June 2019
Intro to SQL++ - Detroit Tech Watch - June 2019Matthew Groves
 
Autonomous Microservices - CodeMash - January 2019
Autonomous Microservices - CodeMash - January 2019Autonomous Microservices - CodeMash - January 2019
Autonomous Microservices - CodeMash - January 2019Matthew Groves
 
5 Popular Choices for NoSQL on a Microsoft Platform - Tulsa - July 2018
5 Popular Choices for NoSQL on a Microsoft Platform - Tulsa - July 20185 Popular Choices for NoSQL on a Microsoft Platform - Tulsa - July 2018
5 Popular Choices for NoSQL on a Microsoft Platform - Tulsa - July 2018Matthew Groves
 
JSON Data Modeling - July 2018 - Tulsa Techfest
JSON Data Modeling - July 2018 - Tulsa TechfestJSON Data Modeling - July 2018 - Tulsa Techfest
JSON Data Modeling - July 2018 - Tulsa TechfestMatthew Groves
 
5 NoSQL Options - Toronto - May 2018
5 NoSQL Options - Toronto - May 20185 NoSQL Options - Toronto - May 2018
5 NoSQL Options - Toronto - May 2018Matthew Groves
 
Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017Matthew Groves
 
5 Popular Choices for NoSQL on a Microsoft Platform - All Things Open - Octob...
5 Popular Choices for NoSQL on a Microsoft Platform - All Things Open - Octob...5 Popular Choices for NoSQL on a Microsoft Platform - All Things Open - Octob...
5 Popular Choices for NoSQL on a Microsoft Platform - All Things Open - Octob...Matthew Groves
 
Querying NoSQL with SQL - KCDC - August 2017
Querying NoSQL with SQL - KCDC - August 2017Querying NoSQL with SQL - KCDC - August 2017
Querying NoSQL with SQL - KCDC - August 2017Matthew Groves
 

More from Matthew Groves (20)

CREAM - That Conference Austin - January 2024.pptx
CREAM - That Conference Austin - January 2024.pptxCREAM - That Conference Austin - January 2024.pptx
CREAM - That Conference Austin - January 2024.pptx
 
FluentMigrator - Dayton .NET - July 2023
FluentMigrator - Dayton .NET - July 2023FluentMigrator - Dayton .NET - July 2023
FluentMigrator - Dayton .NET - July 2023
 
Cache Rules Everything Around Me - DevIntersection - December 2022
Cache Rules Everything Around Me - DevIntersection - December 2022Cache Rules Everything Around Me - DevIntersection - December 2022
Cache Rules Everything Around Me - DevIntersection - December 2022
 
Putting the SQL Back in NoSQL - October 2022 - All Things Open
Putting the SQL Back in NoSQL - October 2022 - All Things OpenPutting the SQL Back in NoSQL - October 2022 - All Things Open
Putting the SQL Back in NoSQL - October 2022 - All Things Open
 
Cache Rules Everything Around Me - Momentum - October 2022.pptx
Cache Rules Everything Around Me - Momentum - October 2022.pptxCache Rules Everything Around Me - Momentum - October 2022.pptx
Cache Rules Everything Around Me - Momentum - October 2022.pptx
 
Don't Drop ACID (July 2021)
Don't Drop ACID (July 2021)Don't Drop ACID (July 2021)
Don't Drop ACID (July 2021)
 
Don't Drop ACID - Data Love - April 2021
Don't Drop ACID - Data Love - April 2021Don't Drop ACID - Data Love - April 2021
Don't Drop ACID - Data Love - April 2021
 
Demystifying NoSQL - All Things Open - October 2020
Demystifying NoSQL - All Things Open - October 2020Demystifying NoSQL - All Things Open - October 2020
Demystifying NoSQL - All Things Open - October 2020
 
Autonomous Microservices - Manning - July 2020
Autonomous Microservices - Manning - July 2020Autonomous Microservices - Manning - July 2020
Autonomous Microservices - Manning - July 2020
 
CONDG April 23 2020 - Baskar Rao - GraphQL
CONDG April 23 2020 - Baskar Rao - GraphQLCONDG April 23 2020 - Baskar Rao - GraphQL
CONDG April 23 2020 - Baskar Rao - GraphQL
 
JSON Data Modeling - GDG Indy - April 2020
JSON Data Modeling - GDG Indy - April 2020JSON Data Modeling - GDG Indy - April 2020
JSON Data Modeling - GDG Indy - April 2020
 
Background Tasks Without a Separate Service: Hangfire for ASP.NET - KCDC - Ju...
Background Tasks Without a Separate Service: Hangfire for ASP.NET - KCDC - Ju...Background Tasks Without a Separate Service: Hangfire for ASP.NET - KCDC - Ju...
Background Tasks Without a Separate Service: Hangfire for ASP.NET - KCDC - Ju...
 
Intro to SQL++ - Detroit Tech Watch - June 2019
Intro to SQL++ - Detroit Tech Watch - June 2019Intro to SQL++ - Detroit Tech Watch - June 2019
Intro to SQL++ - Detroit Tech Watch - June 2019
 
Autonomous Microservices - CodeMash - January 2019
Autonomous Microservices - CodeMash - January 2019Autonomous Microservices - CodeMash - January 2019
Autonomous Microservices - CodeMash - January 2019
 
5 Popular Choices for NoSQL on a Microsoft Platform - Tulsa - July 2018
5 Popular Choices for NoSQL on a Microsoft Platform - Tulsa - July 20185 Popular Choices for NoSQL on a Microsoft Platform - Tulsa - July 2018
5 Popular Choices for NoSQL on a Microsoft Platform - Tulsa - July 2018
 
JSON Data Modeling - July 2018 - Tulsa Techfest
JSON Data Modeling - July 2018 - Tulsa TechfestJSON Data Modeling - July 2018 - Tulsa Techfest
JSON Data Modeling - July 2018 - Tulsa Techfest
 
5 NoSQL Options - Toronto - May 2018
5 NoSQL Options - Toronto - May 20185 NoSQL Options - Toronto - May 2018
5 NoSQL Options - Toronto - May 2018
 
Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017Full stack development with node and NoSQL - All Things Open - October 2017
Full stack development with node and NoSQL - All Things Open - October 2017
 
5 Popular Choices for NoSQL on a Microsoft Platform - All Things Open - Octob...
5 Popular Choices for NoSQL on a Microsoft Platform - All Things Open - Octob...5 Popular Choices for NoSQL on a Microsoft Platform - All Things Open - Octob...
5 Popular Choices for NoSQL on a Microsoft Platform - All Things Open - Octob...
 
Querying NoSQL with SQL - KCDC - August 2017
Querying NoSQL with SQL - KCDC - August 2017Querying NoSQL with SQL - KCDC - August 2017
Querying NoSQL with SQL - KCDC - August 2017
 

Recently uploaded

Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 

Recently uploaded (20)

Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 

I have a NoSQL Toaster - ConnectJS - October 2016

  • 1. I have a NoSQLToaster. Why would I want a NoSQL database? Matthew D. Groves @mgroves Original slides by Matthew Revell - @matthewrevell
  • 2. ©2016 Couchbase Inc. 2 Where am I? • Connect.Tech • http://connect-js.com • http://twitter.com/connect_js
  • 3. ©2016 Couchbase Inc. 3 Who am I? • Matthew D. Groves • Developer Advocate for Couchbase • @mgroves onTwitter • Podcast and blog: http://crosscuttingconcerns.com • “I am not an expert, but I am an enthusiast.” – Alan Stevens
  • 4. ©2016 Couchbase Inc. 4 Tweet something, get a sticker! Use #Couchbase Tweet something interesting you’ve learned. Tweet a picture. I’ve got stickers and a prize for the best tweet!
  • 5. ©2016 Couchbase Inc. 5 Couchbase and CouchDB Couchbase is to CouchDB as MySQL is to SQL Server
  • 6. ©2016 Couchbase Inc. 6 SQL is the norm, right? https://commons.wikimedia.org/wiki/File:George_Wendt_at_the_41st_Emmy_Awards_cropped.jpg
  • 7. ~3200 BC: invention of writing in Mesopotamia ~300 BC: Library of Alexandria ~1041AD: Movable type invented in China 1450: Movable type invented in Europe 1822: Babbage’s paper on the application of difference engines 1943: Colossus, the first programmable digital computer 1957-1960: IBM SABRE, the first commercial use of a database 1970: EF Codd proposes the relational database model 1974: Ingres released 1979: Commercial launch of Oracle database 1988: Object databases appear 1989: Microsoft SQL Server version 1 1991: HTTP v0.9 1995: MySQL’s initial release 2005: CouchDB released 2006: Google’s BigTable paper 2007: Amazon’s Dynamo paper 2008-2009: The NoSQL Cambrian explosion: Riak, MongoDB,Cassandra, Redis 2010: Couchbase arrives on the scene
  • 8. NoSQL isn’t a very useful term
  • 10. ©2016 Couchbase Inc. 10 Scalable? https://commons.wikimedia.org/wiki/File:Dagwood_sandwich.jpg
  • 11. ©2016 Couchbase Inc. 11 Commodity Hardware https://commons.wikimedia.org/wiki/File:Rear_of_rack_at_NERSC_data_center_-_closeup.jpg
  • 12. ©2016 Couchbase Inc. 12 ACID vs BASE? https://commons.wikimedia.org/wiki/File:PH_Scale.svg Atomic Consistent Isolated Durable Basic Availability Soft-state Eventual consistency
  • 13. ©2016 Couchbase Inc. 13 Schema Schemaless https://en.wikipedia.org/wiki/File:Star-schema-example.png
  • 14. ©2016 Couchbase Inc. 14 Normalized Denormalized https://commons.wikimedia.org/wiki/File:Frown.JPG
  • 15. ©2016 Couchbase Inc. 15 First: Why NoSQL? https://www.flickr.com/photos/wonderlane/13067014944
  • 16. ©2016 Couchbase Inc. 16 Round pegs, square holes http://www.timesofbook.com/2013/09/blobfish-image-gallery.html#.V6iXwbgrJhE
  • 17. ©2016 Couchbase Inc. 17 Perhaps SQL is right for this project
  • 18. ©2016 Couchbase Inc. 18 Scaling can be hard https://commons.wikimedia.org/wiki/File:Sandwiches_Vienna.jpg
  • 19. ©2016 Couchbase Inc. 19 Availability is hard https://www.flickr.com/photos/jeepersmedia/14562425273/ C A P
  • 20. ©2016 Couchbase Inc. 20 Schemas can be hard https://commons.wikimedia.org/wiki/File:MediaWiki_database_schema_1-17_(r82044).svg
  • 21. ©2016 Couchbase Inc. 21 Types of NoSQL databases Document Key/Value Columnar Graph
  • 22. ©2016 Couchbase Inc. 22 Convergence!
  • 23. ©2016 Couchbase Inc. 23 Document
  • 24. ???
  • 25. ©2016 Couchbase Inc. 25 What makes it a document database?
  • 27.
  • 28. ©2016 Couchbase Inc. 28 The document database understands the format of the document
  • 29. ©2016 Couchbase Inc. 29 It can do server-side stuff
  • 31. "ClientProductCode","Title","Quantity" "TShirtCBS","Couchbase logo t-shirt (small)",29 "TShirtCBM","Couchbase logo t-shirt (medium)",72 "TShirtCBL","Couchbase logo t-shirt (large)",34 "TShirtCBXL","Couchbase logo t-shirt (extra large)",12 "StickerCBLogo","Couchbase logo sticker",256 "PenCBLogo","Couchbase logo pen",365
  • 32. class Program { private static IBucket _bucket; static void Main(string[] args) { SetupCouchbase(); LoadStockList(); ClusterHelper.Close(); } private static void SetupCouchbase() { ClientConfiguration config = new ClientConfiguration(); config.Servers = new List<Uri> {new Uri("couchbase://192.168.1.5") }; ClusterHelper.Initialize(config); _bucket = ClusterHelper.GetBucket("default"); } private static void LoadStockList() { var csv = new CsvReader(File.OpenText("swag.csv")); while (csv.Read()) { var record = csv.GetRecord<dynamic>(); var document = new Document<dynamic> { Id = record.ClientProductCode, Content = new { record.Title, record.Quantity } }; _bucket.Insert(document); Console.WriteLine($"Added document '{record.ClientProductCode}'"); } } }
  • 33. private static void SetupCouchbase() { ClientConfiguration config = new ClientConfiguration(); config.Servers = new List<Uri> {new Uri("couchbase://192.168.1.5") }; ClusterHelper.Initialize(config); _bucket = ClusterHelper.GetBucket("default"); }
  • 34. private static void LoadStockList() { var csv = new CsvReader(File.OpenText("swag.csv")); while (csv.Read()) { var record = csv.GetRecord<dynamic>(); var document = new Document<dynamic> { Id = record.ClientProductCode, Content = new { record.Title, record.Quantity } }; _bucket.Insert(document); Console.WriteLine($"Added document '{record.ClientProductCode}'"); } }
  • 35.
  • 36. private static void GetDocument() { var doc = _bucket.Get<dynamic>("StickerCBLogo"); Console.WriteLine($"Document Key: {doc.Id}"); Console.WriteLine($"Title: {doc.Value.title}"); Console.WriteLine($"Quantity: {doc.Value.quantity}"); }
  • 37.
  • 38. ©2016 Couchbase Inc. 38 Typical Document Database Operations • Upsert (aka set) • Inserts document if key doesn’t exist, replaces otherwise • Insert (aka add) • Inserts document, error if it already exists • Update (aka replace) • Updates document, error if it doesn’t exist • Delete • Get
  • 39. ©2016 Couchbase Inc. 39 N1QL SELECT m.* FROM `default` m WHERE META(m).id = ‘StickerCBLogo’ SELECT m.* FROM `default` m WHERE m.quantity > 10
  • 40. Great for Dev Scales Easily Consistently Fast
  • 41. ©2016 Couchbase Inc. 41 Use cases for Document Databases • User profiles • Session stores • Content management • General relational replacement • http://info.couchbase.com/15Q1TopTenUC.html
  • 42. ©2016 Couchbase Inc. 42 Key/Value Database
  • 43.
  • 44. ©2016 Couchbase Inc. 44 Key-Value Databases In-memory caches and distributed data stores
  • 45. ©2016 Couchbase Inc. 45 Doesn’t care what your data is (mostly) KEY1 { type: “json” } KEY2 <data type=“xml”></data> KEY3 Lorem ipsum … 00100101000100101 KEYN https://www.flickr.com/photos/dcmot/23168680069
  • 47. ©2016 Couchbase Inc. 47 C# Riak private static void DoStuffWithRiak() { var cluster = RiakCluster.FromConfig("riakConfig"); var client = cluster.CreateClient(); var actor = new RiakObject("actors", "James Bond","Sean Connery"); client.Put(actor); var actorBackOut = client.Get("actors", "James Bond"); var str = System.Text.Encoding.UTF8.GetString(actorBackOut.Value.Value); Console.WriteLine($"Value: {str}"); }
  • 48.
  • 49. ©2016 Couchbase Inc. 49 Introducing: Eventual Consistency!
  • 50. ©2016 Couchbase Inc. 50 Eventual Consistency https://www.flickr.com/photos/scottchene/7046992749 https://commons.wikimedia.org/wiki/File:Timothy_Dalton_1987.jpg https://commons.wikimedia.org/wiki/File:Sir_Roger_Moore_crop.jpg
  • 51. ©2016 Couchbase Inc. 51 There can be only one! https://en.wikipedia.org/wiki/File:Highlander_film_Connor_MacLeod.jpg
  • 52. ©2016 Couchbase Inc. 52 So, fix it https://www.flickr.com/photos/94086507@N00/84368105
  • 54. ©2016 Couchbase Inc. 54 Use Cases for K/V • Data variability • Object caching • Session storage • Large object storage
  • 55. ©2016 Couchbase Inc. 55 Columnar
  • 56.
  • 58. ©2016 Couchbase Inc. 58 Keyspace
  • 59. ©2016 Couchbase Inc. 59 Column Family
  • 60. CREATE KEYSPACE mykeyspace WITH replication = { 'class': 'SimpleStrategy', 'replication_factor': '1'}; CREATE TABLE users (firstname text, lastname text, age int, email text, city text, PRIMARY KEY (lastname));
  • 61. private static void DoStuffWithDataStax() { var cluster = Cluster.Builder().AddContactPoint("127.0.0.1").Build(); var session = cluster.Connect("mykeyspace"); session.Execute("insert into users (lastname, age, city, email, firstname) values ('Jones', 35, 'Austin', 'bob@example.com', 'Bob')"); var userBackOut = session.Execute("select * from users where lastname='Jones'").First(); Console.WriteLine($"{userBackOut["firstname"]} {userBackOut["age"]}"); }
  • 62.
  • 63. Impedance Mismatch ScalesWell (Ops Headache) Suited to Analytics
  • 64. ©2016 Couchbase Inc. 64 Use cases for Columnar •Metering data •Really big data •Analytics
  • 65. ©2016 Couchbase Inc. 65 Graph https://commons.wikimedia.org/wiki/File:The_protein_interaction_network_of_Treponema_pallidum.png
  • 66. ©2016 Couchbase Inc. 66 Leonhard Euler
  • 67. ©2016 Couchbase Inc. 67 7 Bridges of Königsberg
  • 68.
  • 69. ©2016 Couchbase Inc. 69 Use cases for Graph databases • Social networks / dating sites • Fraud detection • Parcel routing • Shopping recommendations
  • 70. ©2016 Couchbase Inc. 70 Say what? Relational Document Key/Value Columnar Graph Object others…
  • 71. ©2016 Couchbase Inc. 71 Box arrow box arrow Web Logic SQL Riak Couchbase More Logic Mobile
  • 72. ©2016 Couchbase Inc. 72 Couchbase, everybody! http://couchbase.com/connect http://info.couchbase.com/Connect16_Livestream_Registration.html
  • 73. ©2016 Couchbase Inc. 73 Where do you find us? • developer.couchbase.com • blog.couchbase.com • forums.couchbase.com • @couchbasedev • #couchbase • @mgroves • @couchbase