![Page 1: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/1.jpg)
Anna Bulenkova@povergo
Software Developer @
JetBrains
![Page 2: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/2.jpg)
MongoDB
![Page 3: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/3.jpg)
![Page 4: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/4.jpg)
How to look likea model?
![Page 5: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/5.jpg)
A long time ago in a galaxy far, far away
![Page 6: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/6.jpg)
![Page 7: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/7.jpg)
![Page 8: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/8.jpg)
Wow!It’s schema-free!
![Page 9: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/9.jpg)
Say bye-bye to
![Page 10: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/10.jpg)
• Normalization
Say bye-bye to
![Page 11: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/11.jpg)
• Normalization
• Joins
Say bye-bye to
![Page 12: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/12.jpg)
• Normalization
• Joins
• Design issues
Say bye-bye to
![Page 13: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/13.jpg)
• Normalization
• Joins
• Design issues
• Transactions
Say bye-bye to
![Page 14: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/14.jpg)
Something wrong?
![Page 15: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/15.jpg)
Document =
{ key -> value }
![Page 16: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/16.jpg)
Document-oriented!=
schema-free
![Page 17: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/17.jpg)
![Page 18: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/18.jpg)
Collection
![Page 19: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/19.jpg)
BSON
![Page 20: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/20.jpg)
{"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](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/21.jpg)
Outside MongoDB world?
![Page 22: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/22.jpg)
MongoDB
•Win/OS X/*nix
•JavaScript
![Page 23: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/23.jpg)
user = { name : "Foo" }db.testData.insert(user)
db.testData.find()
![Page 24: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/24.jpg)
{ "_id" : ObjectId("51a7dc7b2cacf40b79990bf7"),
"name" : "Foo" }
![Page 25: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/25.jpg)
![Page 26: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/26.jpg)
•API
•Aggregation
•Indexes
•Replication
•Sharding
![Page 27: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/27.jpg)
A little bit ofActiveRecord?
![Page 28: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/28.jpg)
Mongoid
![Page 29: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/29.jpg)
$ gem install mongoid
![Page 30: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/30.jpg)
Configuration
![Page 31: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/31.jpg)
Model
![Page 32: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/32.jpg)
Associations
![Page 33: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/33.jpg)
Embedded 1-1
![Page 34: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/34.jpg)
Embedded 1-N
![Page 35: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/35.jpg)
I want my relationship back!
![Page 36: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/36.jpg)
Referenced 1-1
![Page 37: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/37.jpg)
Referenced 1-N
![Page 38: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/38.jpg)
Referenced N-N
![Page 39: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/39.jpg)
# 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](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/40.jpg)
$gem install mongoid_rails_migrations
![Page 41: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/41.jpg)
![Page 42: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/42.jpg)
It’s magical...
![Page 43: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/43.jpg)
What a twist!
![Page 44: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/44.jpg)
Where the hell are
transactions?
![Page 45: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/45.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/46.jpg)
Document size limit
16MB
![Page 47: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/47.jpg)
Global write lock
2.0pre
![Page 48: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/48.jpg)
DB level lock2.2
![Page 49: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/49.jpg)
No joins->
Many queries
![Page 50: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/50.jpg)
Too many queries?
->Redesign
![Page 51: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/51.jpg)
Indeed schemaless?
![Page 52: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/52.jpg)
Journaling100ms
![Page 53: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/53.jpg)
Data loss after
replication
![Page 54: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/54.jpg)
Sharding delay
![Page 55: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/55.jpg)
Unencrypted traffic
![Page 56: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/56.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/57.jpg)
It’s supported in
RubyMine
![Page 58: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/58.jpg)
![Page 59: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/59.jpg)
![Page 60: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/60.jpg)
![Page 61: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/61.jpg)
Any questions?
![Page 62: How to look like a model? MongoDB for Rails apps](https://reader033.vdocument.in/reader033/viewer/2022061110/5453d0cfaf795959498b6179/html5/thumbnails/62.jpg)
Thank you!