SlideShare une entreprise Scribd logo
1  sur  40
.NET
User
Group
Bern
Roger Rudin
bbv Software Services AG
roger.rudin@bbv.ch
Agenda
– What is NoSQL
– Understanding the Motivation behind NoSQL
– MongoDB: A Document Oriented Database
– NoSQL Use Cases
What is NoSQL?
NoSQL = Not only SQL
NoSQL Definition http://nosql-database.org/
NoSQL DEFINITION: Next Generation Databases mostly
addressing some of the points: being non-relational,
distributed, open-source and horizontal scalable. The original
intention has been modern web-scale databases. The
movement began early 2009 and is growing rapidly. Often
more characteristics apply as: schema-free, easy replication
support, simple API, eventually consistent /BASE (not ACID),
a huge data amount, and more. So the misleading
term "nosql" (the community now translates it mostly with
"not only sql") should be seen as an alias to something like
the definition above.
Who Uses NoSQL?
• Twitter uses DBFlock/MySQL and Cassandra
• Cassandra is an open source project from Facebook
• Digg, Reddit use Cassandra
• bit.ly, foursquare, sourceforge, and New York Times use
MongoDB
• Adobe, Alibaba, Ebay, use Hadoop
UNDERSTANDING THE
MOTIVATION BEHIND NOSQL
Why SQL sucks..
• O/R mapping (also known as Impedance Mismatch)
• Data-Model changes are hard and expensive
• SQL database are designed for high throughput, not
low latency
• SQL Databases do no scale out well
• Microsoft, Oracle, and IBM charge big bucks for
databases
– And then you need to hire a database admin
• Take it from the context of Google, Twitter, Facebook
and Amazon.
– Your databases are among the biggest in the world and
nobody pays you for that feature
– Wasting profit!!!
What has NoSQL done?
• Implemented the most common use cases
as a piece of software
• Designed for scalability and performance
Visual Guide To NoSQL
http://blog.nahurst.com/visual-guide-to-nosql-systems
NoSQL Data Models
• Key-Value
• Document-Oriented
• Column Oriented/Tabular
MONGODB: A DOCUMENT
ORIENTED DATABASE
NoSQL Data Model: Document
Oriented
• Data is stored as “documents”
• We are not talking about Word documents
• Comparable to Aggregates in DDD
• It means mostly schema free structured data
• Can be queried
• Is easily mapped to OO systems (Domain
Model, DDD)
• No join need to implement via programming
Network Communications
• REST/JSON
• TCP/BSON (ClientDriver)
BSON [bee · sahn], short for Binary JSON, is a binary-en-
coded serialization of JSON-like documents. Like JSON,
BSON supports the embedding of documents and arrays
within other documents and arrays. BSON also contains
extensions that allow representation of data types that
are not part of the JSON spec. For example, BSON has a
Date type and a BinData type.
Client Drivers (Apache License)
• MongoDB currently has client support for the following
programming languages:
• C
• C++
• Erlang
• Haskell
• Java
• Javascript
• .NET (C# F#, PowerShell, etc)
• Perl
• PHP
• Python
• Ruby
• Scala
Collections vs. Capped Collection
(Table in SQL)
• Collections
• blog.posts
• blog.comments
• forum.users
• etc.
• Capped collections (ring buffer)
• Logging
• Caching
• Archiving
db.createCollection("log", {capped: true, size:
<bytes>, max: <docs>});
Indexes
• Every field in the document can be indexed
• Simple Indexes:
db.cities.ensureIndex({city: 1});
• Compound indexes:
db.cities.ensureIndex({city: 1, zip: 1});
• Unique indexes:
db.cities.ensureIndex({city: 1, zip: 1},
{unique: true});
• Sort order: 1 = descending, -1 = ascending
Relations
• ObjectId
db.users.insert(
{name: "Umbert", car_id: ObjectId("<GUID>")});
• DBRef
db.users.insert(
{name: "Umbert", car: new DBRef("cars“,
ObjectId("<GUID>")});
db.users.findOne(
{name: "Umbert"}).car.fetch().name;
Queries (1)
Queries (Regular Expressions)
{field: /regular.*expression/i}
// get all cities that start with “atl”
and end on “a” (e.g. atlanta)
db.cities.count({city: /atl.*a/i});
Queries (2) : LINQ
https://github.com/craiggwilson/fluent-mongo
Equals
x => x.Age == 21 will translate to {"Age": 21}
Greater Than, $gt:
x => x.Age > 18 will translate to {"Age": {$gt: 18}}
Greater Than Or Equal, $gte:
x => x.Age >= 18 will translate to {"Age": {$gte: 18}}
Less Than, $lt:
x => x.Age < 18 will translate to {"Age": {$lt: 18}}
Less Than Or Equal, $lte:
x => x.Age <= 18 will translate to {"Age": {$lte: 18}}
Not Equal, $ne:
x => x.Age != 18 will translate to {"Age": {$ne: 18}}
Atomic Operations (Optimistic
Locking)
• Update if current:
• Fetch the object.
• Modify the object locally.
• Send an update request that says "update the object
to this new value if it still matches its old value".
Atomic Operations: Sample
> t=db.inventory
> s = t.findOne({sku:'abc'})
{"_id" : "49df4d3c9664d32c73ea865a" , "sku" : "abc" , "qty" : 1}
> t.update({sku:"abc",qty:{$gt:0}}, { $inc : { qty : -1 } } ) ;
> db.$cmd.findOne({getlasterror:1})
{"err" : , "updatedExisting" : true , "n" : 1 , "ok" : 1} // it has worked
> t.update({sku:"abcz",qty:{$gt:0}}, { $inc : { qty : -1 } } ) ;
>db.$cmd.findOne({getlasterror:1})
{"err" : , "updatedExisting" : false , "n" : 0 , "ok" : 1} // did not work
Atomic Operations: multiple
items
db.products.update(
{cat: “boots”, $atomic: 1},
{$inc: {price: 10.0}},
false, //no upsert
true //update multiple
);
Replica set (1)
• Automatic failover
• Automatic recovery of servers that were
offline
• Distribution over more than one
Datacenter
• Automatic nomination of a new Master
Server in case of a failure
• Up to 7 server in one replica set
ReplicaSet
RECOVERING
Replica set (2)
PRIMARY
DOWN
PRIMARY
Mongo Sharding
• Partitioning data across multiple physical servers to
provide application scale-out
• Can distribute databases, collections or objects in a
collection
• Choose how you partition data (shardkey)
• Balancing, migrations, management all automatic
• Range based
• Can convert from single master to sharded system with
0 downtime
• Often works in conjunction with object replication
(failover)
Sharding-Cluster
Map Reduce
http://www.joelonsoftware.com/items/2006/08/01.html
• It is a two step calculation where one
step is used to simplify the data, and the
second step is used to summarize the
data
Map Reduce Sample
Map Reduce using LINQ
https://github.com/craiggwilson/fluent-mongo/wiki/Map-Reduce
• LINQ is by far an easier way to compose map-reduce functions.
// Compose a map reduce to get the sum everyone's ages.
var sum = collection.AsQueryable().Sum(x => x.Age);
// Compose a map reduce to get the age range of everyone
grouped by the first letter of their last name.
var ageRanges =
from p in collection.AsQueryable()
group p by p.LastName[0] into g
select new
{
FirstLetter = g.Key,
AverageAge = g.Average(x => x.Age),
MinAge = g.Min(x => x.Age),
MaxAge = g.Max(x => x.Age)
};
Store large Files: GridFS
• The database supports native storage of
binary data within BSON objects (limited in
size 4 – 16 MB).
• GridFS is a specification for storing large
files in MongoDB
• Comparable to Amazon S3 online storage
service when using it in combination with
replication and sharding
Performance
On MySql, SourceForge was reaching its limits of
performance at its current user load. Using some of
the easy scale-out options in MongoDB, they fully
replaced MySQL and found MongoDB could handle
the current user load easily. In fact, after some
testing, they found their site can now handle 100
times the number of users it currently supports.
It means you can charge a lot less per user of
your application and get the same revenue. Think
about it.
Performance
http://www.michaelckennedy.net/blog/2010/04/29/MongoDBVsSQLServer2008PerformanceShowdown.aspx
• It’s the inserts where the differences are most
obvious between MongoDB and SQL Server
(about 30x-50x faster than SQL Server)
Administration: MongoVUE
(Windows)
Administration: Monitoring
• MongoDB
Monitoring Service
NOSQL USE CASES
Use Cases: Well suited
• Archiving and event logging
• Document and Content Management Systems
• E-Commerce
• Gaming. High performance small read/writes,
geospatial indexes
• High volume problems
• Mobile. Specifically, the server-side
infrastructure of mobile systems
• Projects using iterative/agile development
methodologies
• Real-time stats/analytics
Use Cases: Less Well Suited
• Systems with a heavy emphasis on
complex transactions such as banking
systems and accounting (multi-object
transactions)
• Traditional Non-Realtime Data
Warehousing
• Problems requiring SQL
Questions?
roger.rudin@bbv.ch

Contenu connexe

Similaire à Einführung in MongoDB

NoSQL and Spatial Database Capabilities using PostgreSQL
NoSQL and Spatial Database Capabilities using PostgreSQLNoSQL and Spatial Database Capabilities using PostgreSQL
NoSQL and Spatial Database Capabilities using PostgreSQLEDB
 
Introduction to MongoDB and Workshop
Introduction to MongoDB and WorkshopIntroduction to MongoDB and Workshop
Introduction to MongoDB and WorkshopAhmedabadJavaMeetup
 
MongoDB - A next-generation database that lets you create applications never ...
MongoDB - A next-generation database that lets you create applications never ...MongoDB - A next-generation database that lets you create applications never ...
MongoDB - A next-generation database that lets you create applications never ...Ram Murat Sharma
 
Mongodb in-anger-boston-rb-2011
Mongodb in-anger-boston-rb-2011Mongodb in-anger-boston-rb-2011
Mongodb in-anger-boston-rb-2011bostonrb
 
Change RelationalDB to GraphDB with OrientDB
Change RelationalDB to GraphDB with OrientDBChange RelationalDB to GraphDB with OrientDB
Change RelationalDB to GraphDB with OrientDBApaichon Punopas
 
Mongo Bb - NoSQL tutorial
Mongo Bb - NoSQL tutorialMongo Bb - NoSQL tutorial
Mongo Bb - NoSQL tutorialMohan Rathour
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBJustin Smestad
 
Webinar: What's new in the .NET Driver
Webinar: What's new in the .NET DriverWebinar: What's new in the .NET Driver
Webinar: What's new in the .NET DriverMongoDB
 
Azure cosmos db, Azure no-SQL database,
Azure cosmos db, Azure no-SQL database, Azure cosmos db, Azure no-SQL database,
Azure cosmos db, Azure no-SQL database, BRIJESH KUMAR
 
Benjamin Guinebertière - Microsoft Azure: Document DB and other noSQL databas...
Benjamin Guinebertière - Microsoft Azure: Document DB and other noSQL databas...Benjamin Guinebertière - Microsoft Azure: Document DB and other noSQL databas...
Benjamin Guinebertière - Microsoft Azure: Document DB and other noSQL databas...NoSQLmatters
 
AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)Paul Chao
 
MongoDB NoSQL database a deep dive -MyWhitePaper
MongoDB  NoSQL database a deep dive -MyWhitePaperMongoDB  NoSQL database a deep dive -MyWhitePaper
MongoDB NoSQL database a deep dive -MyWhitePaperRajesh Kumar
 
Dev Jumpstart: Build Your First App with MongoDB
Dev Jumpstart: Build Your First App with MongoDBDev Jumpstart: Build Your First App with MongoDB
Dev Jumpstart: Build Your First App with MongoDBMongoDB
 

Similaire à Einführung in MongoDB (20)

NoSQL and Spatial Database Capabilities using PostgreSQL
NoSQL and Spatial Database Capabilities using PostgreSQLNoSQL and Spatial Database Capabilities using PostgreSQL
NoSQL and Spatial Database Capabilities using PostgreSQL
 
Introduction to MongoDB and Workshop
Introduction to MongoDB and WorkshopIntroduction to MongoDB and Workshop
Introduction to MongoDB and Workshop
 
MongoDB - A next-generation database that lets you create applications never ...
MongoDB - A next-generation database that lets you create applications never ...MongoDB - A next-generation database that lets you create applications never ...
MongoDB - A next-generation database that lets you create applications never ...
 
Mongodb in-anger-boston-rb-2011
Mongodb in-anger-boston-rb-2011Mongodb in-anger-boston-rb-2011
Mongodb in-anger-boston-rb-2011
 
Change RelationalDB to GraphDB with OrientDB
Change RelationalDB to GraphDB with OrientDBChange RelationalDB to GraphDB with OrientDB
Change RelationalDB to GraphDB with OrientDB
 
Mongo Bb - NoSQL tutorial
Mongo Bb - NoSQL tutorialMongo Bb - NoSQL tutorial
Mongo Bb - NoSQL tutorial
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Webinar: What's new in the .NET Driver
Webinar: What's new in the .NET DriverWebinar: What's new in the .NET Driver
Webinar: What's new in the .NET Driver
 
Couchbas for dummies
Couchbas for dummiesCouchbas for dummies
Couchbas for dummies
 
Scala+data
Scala+dataScala+data
Scala+data
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
מיכאל
מיכאלמיכאל
מיכאל
 
Azure cosmos db, Azure no-SQL database,
Azure cosmos db, Azure no-SQL database, Azure cosmos db, Azure no-SQL database,
Azure cosmos db, Azure no-SQL database,
 
Benjamin Guinebertière - Microsoft Azure: Document DB and other noSQL databas...
Benjamin Guinebertière - Microsoft Azure: Document DB and other noSQL databas...Benjamin Guinebertière - Microsoft Azure: Document DB and other noSQL databas...
Benjamin Guinebertière - Microsoft Azure: Document DB and other noSQL databas...
 
AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)
 
