SlideShare a Scribd company logo
1 of 52
Download to read offline
Mongoidを語ってみよう
              2012/08/31 @akimatter

13年1月24日木曜日
自己紹介
              秋間武志

              RBCスタッフ

              仕事でmongoidを使って約2年

              株式会社グルーヴノーツ

              @akimatter
              https://github.com/akm
              http://d.hatena.ne.jp/akm/



13年1月24日木曜日
アジェンダ
              NoSQLのおさらい

              MongoDBの概要

              Mongoidの概要

              Mongoid3の変更点

              MongoDB 2.2の新機能

              Mongoidでのモデリング




13年1月24日木曜日
NoSQLのおさらい



13年1月24日木曜日
NoSQLとは
              NoSQLとは、リレーショナルデータベース管理シ
              ステム(RDBMS)以外のデータベース管理システム
              を指し、リレーショナルデータベースの長い歴史
              を打破するものとして、広い意味での関係モデル
              以外に属するデータベースの発展を促進させよう
              とする運動である。

              http://ja.wikipedia.org/wiki/NoSQL より


13年1月24日木曜日
実装
              産業界での有名な実装
              GoogleのBigTable
              アマゾンのAmazon DynamoDB
              オープンソースの実装
              MongoDB
              Apache HBase
              Apache Cassandra


13年1月24日木曜日
分散データベース


              いくつかのNoSQLシステムは分散アーキテクチャ
              を採用している




13年1月24日木曜日
CAP定理
              ブリュワーの定理とも呼ばれ、分散コンピュータ
              システムのマシン間の情報複製に関する定理。
              ウェブサービスを想定して作られた定理。同時に
              以下の3つを満たすことはできないというもの。

              一貫性 (Consistency)

              可用性 (Availability)

              分断耐性 (Partition-tolerance)


13年1月24日木曜日
13年1月24日木曜日
13年1月24日木曜日
Eventually Consistency

              システム内に、一時的にConsistentでない状態が生
              まれても、ある期間の後には、Consistentな状態
              になるような性質を、Eventually Consistencyとい
              う。




13年1月24日木曜日
Eventually Consistency

              この言葉が定義されたことで「Scalableで
              Availableで、かつ、Eventually Consistentなシステ
              ムは可能である。」と言うことが可能になった。

              実際、mongoidにも、consistencyの選択肢
              に:eventual と :strongがある




13年1月24日木曜日
BASE
              CAPの全部を満たさなくてもシステムとして十分

              Basically Available

              Soft-state

              Eventually consistent

              http://qcontokyo.com/tokyo-2009/pdf/
              GeneralSession-Day2-Maruyama.pdf


13年1月24日木曜日
MongoDBの概要



13年1月24日木曜日
特徴
              「MongoDB はドキュメント志向のDBMSです。 MySQLですがJSON型オブ
              ジェクトを伴い、RDBMS表ではなく、データモデルで構成されます。大切
              なことは、MongoDBは、結合やトランザクションをサポートしないという
              ことです。しかし二次的インデックスで、クエリ言語表示、アトミックがド
              キュメントレベルで書き込みを行い一貫した読み込みをするのを特徴としま
              す。

              操作上、MongoDBは、自動範囲ベース自動フェイルオーバーと水平スケー
              リングを内蔵する、マスタースレーブ・レプリケーションを特徴としま
              す。」

        http://jp.docs.mongodb.org/manual/faq/fundamentals/#what-kind-of-database-is-
        mongodb



13年1月24日木曜日
例えばこんな構成も




13年1月24日木曜日
分散アーキテクチャ

              レプリケーション

               マスター/スレイブ

               レプリカセット

              シャーディング




13年1月24日木曜日
JOINなし

              「Mongoでは、リレーショナルデータベースのデ
              ザインでするような"正規化"はそれほど必要ありま
              せん。サーバサイドでの"join"がないからです。」

              http://www.mongodb.org/pages/viewpage.action?
              pageId=7209156




