62
Anna Bulenkova @povergo Software Developer @ JetBrains

How to look like a model? MongoDB for Rails apps

Embed Size (px)

DESCRIPTION

@muc_rubyshift 11/09/2013

Citation preview

Page 1: How to look like a model? MongoDB for Rails apps

Anna Bulenkova@povergo

Software Developer @

JetBrains

Page 2: How to look like a model? MongoDB for Rails apps

MongoDB

Page 3: How to look like a model? MongoDB for Rails apps
Page 4: How to look like a model? MongoDB for Rails apps

How to look likea model?

Page 5: How to look like a model? MongoDB for Rails apps

A long time ago in a galaxy far, far away

Page 6: How to look like a model? MongoDB for Rails apps
Page 7: How to look like a model? MongoDB for Rails apps
Page 8: How to look like a model? MongoDB for Rails apps

Wow!It’s schema-free!

Page 9: How to look like a model? MongoDB for Rails apps

Say bye-bye to

Page 10: How to look like a model? MongoDB for Rails apps

• Normalization

Say bye-bye to

Page 11: How to look like a model? MongoDB for Rails apps

• Normalization

• Joins

Say bye-bye to

Page 12: How to look like a model? MongoDB for Rails apps

• Normalization

• Joins

• Design issues

Say bye-bye to

Page 13: How to look like a model? MongoDB for Rails apps

• Normalization

• Joins

• Design issues

• Transactions

Say bye-bye to

Page 14: How to look like a model? MongoDB for Rails apps

Something wrong?

Page 15: How to look like a model? MongoDB for Rails apps

Document =

{ key -> value }

Page 16: How to look like a model? MongoDB for Rails apps

Document-oriented!=

schema-free

Page 17: How to look like a model? MongoDB for Rails apps
Page 18: How to look like a model? MongoDB for Rails apps

Collection

Page 19: How to look like a model? MongoDB for Rails apps

BSON

Page 20: How to look like a model? MongoDB for Rails apps

{"hello": "world"}

"\x16\x00\x00\x00\x02hello\x00  \x06\x00\x00\x00world\x00\x00"

Page 21: How to look like a model? MongoDB for Rails apps

Outside MongoDB world?

Page 22: How to look like a model? MongoDB for Rails apps

MongoDB

•Win/OS X/*nix

•JavaScript

Page 23: How to look like a model? MongoDB for Rails apps

user = { name : "Foo" }db.testData.insert(user)

db.testData.find()

Page 24: How to look like a model? MongoDB for Rails apps

{ "_id" : ObjectId("51a7dc7b2cacf40b79990bf7"),

"name" : "Foo" }

Page 25: How to look like a model? MongoDB for Rails apps
Page 26: How to look like a model? MongoDB for Rails apps

•API

•Aggregation

•Indexes

•Replication

•Sharding

Page 27: How to look like a model? MongoDB for Rails apps

A little bit ofActiveRecord?

Page 28: How to look like a model? MongoDB for Rails apps

Mongoid

Page 29: How to look like a model? MongoDB for Rails apps

$ gem install mongoid

Page 30: How to look like a model? MongoDB for Rails apps

Configuration

Page 31: How to look like a model? MongoDB for Rails apps

Model

Page 32: How to look like a model? MongoDB for Rails apps

Associations

Page 33: How to look like a model? MongoDB for Rails apps

Embedded 1-1

Page 34: How to look like a model? MongoDB for Rails apps

Embedded 1-N

Page 35: How to look like a model? MongoDB for Rails apps

I want my relationship back!

Page 36: How to look like a model? MongoDB for Rails apps

Referenced 1-1

Page 37: How to look like a model? MongoDB for Rails apps

Referenced 1-N

Page 38: How to look like a model? MongoDB for Rails apps

Referenced N-N

Page 39: How to look like a model? MongoDB for Rails apps

# The band document.{

"_id" : ObjectId("4d3ed089fb60ab534684b7e9"),"tag_ids" : [ ObjectId("4d3ed089fb60ab534684b7f2") ]

}

# The tag document.{

"_id" : ObjectId("4d3ed089fb60ab534684b7f2"),"band_ids" : [ ObjectId("4d3ed089fb60ab534684b7e9") ]

}

Page 40: How to look like a model? MongoDB for Rails apps

$gem install mongoid_rails_migrations

Page 41: How to look like a model? MongoDB for Rails apps
Page 42: How to look like a model? MongoDB for Rails apps

It’s magical...

Page 43: How to look like a model? MongoDB for Rails apps

What a twist!

Page 44: How to look like a model? MongoDB for Rails apps

Where the hell are

transactions?

Page 45: How to look like a model? MongoDB for Rails apps

MongoDB does not have support for traditional locking or complex transactions with rollback. MongoDB aims to be lightweight, fast, and predictable in its performance. This is similar to the MySQL MyISAM autocommit model. By keeping transaction support extremely simple, MongoDB can provide greater performance especially for partitioned or replicated systems with a number of database server processes.

Page 46: How to look like a model? MongoDB for Rails apps

Document size limit

16MB

Page 47: How to look like a model? MongoDB for Rails apps

Global write lock

2.0pre

Page 48: How to look like a model? MongoDB for Rails apps

DB level lock2.2

Page 49: How to look like a model? MongoDB for Rails apps

No joins->

Many queries

Page 50: How to look like a model? MongoDB for Rails apps

Too many queries?

->Redesign

Page 51: How to look like a model? MongoDB for Rails apps

Indeed schemaless?

Page 52: How to look like a model? MongoDB for Rails apps

Journaling100ms

Page 53: How to look like a model? MongoDB for Rails apps

Data loss after

replication

Page 54: How to look like a model? MongoDB for Rails apps

Sharding delay

Page 55: How to look like a model? MongoDB for Rails apps

Unencrypted traffic

Page 56: How to look like a model? MongoDB for Rails apps

Side effects may include...

Problems working on 32-bit, large data storage problems, write falures, no error value return, sophicticated schema design, limited update operation, case sensitive queries, type sensitive fields, write

locks, replica sets restrictions, unexpected data loss, sharding size

limitations, no transactions, nausea, going back to RDBMS

Page 57: How to look like a model? MongoDB for Rails apps

It’s supported in

RubyMine

Page 58: How to look like a model? MongoDB for Rails apps
Page 59: How to look like a model? MongoDB for Rails apps
Page 60: How to look like a model? MongoDB for Rails apps
Page 61: How to look like a model? MongoDB for Rails apps

Any questions?

Page 62: How to look like a model? MongoDB for Rails apps

Thank you!