Latinoware
LatinowareLatinoware
Latinoware
 
No sql Database
No sql DatabaseNo sql Database
No sql Database
 
MongoDB NoSQL database a deep dive -MyWhitePaper
MongoDB  NoSQL database a deep dive -MyWhitePaperMongoDB  NoSQL database a deep dive -MyWhitePaper
MongoDB NoSQL database a deep dive -MyWhitePaper
 
Dev Jumpstart: Build Your First App with MongoDB
Dev Jumpstart: Build Your First App with MongoDBDev Jumpstart: Build Your First App with MongoDB
Dev Jumpstart: Build Your First App with MongoDB
 
Nosql seminar
Nosql seminarNosql seminar
Nosql seminar
 

Plus de NETUserGroupBern

Large Language Models, Data & APIs - Integrating Generative AI Power into you...
Large Language Models, Data & APIs - Integrating Generative AI Power into you...Large Language Models, Data & APIs - Integrating Generative AI Power into you...
Large Language Models, Data & APIs - Integrating Generative AI Power into you...NETUserGroupBern
 
Securing .NET Core, ASP.NET Core applications
Securing .NET Core, ASP.NET Core applicationsSecuring .NET Core, ASP.NET Core applications
Securing .NET Core, ASP.NET Core applicationsNETUserGroupBern
 