13年1月24日木曜日
埋め込みドキュメント
              ドキュメントに複数のドキュメントを埋め込むこ
              とができる

              db.employees.insert({_id:	
  
              ObjectId("4d85c7039ab0fd70a117d734"),	
  
              name:	
  'Ghanima',	
  family:	
  {mother:	
  
              'Chani',	
  father:	
  'Paul',	
  brother:	
  
              ObjectId("4d85c7039ab0fd70a117d730")}})
              http://www.mongodb.org/pages/viewpage.action?pageId=18907286




13年1月24日木曜日
組み込み vs 参照




              http://www.mongodb.org/pages/viewpage.action?pageId=7209156




13年1月24日木曜日
トランザクションなし

              「MongoDBは ACIDトランザクションを提供しま
              せん。」

              http://jp.docs.mongodb.org/manual/faq/
              fundamentals/#does-mongodb-support-
              transactions




13年1月24日木曜日
アトミックな操作

              「MongoDBは、一つのドキュメント でのアト
              ミックな操作をサポートしています」

              http://www.mongodb.org/pages/viewpage.action?
              pageId=7209573




13年1月24日木曜日
トランザクション


              「トランザクションが満たすべき技術的要件に
              ACID特性がある」

              http://ja.wikipedia.org/wiki/トランザクション




13年1月24日木曜日
ACIDについて比較
                                        RDB       MongoDB

              原子性 atomicity              ○            △

              一貫性 consistency            ○            ○

              独立性 isolation              ○            ○

              永続性 durability             ○            ○

              http://ja.wikipedia.org/wiki/ACID_(コンピュータ科学)



13年1月24日木曜日
consistencyという言葉
              「一貫性のあるサービスでは、操作は完了するか、一切何もしないかの、ど
              ちらかだ。 ギルバートとリンチは、一貫性ではなく原子性(atomic)という
              語を証明の中で使っている。 理論的な文脈では原子性という方が要領を得
              ている。 というのも細かい話をすると、一貫性(Consistent) は データ
              ベーストランザクションの望ましい性質をあらわす ACID の C に使われて
              おり、 これはあるデータが事前に与えられた制約を破った状態で残らない
              ことを意味している。 ところが CAP の C を分散システムでの事前の制約
              とみなし、 同じデータをあらわす複数の値を許さないことにすると、抽象
              化が漏れて紛らわしいことになる。 (それに、もしブリュワーが原子性
              (atomic)という語を使っていたら AAP 定理になる。 こんなのを発音しよ
              うとしたら皆が病人みたいになってしまう。)」


              http://www.hyuki.com/yukiwiki/wiki.cgi?BrewersCapTheorem

13年1月24日木曜日
Mongoidの概要



13年1月24日木曜日
ODM for MongoDB


              Mongoid (pronounced mann-goyd) is an Object-
              Document-Mapper (ODM) for MongoDB written in
              Ruby. It was conceived in August, 2009 during a
              whiskey-induced evening at the infamous Oasis in
              Florida, USA by Durran Jordan.
              http://mongoid.org/en/mongoid/index.html




13年1月24日木曜日
Mongoidの哲学

              The philosophy of Mongoid is to provide a familiar API to
              Ruby developers who have been using Active Record or
              Data Mapper, while leveraging the power of MongoDB's
              schemaless and performant document-based design,
              dynamic queries, and atomic modifier operations.
              MongoIdの哲学は、MongoDBのスキーマレスとパフォー
              マンスのドキュメントベースの設計、動的なクエリ、お
              よびアトミックな更新操作のパワーを活用しながら、
              ActiveRecordやDataMapperを使用しているRubyの開発
              者におなじみのAPIを提供することです。



13年1月24日木曜日
Documents Fields
                                             Array
                                             BigDecimal
                                             Boolean
                                             Date
        class Person                         DateTime
          include Mongoid::Document          Float
          field :first_name, type: String    Hash
          field :middle_name, type: String   Integer
          field :last_name, type: String     Moped::BSON::ObjectId
        end                                  Range
                                             Regexp
                                             String
                                             Symbol
                                             Time
                                             TimeWithZone




13年1月24日木曜日
Persistence Standard
              Model.create, Model.create!,
              Model#save, Model#save!,
              Model#update_attributes,
              Model#update_attributes!,
              Model#update_attribute, Model#upsert,
              Model#touch, Model#delete,
              Model#destroy, Model.delete_all,
              Model.destroy_all

              この辺はActiveRecordと同じ感じ



