mongodb

18
Istanbul Hackers Geekly Weekly Mongo DB @hserdarb

Upload: serdar-buyuktemiz

Post on 10-May-2015

593 views

Category:

Technology


0 download

DESCRIPTION

a presentation made at istanbul hackers geekly weekly

TRANSCRIPT

Page 1: MongoDB

Istanbul HackersGeekly Weekly

Mongo DB@hserdarb

Page 2: MongoDB

Why MongoDB?

• Easy to use nosql

• Good for web projects

• Popular

• High performance (No joins and embedding makes reads and writes fast)

• High availability (Replicated servers with automatic master failover)

• Easy scalability (Automatic sharding)

Page 3: MongoDB

What’s MongoDB good for?

• Account and user profiles: can store arrays of addresses with ease

• CMS: the flexible schema of MongoDB is great for heterogeneous collections of content types

• Form data: MongoDB makes it easy to evolve structure of form data over time

• Blogs / user-generated content: can keep data with complex relationships together in one object

• Messaging: vary message meta-data easily per message or message type without needing to maintain separate collections or schemas

• System configuration: just a nice object graph of configuration values, which is very natural in MongoDB

• Log data of any kind: structured log data is the future

• Graphs: just objects and pointers – a perfect fit

• Location based data: MongoDB understands geo-spatial coordinates and natively supports geo-spatial indexing

http://blog.mongolab.com/2012/08/why-is-mongodb-wildly-popular/

Page 4: MongoDB

The Modern Need From Databases

• Easy to use when project is small

• Developing schema less

• When we need scale it must be easy and cheap

• No data loss

• High Availability

Page 5: MongoDB

RDBMS => MongoDB

RDBMS MongoDB

Table, View Collection

Row JSON Document

Index Index

Join Embeded Document

Partition Shard

Partition Key Shard Key

Page 6: MongoDB

What is BSON?

• MongoDB uses BSON as the data storage and network transfer format for "documents".

• Short for Binary JSON

• http://bsonspec.org/

• http://www.mongodb.org/display/DOCS/BSON

Page 7: MongoDB

Working with Entity Objects

• Things can be really easy for you if you follow these rules for yourentities• Has a public no-argument constructor

• Has a public get set property for each value you want to have serialized

Page 8: MongoDB

CRUD

https://github.com/serdarb/IstanbulHackersCodeReviewSample/blob/master/AgileWall.Domain/Repo/BaseRepo.cs

Page 9: MongoDB

Write Concern

• Acknowledged• Write operations that use this write concern will wait for acknowledgement from the primary

server before returning.

• Unacknowledged• Write operations that use this write concern will return as soon as the message is written to

the socket.

• Journaled• Exceptions are raised for network issues, and server errors; the write operation waits for the

server to group commit to the journal file on disk.

• Replica Acknowledged• Exceptions are raised for network issues, and server errors; waits for at least 2 servers for the

write operation.

http://docs.mongodb.org/manual/core/write-concern/http://api.mongodb.org/java/current/com/mongodb/WriteConcern.html

https://github.com/mongodb/mongo-csharp-driver/blob/master/MongoDB.Driver/WriteConcern.cs

Page 10: MongoDB

Journaling

• Process starts with private view

• Private view writes to journal

• Journal updates shared view

• Shared view updates private view

• Shared view flushes data to disk

http://www.kchodorow.com/blog/2012/10/04/how-mongodbs-journaling-works/

Page 11: MongoDB

Index

• BasketItems.CreateIndex(“UserId”);

Page 12: MongoDB

A tip for better indexing

• Run mongodb with notablescan parameter and be sure your your queries are not making full table scans...• You get exceptions if a query needs a table scan, it gives you a chance to fix

your indexes on development time.

Page 13: MongoDB

Map Reduce

Page 14: MongoDB

Transaction

• MongoDB does not support transactions.

• It is good to use relational databases (oracle, sql server) for this purpose

• If you are stuck in a situation that needs transactions with MongoDB you must implement it by your self.• http://docs.mongodb.org/manual/tutorial/perform-two-phase-commits/

• https://github.com/rystsov/mongodb-transaction-example

Page 15: MongoDB

Sharding & ReplicationSharding is for scale out, replication is for high availability

Page 16: MongoDB

Replication

• Copies of your data for data safety

• Asynchronous replication

• Master - Slave model• Not master-master, when your data change

there are times that you only have one master…

• Statement based• For example, insert statement send to the

replica and will run there…

• Driver is replica set aware,

• Connection to replica set mongodb://server1,server2:27017,server2:27018

Page 17: MongoDB

Sharding (partitioning)

• MongoDB does range based partitioning• Name begins with A, B-E, F-H ….

• Shardkey is important!• Bad shard key choice can cause

too many split and merge operations on chunks

mongodmongod

mongod

Rep

licas

et

mongodmongod

mongod

Rep

licas

et

S1 S2

mongosmongod

mongodmongod

Co

nfi

gSe

rver

Client

1

2

3

4

Page 18: MongoDB

Sources

• education.10gen.com• http://openmymind.net/mongodb.pdf• http://www.mongodb.org/display/DOCS/Introduction

• http://www.mongodb.org/display/DOCS/Padding+Factor

• https://github.com/mongodb/mongo

• http://www.codeproject.com/Articles/273145/Using-MongoDB-with-the-Official-Csharp-Driver

• http://stackoverflow.com/questions/4067197/mongodb-and-joins

• http://www.mongodb.org/display/DOCS/Schema+Design#SchemaDesign-EmbeddingandLinking

• http://docs.mongodb.org/manual/applications/database-references/

• http://www.10gen.com/presentations?programming_lang=46

• https://speakerdeck.com/mongodb/whats-new-in-the-net-driver

• http://learnmongo.com/

• http://www.mongovue.com/2010/11/03/yet-another-mongodb-map-reduce-tutorial/

• http://spp42.com/mongodbde-dogru-index-kullanimi-nasil-kontrol-edilir-i/

• http://bjclark.me/2009/08/nosql-if-only-it-was-that-easy/

• http://reactivemongo.org/