Application Security in ASP.NET Core
Application Security in ASP.NET CoreApplication Security in ASP.NET Core
Application Security in ASP.NET CoreNETUserGroupBern
 
Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerNETUserGroupBern
 
What Doctors Can Teach Us on Continuous Learning
What Doctors Can Teach Us on Continuous LearningWhat Doctors Can Teach Us on Continuous Learning
What Doctors Can Teach Us on Continuous LearningNETUserGroupBern
 
Entity Framework Core - Der Umstieg auf Core
Entity Framework Core - Der Umstieg auf CoreEntity Framework Core - Der Umstieg auf Core
Entity Framework Core - Der Umstieg auf CoreNETUserGroupBern
 
Weiches Zeugs für harte Jungs und Mädels
Weiches Zeugs für harte Jungs und MädelsWeiches Zeugs für harte Jungs und Mädels
Weiches Zeugs für harte Jungs und MädelsNETUserGroupBern
 
Änderungen im Cardinality Estimator SQL Server 2014
Änderungen im Cardinality Estimator SQL Server 2014Änderungen im Cardinality Estimator SQL Server 2014
Änderungen im Cardinality Estimator SQL Server 2014NETUserGroupBern
 
Refactoring: Mythen & Fakten
Refactoring: Mythen & FaktenRefactoring: Mythen & Fakten
Refactoring: Mythen & FaktenNETUserGroupBern
 