13年1月24日木曜日
Persistence Atomic

              Model#add_to_set, Model#bit, Model#inc,
              Model#pop, Model#pull, Model#pull_all,
              Model#push, Model#push_all, Model#rename,
              Model#set, Model#unset

              コールバックもバリデーションも呼ばれないから
              要注意




13年1月24日木曜日
relations
                             Mongoid           Mongoid
              ActiveRecord
                             Reference         Embed

               belongs_to    belongs_to      embedded_in


               has_many      has_many        embeds_many


                has_one       has_one        embeds_one

         has_and_belongs_ has_and_belongs_
                                                 N/A
             to_many          to_many


13年1月24日木曜日
IDの振り方
              ActiveRecordでは、RDBサーバのautoincrementの
              カラムをidとして使用する。

              MongoDBでは主キーとなる_idの値はクライアン
              トで生成する必要がある。 Mongoidではドライバ
              のmopedが行う。この値はUUIDを用いる。衝突す
              る可能性はxxxくらい。



13年1月24日木曜日
Mongoid3の変更点



13年1月24日木曜日
構造




13年1月24日木曜日
origin


              One of MongoDB's greatest features is its ability
              to execute dynamic queries, which Origin
              abstracts in a familiar Arel-style DSL that Mongoid
              includes.




13年1月24日木曜日
moped

              Goal of this gem

                Thread-safe

                No more extension (bson_ext)

                Cleanest API

                Better ReplicaSet management



13年1月24日木曜日
moped limitation
              Limitation

                Ruby 1.9 only

                No GridFS support



                The only case where moped is slower than
                bson_ext is the ObjectId generation



13年1月24日木曜日
MongoDB2.2



13年1月24日木曜日
New Features
              Aggregation Framework

              TTL Collections

              Concurrency Improvements

              Improved Data Center Awareness with Tag
              Aware Sharding

              Fully Supported Read Preference Semantics

              http://docs.mongodb.org/manual/release-notes/

13年1月24日木曜日
Mongoidでのモデリング



13年1月24日木曜日
Tengineの例

              TengineはGroovenautsが開発している分散環境
              におけるイベントハンドリングおよびジョブの
              実行制御のためのフレームワーク

              https://github.com/tengine/tengine




13年1月24日木曜日
分散処理でのカウント




13年1月24日木曜日
分散処理でのカウント




13年1月24日木曜日
分散処理でのカウント




13年1月24日木曜日
公式ドキュメントの例


              http://mongoid.org/en/mongoid/docs/
              relations.html




13年1月24日木曜日
モデリングのポイント
              ◦ リレーショナルモデリングは利用可能なデータ構造駆動
              だ。この設計をするにあたって重要なテーマは"自分は
              どの答えを持っているか?"
              ◦ NoSQLデータモデリングはアプリケーション特有のアク
              セスパターン、すなわち、サポートされるクエリの型駆
              動だ。メインテーマは"自分は何を知りたいのか?"

              https://gist.github.com/2396234



13年1月24日木曜日
組み込み vs 参照 再び




              http://www.mongodb.org/pages/viewpage.action?pageId=7209156




13年1月24日木曜日
関連テーブルとか




13年1月24日木曜日
関連テーブルとか




13年1月24日木曜日
参考文献
              12年後のCAP定理: "法則"はどのように変わったか

               http://www.infoq.com/jp/articles/cap-twelve-years-later-how-the-rules-
               have-changed

              MongoDBドキュメント


               http://www.mongodb.org/display/DOCSJP/Home

              Cloudの技術的特徴について 丸山先生


               http://qcontokyo.com/tokyo-2009/pdf/GeneralSession-Day2-
               Maruyama.pdf




13年1月24日木曜日
参考文献

              NoSQLデータモデリング技法

               https://gist.github.com/2396234

              ブリュワーの CAP 定理

               http://www.hyuki.com/yukiwiki/wiki.cgi?BrewersCapTheorem




13年1月24日木曜日

More Related Content

Viewers also liked