Pragmatische Anforderungen
Pragmatische AnforderungenPragmatische Anforderungen
Pragmatische AnforderungenNETUserGroupBern
 
What the hell is PowerShell?
What the hell is PowerShell?What the hell is PowerShell?
What the hell is PowerShell?NETUserGroupBern
 
BDD mit Machine.Specifications (MSpec)
BDD mit Machine.Specifications (MSpec)BDD mit Machine.Specifications (MSpec)
BDD mit Machine.Specifications (MSpec)NETUserGroupBern
 
.NETworking Workshop Design Thinking
.NETworking Workshop Design Thinking.NETworking Workshop Design Thinking
.NETworking Workshop Design ThinkingNETUserGroupBern
 

Plus de NETUserGroupBern (20)

Large Language Models, Data & APIs - Integrating Generative AI Power into you...
Large Language Models, Data & APIs - Integrating Generative AI Power into you...Large Language Models, Data & APIs - Integrating Generative AI Power into you...
Large Language Models, Data & APIs - Integrating Generative AI Power into you...
 
AAD und .NET
AAD und .NETAAD und .NET
AAD und .NET
 
SHIFT LEFT WITH DEVSECOPS
SHIFT LEFT WITH DEVSECOPSSHIFT LEFT WITH DEVSECOPS
SHIFT LEFT WITH DEVSECOPS
 