わんくま東京#53 LT 「10年後のインターフェイス?とか?」
わんくま東京#53 LT 「10年後のインターフェイス?とか?」わんくま東京#53 LT 「10年後のインターフェイス?とか?」
わんくま東京#53 LT 「10年後のインターフェイス?とか?」Takeshi Kiriya
 
あ・・・ありのまま今起こったことを話すぜ!おれはTextureViewでプロジェクトを開始していたと思ったらいつのまにかSurfaceViewに戻っていた
あ・・・ありのまま今起こったことを話すぜ!おれはTextureViewでプロジェクトを開始していたと思ったらいつのまにかSurfaceViewに戻っていたあ・・・ありのまま今起こったことを話すぜ!おれはTextureViewでプロジェクトを開始していたと思ったらいつのまにかSurfaceViewに戻っていた
あ・・・ありのまま今起こったことを話すぜ!おれはTextureViewでプロジェクトを開始していたと思ったらいつのまにかSurfaceViewに戻っていたYamashita Takeshi
 
なぜApache HBaseを選ぶのか? #cwt2013
なぜApache HBaseを選ぶのか? #cwt2013なぜApache HBaseを選ぶのか? #cwt2013
なぜApache HBaseを選ぶのか? #cwt2013Cloudera Japan
 
Study 20131009
Study 20131009Study 20131009
Study 20131009fujii_t
 
Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Koichi Sakata
 
SQLによるDynamoDBの操作
SQLによるDynamoDBの操作SQLによるDynamoDBの操作
SQLによるDynamoDBの操作Sugawara Genki
 

Viewers also liked (9)

わんくま東京#53 LT 「10年後のインターフェイス?とか?」
わんくま東京#53 LT 「10年後のインターフェイス?とか?」わんくま東京#53 LT 「10年後のインターフェイス?とか?」
わんくま東京#53 LT 「10年後のインターフェイス?とか?」
 
あ・・・ありのまま今起こったことを話すぜ!おれはTextureViewでプロジェクトを開始していたと思ったらいつのまにかSurfaceViewに戻っていた
あ・・・ありのまま今起こったことを話すぜ!おれはTextureViewでプロジェクトを開始していたと思ったらいつのまにかSurfaceViewに戻っていたあ・・・ありのまま今起こったことを話すぜ!おれはTextureViewでプロジェクトを開始していたと思ったらいつのまにかSurfaceViewに戻っていた
あ・・・ありのまま今起こったことを話すぜ!おれはTextureViewでプロジェクトを開始していたと思ったらいつのまにかSurfaceViewに戻っていた
 
なぜApache HBaseを選ぶのか? #cwt2013
なぜApache HBaseを選ぶのか? #cwt2013なぜApache HBaseを選ぶのか? #cwt2013
なぜApache HBaseを選ぶのか? #cwt2013
 
Study 20131009
Study 20131009Study 20131009
Study 20131009
 
CoreOS入門
CoreOS入門CoreOS入門
CoreOS入門
 
Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今
 
SQLによるDynamoDBの操作
SQLによるDynamoDBの操作SQLによるDynamoDBの操作
SQLによるDynamoDBの操作
 
Paxos
PaxosPaxos
Paxos
 
Raft
RaftRaft
Raft
 

Similar to 20120831 mongoid

AmebaのMongoDB活用事例
AmebaのMongoDB活用事例AmebaのMongoDB活用事例
AmebaのMongoDB活用事例Akihiro Kuwano
 
mongoDB: OSC Tokyo2010 spring
mongoDB: OSC Tokyo2010 springmongoDB: OSC Tokyo2010 spring
mongoDB: OSC Tokyo2010 springichikaway
 
mongodbの簡易ストレージ化
mongodbの簡易ストレージ化mongodbの簡易ストレージ化
mongodbの簡易ストレージ化Hidetoshi Mori
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)Akihiro Kuwano
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムRecruit Technologies
 
DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?Hiroaki Kubota
 
Mongo db勉強会
Mongo db勉強会Mongo db勉強会
Mongo db勉強会otmb
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門じゅん なかざ
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBmoai kids
 
NoSQL Bigtable and Azure Table
NoSQL Bigtable and Azure TableNoSQL Bigtable and Azure Table
NoSQL Bigtable and Azure TableTakekazu Omi
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~じゅん なかざ
 