Securing .NET Core, ASP.NET Core applications
Securing .NET Core, ASP.NET Core applicationsSecuring .NET Core, ASP.NET Core applications
Securing .NET Core, ASP.NET Core applications
 
Application Security in ASP.NET Core
Application Security in ASP.NET CoreApplication Security in ASP.NET Core
Application Security in ASP.NET Core
 
Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET Entwickler
 
Einführung in RavenDB
Einführung in RavenDBEinführung in RavenDB
Einführung in RavenDB
 
What Doctors Can Teach Us on Continuous Learning
What Doctors Can Teach Us on Continuous LearningWhat Doctors Can Teach Us on Continuous Learning
What Doctors Can Teach Us on Continuous Learning
 
Entity Framework Core - Der Umstieg auf Core
Entity Framework Core - Der Umstieg auf CoreEntity Framework Core - Der Umstieg auf Core
Entity Framework Core - Der Umstieg auf Core
 
Weiches Zeugs für harte Jungs und Mädels
Weiches Zeugs für harte Jungs und MädelsWeiches Zeugs für harte Jungs und Mädels
Weiches Zeugs für harte Jungs und Mädels
 
Änderungen im Cardinality Estimator SQL Server 2014
Änderungen im Cardinality Estimator SQL Server 2014Änderungen im Cardinality Estimator SQL Server 2014
Änderungen im Cardinality Estimator SQL Server 2014
 