Shinjuku.rb #61 RubyKaigi2018予習
Shinjuku.rb #61 RubyKaigi2018予習Shinjuku.rb #61 RubyKaigi2018予習
Shinjuku.rb #61 RubyKaigi2018予習treby
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternAtsushi Kambara
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Yohei Sasaki
 
IBMが取り組むクラウドのオープンスタンダードとoss @ 20130604
IBMが取り組むクラウドのオープンスタンダードとoss @ 20130604IBMが取り組むクラウドのオープンスタンダードとoss @ 20130604
IBMが取り組むクラウドのオープンスタンダードとoss @ 20130604Shinichiro Arai
 
比べてみよう リレーショナル vs ドキュメント.pptx
比べてみよう リレーショナル vs ドキュメント.pptx比べてみよう リレーショナル vs ドキュメント.pptx
比べてみよう リレーショナル vs ドキュメント.pptxMariMurotani
 

Similar to 20120831 mongoid (20)

AmebaのMongoDB活用事例
AmebaのMongoDB活用事例AmebaのMongoDB活用事例
AmebaのMongoDB活用事例
 
mongoDB: OSC Tokyo2010 spring
mongoDB: OSC Tokyo2010 springmongoDB: OSC Tokyo2010 spring
mongoDB: OSC Tokyo2010 spring
 
mongodbの簡易ストレージ化
mongodbの簡易ストレージ化mongodbの簡易ストレージ化
mongodbの簡易ストレージ化
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
 
Mongodb
MongodbMongodb
Mongodb
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
 
DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?
 
Mongo db勉強会
Mongo db勉強会Mongo db勉強会
Mongo db勉強会
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
MongoDB
MongoDBMongoDB
MongoDB
 
NoSQL Bigtable and Azure Table
NoSQL Bigtable and Azure TableNoSQL Bigtable and Azure Table
NoSQL Bigtable and Azure Table
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~
 
Shinjuku.rb #61 RubyKaigi2018予習
Shinjuku.rb #61 RubyKaigi2018予習Shinjuku.rb #61 RubyKaigi2018予習
Shinjuku.rb #61 RubyKaigi2018予習
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
 
IBMが取り組むクラウドのオープンスタンダードとoss @ 20130604
IBMが取り組むクラウドのオープンスタンダードとoss @ 20130604IBMが取り組むクラウドのオープンスタンダードとoss @ 20130604
IBMが取り組むクラウドのオープンスタンダードとoss @ 20130604
 
比べてみよう リレーショナル vs ドキュメント.pptx
比べてみよう リレーショナル vs ドキュメント.pptx比べてみよう リレーショナル vs ドキュメント.pptx
比べてみよう リレーショナル vs ドキュメント.pptx
 
MongoDB勉強会資料
MongoDB勉強会資料MongoDB勉強会資料
MongoDB勉強会資料
 

More from Takeshi AKIMA

LT at JavaOne2012 JVM language BoF #jt12_b101
LT at JavaOne2012  JVM language BoF #jt12_b101LT at JavaOne2012  JVM language BoF #jt12_b101
LT at JavaOne2012 JVM language BoF #jt12_b101Takeshi AKIMA
 
DSL by JRuby at JavaOne2012 JVM language BoF #jt12_b101
DSL by JRuby at JavaOne2012  JVM language BoF #jt12_b101DSL by JRuby at JavaOne2012  JVM language BoF #jt12_b101
DSL by JRuby at JavaOne2012 JVM language BoF #jt12_b101Takeshi AKIMA
 
20120324 git training
20120324 git training20120324 git training
20120324 git trainingTakeshi AKIMA
 
20120121 rbc rails_routing
20120121 rbc rails_routing20120121 rbc rails_routing
20120121 rbc rails_routingTakeshi AKIMA
 
jrubykaigi2010-lt-rubeus
jrubykaigi2010-lt-rubeusjrubykaigi2010-lt-rubeus
jrubykaigi2010-lt-rubeusTakeshi AKIMA
 
Oktopartial Introduction
Oktopartial IntroductionOktopartial Introduction
Oktopartial IntroductionTakeshi AKIMA
 