Rest Fundamentals
Rest FundamentalsRest Fundamentals
Rest Fundamentals
 
Refactoring: Mythen & Fakten
Refactoring: Mythen & FaktenRefactoring: Mythen & Fakten
Refactoring: Mythen & Fakten
 
AngularJs
AngularJsAngularJs
AngularJs
 
Pragmatische Anforderungen
Pragmatische AnforderungenPragmatische Anforderungen
Pragmatische Anforderungen
 
What the hell is PowerShell?
What the hell is PowerShell?What the hell is PowerShell?
What the hell is PowerShell?
 
Know your warm up
Know your warm upKnow your warm up
Know your warm up
 
BDD mit Machine.Specifications (MSpec)
BDD mit Machine.Specifications (MSpec)BDD mit Machine.Specifications (MSpec)
BDD mit Machine.Specifications (MSpec)
 
Versionskontrolle mit Git
Versionskontrolle mit GitVersionskontrolle mit Git
Versionskontrolle mit Git
 
.NETworking Workshop Design Thinking
.NETworking Workshop Design Thinking.NETworking Workshop Design Thinking
.NETworking Workshop Design Thinking
 

Dernier

%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfonteinmasabamasaba
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...masabamasaba
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...masabamasaba
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...masabamasaba
 
tonesoftg
tonesoftgtonesoftg
tonesoftglanshi9
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyviewmasabamasaba
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Hararemasabamasaba
 

Dernier (20)

%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 