仕事で使ってるプラグイン
仕事で使ってるプラグイン仕事で使ってるプラグイン
仕事で使ってるプラグインTakeshi AKIMA
 

More from Takeshi AKIMA (8)

LT at JavaOne2012 JVM language BoF #jt12_b101
LT at JavaOne2012  JVM language BoF #jt12_b101LT at JavaOne2012  JVM language BoF #jt12_b101
LT at JavaOne2012 JVM language BoF #jt12_b101
 
DSL by JRuby at JavaOne2012 JVM language BoF #jt12_b101
DSL by JRuby at JavaOne2012  JVM language BoF #jt12_b101DSL by JRuby at JavaOne2012  JVM language BoF #jt12_b101
DSL by JRuby at JavaOne2012 JVM language BoF #jt12_b101
 
20120324 git training
20120324 git training20120324 git training
20120324 git training
 
20120121 rbc rails_routing
20120121 rbc rails_routing20120121 rbc rails_routing
20120121 rbc rails_routing
 
Llonsen object ruby
Llonsen object rubyLlonsen object ruby
Llonsen object ruby
 
jrubykaigi2010-lt-rubeus
jrubykaigi2010-lt-rubeusjrubykaigi2010-lt-rubeus
jrubykaigi2010-lt-rubeus
 
Oktopartial Introduction
Oktopartial IntroductionOktopartial Introduction
Oktopartial Introduction
 
仕事で使ってるプラグイン
仕事で使ってるプラグイン仕事で使ってるプラグイン
仕事で使ってるプラグイン
 

Recently uploaded

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Recently uploaded (12)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

20120831 mongoid

  • 1. Mongoidを語ってみよう 2012/08/31 @akimatter 13年1月24日木曜日
  • 2. 自己紹介 秋間武志 RBCスタッフ 仕事でmongoidを使って約2年 株式会社グルーヴノーツ @akimatter https://github.com/akm http://d.hatena.ne.jp/akm/ 13年1月24日木曜日
  • 3. アジェンダ NoSQLのおさらい MongoDBの概要 Mongoidの概要 Mongoid3の変更点 MongoDB 2.2の新機能 Mongoidでのモデリング 13年1月24日木曜日
  • 5. NoSQLとは NoSQLとは、リレーショナルデータベース管理シ ステム(RDBMS)以外のデータベース管理システム を指し、リレーショナルデータベースの長い歴史 を打破するものとして、広い意味での関係モデル 以外に属するデータベースの発展を促進させよう とする運動である。 http://ja.wikipedia.org/wiki/NoSQL より 13年1月24日木曜日
  • 6. 実装 産業界での有名な実装 GoogleのBigTable アマゾンのAmazon DynamoDB オープンソースの実装 MongoDB Apache HBase Apache Cassandra 13年1月24日木曜日
  • 7. 分散データベース いくつかのNoSQLシステムは分散アーキテクチャ を採用している 13年1月24日木曜日
  • 8. CAP定理 ブリュワーの定理とも呼ばれ、分散コンピュータ システムのマシン間の情報複製に関する定理。 ウェブサービスを想定して作られた定理。同時に 以下の3つを満たすことはできないというもの。 一貫性 (Consistency) 可用性 (Availability) 分断耐性 (Partition-tolerance) 13年1月24日木曜日
  • 11. Eventually Consistency システム内に、一時的にConsistentでない状態が生 まれても、ある期間の後には、Consistentな状態 になるような性質を、Eventually Consistencyとい う。 13年1月24日木曜日
  • 12. Eventually Consistency この言葉が定義されたことで「Scalableで Availableで、かつ、Eventually Consistentなシステ ムは可能である。」と言うことが可能になった。 実際、mongoidにも、consistencyの選択肢 に:eventual と :strongがある 13年1月24日木曜日
  • 13. BASE CAPの全部を満たさなくてもシステムとして十分 Basically Available Soft-state Eventually consistent http://qcontokyo.com/tokyo-2009/pdf/ GeneralSession-Day2-Maruyama.pdf 13年1月24日木曜日
  • 15. 特徴 「MongoDB はドキュメント志向のDBMSです。 MySQLですがJSON型オブ ジェクトを伴い、RDBMS表ではなく、データモデルで構成されます。大切 なことは、MongoDBは、結合やトランザクションをサポートしないという ことです。しかし二次的インデックスで、クエリ言語表示、アトミックがド キュメントレベルで書き込みを行い一貫した読み込みをするのを特徴としま す。 操作上、MongoDBは、自動範囲ベース自動フェイルオーバーと水平スケー リングを内蔵する、マスタースレーブ・レプリケーションを特徴としま す。」 http://jp.docs.mongodb.org/manual/faq/fundamentals/#what-kind-of-database-is- mongodb 13年1月24日木曜日
  • 17. 分散アーキテクチャ レプリケーション マスター/スレイブ レプリカセット シャーディング 13年1月24日木曜日
  • 18. JOINなし 「Mongoでは、リレーショナルデータベースのデ ザインでするような"正規化"はそれほど必要ありま せん。サーバサイドでの"join"がないからです。」 http://www.mongodb.org/pages/viewpage.action? pageId=7209156 13年1月24日木曜日
  • 19. 埋め込みドキュメント ドキュメントに複数のドキュメントを埋め込むこ とができる db.employees.insert({_id:   ObjectId("4d85c7039ab0fd70a117d734"),   name:  'Ghanima',  family:  {mother:   'Chani',  father:  'Paul',  brother:   ObjectId("4d85c7039ab0fd70a117d730")}}) http://www.mongodb.org/pages/viewpage.action?pageId=18907286 13年1月24日木曜日
  • 20. 組み込み vs 参照 http://www.mongodb.org/pages/viewpage.action?pageId=7209156 13年1月24日木曜日
  • 21. トランザクションなし 「MongoDBは ACIDトランザクションを提供しま せん。」 http://jp.docs.mongodb.org/manual/faq/ fundamentals/#does-mongodb-support- transactions 13年1月24日木曜日
  • 22. アトミックな操作 「MongoDBは、一つのドキュメント でのアト ミックな操作をサポートしています」 http://www.mongodb.org/pages/viewpage.action? pageId=7209573 13年1月24日木曜日
  • 23. トランザクション 「トランザクションが満たすべき技術的要件に ACID特性がある」 http://ja.wikipedia.org/wiki/トランザクション 13年1月24日木曜日
  • 24. ACIDについて比較 RDB MongoDB 原子性 atomicity ○ △ 一貫性 consistency ○ ○ 独立性 isolation ○ ○ 永続性 durability ○ ○ http://ja.wikipedia.org/wiki/ACID_(コンピュータ科学) 13年1月24日木曜日
  • 25. consistencyという言葉 「一貫性のあるサービスでは、操作は完了するか、一切何もしないかの、ど ちらかだ。 ギルバートとリンチは、一貫性ではなく原子性(atomic)という 語を証明の中で使っている。 理論的な文脈では原子性という方が要領を得 ている。 というのも細かい話をすると、一貫性(Consistent) は データ ベーストランザクションの望ましい性質をあらわす ACID の C に使われて おり、 これはあるデータが事前に与えられた制約を破った状態で残らない ことを意味している。 ところが CAP の C を分散システムでの事前の制約 とみなし、 同じデータをあらわす複数の値を許さないことにすると、抽象 化が漏れて紛らわしいことになる。 (それに、もしブリュワーが原子性 (atomic)という語を使っていたら AAP 定理になる。 こんなのを発音しよ うとしたら皆が病人みたいになってしまう。)」 http://www.hyuki.com/yukiwiki/wiki.cgi?BrewersCapTheorem 13年1月24日木曜日
  • 27. ODM for MongoDB Mongoid (pronounced mann-goyd) is an Object- Document-Mapper (ODM) for MongoDB written in Ruby. It was conceived in August, 2009 during a whiskey-induced evening at the infamous Oasis in Florida, USA by Durran Jordan. http://mongoid.org/en/mongoid/index.html 13年1月24日木曜日
  • 28. Mongoidの哲学 The philosophy of Mongoid is to provide a familiar API to Ruby developers who have been using Active Record or Data Mapper, while leveraging the power of MongoDB's schemaless and performant document-based design, dynamic queries, and atomic modifier operations. MongoIdの哲学は、MongoDBのスキーマレスとパフォー マンスのドキュメントベースの設計、動的なクエリ、お よびアトミックな更新操作のパワーを活用しながら、 ActiveRecordやDataMapperを使用しているRubyの開発 者におなじみのAPIを提供することです。 13年1月24日木曜日
  • 29. Documents Fields Array BigDecimal Boolean Date class Person DateTime include Mongoid::Document Float field :first_name, type: String Hash field :middle_name, type: String Integer field :last_name, type: String Moped::BSON::ObjectId end Range Regexp String Symbol Time TimeWithZone 13年1月24日木曜日
  • 30. Persistence Standard Model.create, Model.create!, Model#save, Model#save!, Model#update_attributes, Model#update_attributes!, Model#update_attribute, Model#upsert, Model#touch, Model#delete, Model#destroy, Model.delete_all, Model.destroy_all この辺はActiveRecordと同じ感じ 13年1月24日木曜日
  • 31. Persistence Atomic Model#add_to_set, Model#bit, Model#inc, Model#pop, Model#pull, Model#pull_all, Model#push, Model#push_all, Model#rename, Model#set, Model#unset コールバックもバリデーションも呼ばれないから 要注意 13年1月24日木曜日
  • 32. relations Mongoid Mongoid ActiveRecord Reference Embed belongs_to belongs_to embedded_in has_many has_many embeds_many has_one has_one embeds_one has_and_belongs_ has_and_belongs_ N/A to_many to_many 13年1月24日木曜日
  • 33. IDの振り方 ActiveRecordでは、RDBサーバのautoincrementの カラムをidとして使用する。 MongoDBでは主キーとなる_idの値はクライアン トで生成する必要がある。 Mongoidではドライバ のmopedが行う。この値はUUIDを用いる。衝突す る可能性はxxxくらい。 13年1月24日木曜日
  • 36. origin One of MongoDB's greatest features is its ability to execute dynamic queries, which Origin abstracts in a familiar Arel-style DSL that Mongoid includes. 13年1月24日木曜日
  • 37. moped Goal of this gem Thread-safe No more extension (bson_ext) Cleanest API Better ReplicaSet management 13年1月24日木曜日
  • 38. moped limitation Limitation Ruby 1.9 only No GridFS support The only case where moped is slower than bson_ext is the ObjectId generation 13年1月24日木曜日
  • 40. New Features Aggregation Framework TTL Collections Concurrency Improvements Improved Data Center Awareness with Tag Aware Sharding Fully Supported Read Preference Semantics http://docs.mongodb.org/manual/release-notes/ 13年1月24日木曜日
  • 42. Tengineの例 TengineはGroovenautsが開発している分散環境 におけるイベントハンドリングおよびジョブの 実行制御のためのフレームワーク https://github.com/tengine/tengine 13年1月24日木曜日
  • 46. 公式ドキュメントの例 http://mongoid.org/en/mongoid/docs/ relations.html 13年1月24日木曜日
  • 47. モデリングのポイント ◦ リレーショナルモデリングは利用可能なデータ構造駆動 だ。この設計をするにあたって重要なテーマは"自分は どの答えを持っているか?" ◦ NoSQLデータモデリングはアプリケーション特有のアク セスパターン、すなわち、サポートされるクエリの型駆 動だ。メインテーマは"自分は何を知りたいのか?" https://gist.github.com/2396234 13年1月24日木曜日
  • 48. 組み込み vs 参照 再び http://www.mongodb.org/pages/viewpage.action?pageId=7209156 13年1月24日木曜日
  • 51. 参考文献 12年後のCAP定理: "法則"はどのように変わったか http://www.infoq.com/jp/articles/cap-twelve-years-later-how-the-rules- have-changed MongoDBドキュメント http://www.mongodb.org/display/DOCSJP/Home Cloudの技術的特徴について 丸山先生 http://qcontokyo.com/tokyo-2009/pdf/GeneralSession-Day2- Maruyama.pdf 13年1月24日木曜日
  • 52. 参考文献 NoSQLデータモデリング技法 https://gist.github.com/2396234 ブリュワーの CAP 定理 http://www.hyuki.com/yukiwiki/wiki.cgi?BrewersCapTheorem 13年1月24日木曜日