Einführung in MongoDB

  • 1. .NET User Group Bern Roger Rudin bbv Software Services AG roger.rudin@bbv.ch
  • 2. Agenda – What is NoSQL – Understanding the Motivation behind NoSQL – MongoDB: A Document Oriented Database – NoSQL Use Cases
  • 3. What is NoSQL? NoSQL = Not only SQL
  • 4. NoSQL Definition http://nosql-database.org/ NoSQL DEFINITION: Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontal scalable. The original intention has been modern web-scale databases. The movement began early 2009 and is growing rapidly. Often more characteristics apply as: schema-free, easy replication support, simple API, eventually consistent /BASE (not ACID), a huge data amount, and more. So the misleading term "nosql" (the community now translates it mostly with "not only sql") should be seen as an alias to something like the definition above.
  • 5. Who Uses NoSQL? • Twitter uses DBFlock/MySQL and Cassandra • Cassandra is an open source project from Facebook • Digg, Reddit use Cassandra • bit.ly, foursquare, sourceforge, and New York Times use MongoDB • Adobe, Alibaba, Ebay, use Hadoop
  • 7. Why SQL sucks.. • O/R mapping (also known as Impedance Mismatch) • Data-Model changes are hard and expensive • SQL database are designed for high throughput, not low latency • SQL Databases do no scale out well • Microsoft, Oracle, and IBM charge big bucks for databases – And then you need to hire a database admin • Take it from the context of Google, Twitter, Facebook and Amazon. – Your databases are among the biggest in the world and nobody pays you for that feature – Wasting profit!!!
  • 8. What has NoSQL done? • Implemented the most common use cases as a piece of software • Designed for scalability and performance
  • 9. Visual Guide To NoSQL http://blog.nahurst.com/visual-guide-to-nosql-systems
  • 10. NoSQL Data Models • Key-Value • Document-Oriented • Column Oriented/Tabular
  • 12. NoSQL Data Model: Document Oriented • Data is stored as “documents” • We are not talking about Word documents • Comparable to Aggregates in DDD • It means mostly schema free structured data • Can be queried • Is easily mapped to OO systems (Domain Model, DDD) • No join need to implement via programming
  • 13. Network Communications • REST/JSON • TCP/BSON (ClientDriver) BSON [bee · sahn], short for Binary JSON, is a binary-en- coded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays within other documents and arrays. BSON also contains extensions that allow representation of data types that are not part of the JSON spec. For example, BSON has a Date type and a BinData type.
  • 14. Client Drivers (Apache License) • MongoDB currently has client support for the following programming languages: • C • C++ • Erlang • Haskell • Java • Javascript • .NET (C# F#, PowerShell, etc) • Perl • PHP • Python • Ruby • Scala
  • 15. Collections vs. Capped Collection (Table in SQL) • Collections • blog.posts • blog.comments • forum.users • etc. • Capped collections (ring buffer) • Logging • Caching • Archiving db.createCollection("log", {capped: true, size: <bytes>, max: <docs>});
  • 16. Indexes • Every field in the document can be indexed • Simple Indexes: db.cities.ensureIndex({city: 1}); • Compound indexes: db.cities.ensureIndex({city: 1, zip: 1}); • Unique indexes: db.cities.ensureIndex({city: 1, zip: 1}, {unique: true}); • Sort order: 1 = descending, -1 = ascending
  • 17.
  • 18. Relations • ObjectId db.users.insert( {name: "Umbert", car_id: ObjectId("<GUID>")}); • DBRef db.users.insert( {name: "Umbert", car: new DBRef("cars“, ObjectId("<GUID>")}); db.users.findOne( {name: "Umbert"}).car.fetch().name;
  • 20. Queries (Regular Expressions) {field: /regular.*expression/i} // get all cities that start with “atl” and end on “a” (e.g. atlanta) db.cities.count({city: /atl.*a/i});
  • 21. Queries (2) : LINQ https://github.com/craiggwilson/fluent-mongo Equals x => x.Age == 21 will translate to {"Age": 21} Greater Than, $gt: x => x.Age > 18 will translate to {"Age": {$gt: 18}} Greater Than Or Equal, $gte: x => x.Age >= 18 will translate to {"Age": {$gte: 18}} Less Than, $lt: x => x.Age < 18 will translate to {"Age": {$lt: 18}} Less Than Or Equal, $lte: x => x.Age <= 18 will translate to {"Age": {$lte: 18}} Not Equal, $ne: x => x.Age != 18 will translate to {"Age": {$ne: 18}}
  • 22. Atomic Operations (Optimistic Locking) • Update if current: • Fetch the object. • Modify the object locally. • Send an update request that says "update the object to this new value if it still matches its old value".
  • 23. Atomic Operations: Sample > t=db.inventory > s = t.findOne({sku:'abc'}) {"_id" : "49df4d3c9664d32c73ea865a" , "sku" : "abc" , "qty" : 1} > t.update({sku:"abc",qty:{$gt:0}}, { $inc : { qty : -1 } } ) ; > db.$cmd.findOne({getlasterror:1}) {"err" : , "updatedExisting" : true , "n" : 1 , "ok" : 1} // it has worked > t.update({sku:"abcz",qty:{$gt:0}}, { $inc : { qty : -1 } } ) ; >db.$cmd.findOne({getlasterror:1}) {"err" : , "updatedExisting" : false , "n" : 0 , "ok" : 1} // did not work
  • 24. Atomic Operations: multiple items db.products.update( {cat: “boots”, $atomic: 1}, {$inc: {price: 10.0}}, false, //no upsert true //update multiple );
  • 25. Replica set (1) • Automatic failover • Automatic recovery of servers that were offline • Distribution over more than one Datacenter • Automatic nomination of a new Master Server in case of a failure • Up to 7 server in one replica set
  • 27. Mongo Sharding • Partitioning data across multiple physical servers to provide application scale-out • Can distribute databases, collections or objects in a collection • Choose how you partition data (shardkey) • Balancing, migrations, management all automatic • Range based • Can convert from single master to sharded system with 0 downtime • Often works in conjunction with object replication (failover)
  • 29. Map Reduce http://www.joelonsoftware.com/items/2006/08/01.html • It is a two step calculation where one step is used to simplify the data, and the second step is used to summarize the data
  • 31. Map Reduce using LINQ https://github.com/craiggwilson/fluent-mongo/wiki/Map-Reduce • LINQ is by far an easier way to compose map-reduce functions. // Compose a map reduce to get the sum everyone's ages. var sum = collection.AsQueryable().Sum(x => x.Age); // Compose a map reduce to get the age range of everyone grouped by the first letter of their last name. var ageRanges = from p in collection.AsQueryable() group p by p.LastName[0] into g select new { FirstLetter = g.Key, AverageAge = g.Average(x => x.Age), MinAge = g.Min(x => x.Age), MaxAge = g.Max(x => x.Age) };
  • 32. Store large Files: GridFS • The database supports native storage of binary data within BSON objects (limited in size 4 – 16 MB). • GridFS is a specification for storing large files in MongoDB • Comparable to Amazon S3 online storage service when using it in combination with replication and sharding
  • 33. Performance On MySql, SourceForge was reaching its limits of performance at its current user load. Using some of the easy scale-out options in MongoDB, they fully replaced MySQL and found MongoDB could handle the current user load easily. In fact, after some testing, they found their site can now handle 100 times the number of users it currently supports. It means you can charge a lot less per user of your application and get the same revenue. Think about it.
  • 34. Performance http://www.michaelckennedy.net/blog/2010/04/29/MongoDBVsSQLServer2008PerformanceShowdown.aspx • It’s the inserts where the differences are most obvious between MongoDB and SQL Server (about 30x-50x faster than SQL Server)
  • 38. Use Cases: Well suited • Archiving and event logging • Document and Content Management Systems • E-Commerce • Gaming. High performance small read/writes, geospatial indexes • High volume problems • Mobile. Specifically, the server-side infrastructure of mobile systems • Projects using iterative/agile development methodologies • Real-time stats/analytics
  • 39. Use Cases: Less Well Suited • Systems with a heavy emphasis on complex transactions such as banking systems and accounting (multi-object transactions) • Traditional Non-Realtime Data Warehousing • Problems requiring SQL

Notes de l'éditeur

  1. We are entering an age where data is live, hardware cheap and we need a new programming paradigm to access and process the data
  2. The new theory is based on the idea that RAM is the storage, Harddisk a backup, and you keep ten’s, hundred’s, if not thousand’s of servers in a LAN In the end results in blazing fast access times and incredible up times
  3. i: case insensitive m: multiline x: extended mode
  4. No upsert.. Soll das dokument erzeugt werden, wenn es nicht gefunden wurde.
  5. Shards meist aus replica sets bestehend Config servern, die die Metadaten des Clusters verwalten Mongos-Prozessen, die als router dienen
  6. use techday db.things.insert( { _id: 1, tags: ['dog', 'cat'] } ); db.things.insert( { _id: 2, tags: ['cat'] } ); db.things.insert( { _id: 3, tags: ['mouse', 'dog', 'cat'] } ); db.things.insert( { _id: 4, tags: [] } ); // map function m = function(){ this.tags.forEach( function(z){ emit(z, {count: 1} ); } ); }; // reduce function r = function(key, values){ var total = 0; for (var i = 0; i < values.length; i++) total += values[i].count; return {count: total}; }; res = db.things.mapReduce(m, r, {out: {inline: 1}}); res.find() res.drop()
  7. Wie amazon s3 für arme
  8. Mit MySQL hatte Sourceforge mit dem aktuellen user load die limite für die geforderte Performance erreicht. Dann haben sie MySQL mit MongoDB erstetzt und haben mit der scale out option den gleichen workload locker handlen können. Nach einigen Tests haben sie dann sogar herausgefunden, das sie jetzt 100 Mal die Menge der Benutzer handeln können. Das heisst, sie haben weniger kosten pro benutzer der applikation bei gleichem Umsatz!
  9. Show import from SQL Server
  10. Systeme mit hoher gewichtung von komplexen transactionen