SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
JavaでMongoDB
                    船戸 隆


                       2011/02/25



2011年2月28日月曜日
アジェンダ




2011年2月28日月曜日
アジェンダ
                MongoDBの特徴

                  データ構造

                MongoDBを操るには?

                  接続

                  操作

2011年2月28日月曜日
MongoDBの特徴




2011年2月28日月曜日
MongoDBの特徴
                MongoDBはドキュメント指向データベース

                  データの格納方法がオブジェクト指向的

                  基本JSONの形(BSON)

                  マッピングのコストが低い

                  JOINの必要がない。というかできない。


2011年2月28日月曜日
ドキュメント指向
                データベースとは?



2011年2月28日月曜日
RDBでは
                それぞれのテーブルの関係を
                リレーションで表す
                SQLを使う
                OneToManyの表現がしずらい
                1+N問題
                オブジェクト指向言語と相性
                がよくない



2011年2月28日月曜日
ドキュメント
         指向DBでは
                レコードの単位がドキュメント
                JOINしない。内包する。
                事前に構造を決める必要がない
                (スキーマレス)
                オブジェクト指向的構造にマッ
                チしやすい




2011年2月28日月曜日
MongoDBの特徴
                高性能

                 読み書きが高速

                 高可用性(マスタ、スレイブ自動切り替え)

                 容易なスケーラビリティ(シャーディング)

                 高機能なクエリ


2011年2月28日月曜日
MongoDBの特徴
                C++で書かれてる

                   Boost使ってる

                GridFS

                   分散ファイルシステム

                Map/Reduce

                商用サポート       http://www.10gen.com/support




2011年2月28日月曜日
用 語

2011年2月28日月曜日
RDB   MongoDB

                レコード   ドキュメント


                カラム    エレメント


                テーブル   コレクション



2011年2月28日月曜日
実際に操作


2011年2月28日月曜日
どのようにアクセスするか?
                Javaの場合java-driverを使用してアクセス
                する。もちろんJavaで書かれている。

                  Maven2のリポジトリに登録されている

                その他にもC、C#、C++、.NET、
                ColdFusion、Erlang、PHP、Javascript
                など

2011年2月28日月曜日
接続方法

                    接続サンプル

                        JDBCの接続文字列のような感じ

                
   
   MongoURI uri = new MongoURI("mongodb://192.168.128.3 ");
                
   
   Mongo mongo = new Mongo(uri);
                
   
   DB db = mongo.getDB("sengoku");



                                    DBが存在しない場合は自動で作成される




2011年2月28日月曜日
コレクションを取得
                    DBを取得して、さらにコレクションを取得

                        RDBで言うところのテーブルを取得

                        コレクションに対して操作を行う

                
   
   DB db = getDB();
                
   
   // コレクションがなければコレクションを新規作成
                
   
   DBCollection collection = db.getCollection("daimyou");




2011年2月28日月曜日
コレクションに対する操作

                追加

                更新

                削除

                検索


2011年2月28日月曜日
追加
                DBObjectに対して値を追加

                        Mapのような感じ

                        どんどん入れ子にできる
                
   
   DBObject dbObject = new BasicDBObject();
                
   
   dbObject.put("name", “あいうえお”);
                
   
   dbObject.put("sex", "male");
                
   
   dbObject.put("age", 35);
                
   
   dbObject.put("height", 170);
                
   
   dbObject.put("weight", 61);
                
   
   dbObject.put("list", new ArrayList<String>());
                
   
   dbObject.put("list", new HashMap<String, String>());




2011年2月28日月曜日
追加
                    コレクションに追加

                        あとはよろしくやってくれる

                        MongoDBが内部使うユニークなキー(UUID)を
                        自動で振ってくれる
                
   
   DBCollection collection = db.getCollection("daimyou");
                    
   collection.insert(dbObject);




2011年2月28日月曜日
更新
                    クエリを使って更新をかける


                
   
   DBCollection col = db.getCollection("daimyou");
                
   
   DBObject dbobject = col.findOne();
                
   
   String name = (String)dbobject.get("name");
                
   
   System.out.println(dbobject);
                
   
   System.out.println(name);
                
   
   dbobject.put("name", "あいうえお");
                
   
   DBObject query = BasicDBObjectBuilder.start()
                            .add("_id", dbobject.get("_id")).get();
                
   
   WriteResult update = col.update(query, dbobject);




2011年2月28日月曜日
削除
                    取得したドキュメントを渡して削除



                
   
   DB db = getDB();
                
   
   DBCollection col = db.getCollection("daimyou");
                
   
   // 全件取得
                
   
   DBCursor cursor = col.find();
                
   
   while (cursor.hasNext()) {
                
   
   
  col.remove(cursor.next());
                
   
   }




2011年2月28日月曜日
検索
                                               <, <=, >, >=
                                               $all
                                               $exists
                 演算子
                                               $mod
                                               $ne
                     様々な演算子                    $in
                                               $nin
                                               $nor
                 検索条件もDBObject
                                               $or
                new BasicDBObject("$all", 値)   $size
                                               $type
                                               正規表現
                                                      ...


2011年2月28日月曜日
検索
                    or条件

                
   
   // 条件付き取得
                
   
   // or 条件
                
   
   // territory = 美濃国 or territory = 飛騨国
                
   
   BasicDBObject query = new BasicDBObject();
                
   
   query.put("territory", "美濃国");
                
   
   query.put("territory", "飛騨国");
                
   
   System.out.println(query);

                
   
   DBCursor cursor = col.find(query);
                
   
   while (cursor.hasNext()) {
                
   
   
  System.out.println(cursor.next());
                
   
   }




2011年2月28日月曜日
検索
                大小



                 
   
   // age > 45
                 
   
   query = new BasicDBObject();
                 
   
   query.put("age", new BasicDBObject("$gt", 45));
                 
   
   System.out.println(query);
                 
   
   cursor = col.find(query);
                 
   
   while (cursor.hasNext()) {
                 
   
   
   System.out.println(cursor.next());
                 
   
   }




2011年2月28日月曜日
検索
                IN条件

                
   
   // weight in (40, 50, 60)
                
   
   query = new BasicDBObject();
                
   
   query.put("weight", new BasicDBObject("$in",
                
   
   
   
   new Integer[] { 40, 50, 60 }));
                
   
   System.out.println(query);
                
   
   cursor = col.find(query);
                
   
   while (cursor.hasNext()) {
                
   
   
   System.out.println(cursor.next());
                
   
   }




2011年2月28日月曜日
検索
                    配列のマッチ


        
   
   // 配列のマッチ。三河国、美濃国、出雲国をすべて要素にもつもの。
        
   
   query = new BasicDBObject();
        
   
   query.put("territory", new BasicDBObject("$all", new String[] { "三河国",
        
   
   
   
   "美濃国", "出雲国" }));
        
   
   System.out.println(query);
        
   
   cursor = col.find(query);
        
   
   while (cursor.hasNext()) {
        
   
   
   System.out.println(cursor.next());
        
   
   }




2011年2月28日月曜日
検索
                    要素の数



                
   
   // territoryの要素の数が3つのもの
                
   
   query = new BasicDBObject();
                
   
   query.put("territory", new BasicDBObject("$size", 3));
                
   
   System.out.println(query);
                
   
   cursor = col.find(query);
                
   
   while (cursor.hasNext()) {
                
   
   
   System.out.println(cursor.next());
                
   
   }




2011年2月28日月曜日
検索
                DISTINCT



                
   
   // 名前でdistinct
                
   
   List distinct = col.distinct("name");
                
   
   for (Object obj : distinct) {
                
   
   
    System.out.println(obj);
                
   
   }




2011年2月28日月曜日
検索
                その他

                 オフセット検索

                 Count

                 Sort

                 グルーピング

                 Map/Reduce



2011年2月28日月曜日
最後に
                OR/Mappingフレームワーク

                  Morphia

                今のところ銀の弾丸に近いところまで

                RDB置き換わる可能性



2011年2月28日月曜日
ありがとうございました




2011年2月28日月曜日

Mais conteúdo relacionado

Destaque

MongoDB on AWSクラウドという選択
MongoDB on AWSクラウドという選択MongoDB on AWSクラウドという選択
MongoDB on AWSクラウドという選択Yasuhiro Matsuo
 
Mongo dbを知ろう
Mongo dbを知ろうMongo dbを知ろう
Mongo dbを知ろうCROOZ, inc.
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
MongoDBアプリの実例
MongoDBアプリの実例MongoDBアプリの実例
MongoDBアプリの実例Kazuyuki Namba
 
20140418 info talkセミナー資料
20140418 info talkセミナー資料20140418 info talkセミナー資料
20140418 info talkセミナー資料Takahiro Iwase
 
HadoopとMongoDBを活用したソーシャルアプリのログ解析
HadoopとMongoDBを活用したソーシャルアプリのログ解析HadoopとMongoDBを活用したソーシャルアプリのログ解析
HadoopとMongoDBを活用したソーシャルアプリのログ解析Takahiro Inoue
 
Ai専門支部#2 Amazon AlexaとAmazon Polly
Ai専門支部#2 Amazon AlexaとAmazon PollyAi専門支部#2 Amazon AlexaとAmazon Polly
Ai専門支部#2 Amazon AlexaとAmazon PollyJun Ichikawa
 
後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜Masakazu Matsushita
 
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみよう
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみようAlfresco勉強会#26 Alfresco SDK + Eclipseで開発してみよう
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみようJun Terashita
 
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔Insight Technology, Inc.
 
qpstudy 2013.07 NoSQL
qpstudy 2013.07 NoSQLqpstudy 2013.07 NoSQL
qpstudy 2013.07 NoSQLAkihiro Okuno
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介Tetsutaro Watanabe
 
AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Polly (MAC204)
AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Polly (MAC204)AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Polly (MAC204)
AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Polly (MAC204)Amazon Web Services
 
Announcing Amazon Polly - Turn Text into Lifelike Speech - December 2016 Mont...
Announcing Amazon Polly - Turn Text into Lifelike Speech - December 2016 Mont...Announcing Amazon Polly - Turn Text into Lifelike Speech - December 2016 Mont...
Announcing Amazon Polly - Turn Text into Lifelike Speech - December 2016 Mont...Amazon Web Services
 
AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Rekognition (MAC203)
AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Rekognition (MAC203)AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Rekognition (MAC203)
AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Rekognition (MAC203)Amazon Web Services
 
AWS Black Belt Online Seminar AWS re:Invent 2016で発表された新サービス・新機能の紹介 パート3
AWS Black Belt Online Seminar AWS re:Invent 2016で発表された新サービス・新機能の紹介 パート3AWS Black Belt Online Seminar AWS re:Invent 2016で発表された新サービス・新機能の紹介 パート3
AWS Black Belt Online Seminar AWS re:Invent 2016で発表された新サービス・新機能の紹介 パート3Amazon Web Services Japan
 
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜Naruhiko Ogasawara
 
AWS初心者向けWebinar AWSでのNoSQLの活用
AWS初心者向けWebinar AWSでのNoSQLの活用AWS初心者向けWebinar AWSでのNoSQLの活用
AWS初心者向けWebinar AWSでのNoSQLの活用Amazon Web Services Japan
 
Introducing Amazon Rekognition, Amazon Polly and Amazon Lex
Introducing Amazon Rekognition, Amazon Polly and Amazon LexIntroducing Amazon Rekognition, Amazon Polly and Amazon Lex
Introducing Amazon Rekognition, Amazon Polly and Amazon LexKeisuke Nishitani
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRecruit Technologies
 

Destaque (20)

MongoDB on AWSクラウドという選択
MongoDB on AWSクラウドという選択MongoDB on AWSクラウドという選択
MongoDB on AWSクラウドという選択
 
Mongo dbを知ろう
Mongo dbを知ろうMongo dbを知ろう
Mongo dbを知ろう
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
MongoDBアプリの実例
MongoDBアプリの実例MongoDBアプリの実例
MongoDBアプリの実例
 
20140418 info talkセミナー資料
20140418 info talkセミナー資料20140418 info talkセミナー資料
20140418 info talkセミナー資料
 
HadoopとMongoDBを活用したソーシャルアプリのログ解析
HadoopとMongoDBを活用したソーシャルアプリのログ解析HadoopとMongoDBを活用したソーシャルアプリのログ解析
HadoopとMongoDBを活用したソーシャルアプリのログ解析
 
Ai専門支部#2 Amazon AlexaとAmazon Polly
Ai専門支部#2 Amazon AlexaとAmazon PollyAi専門支部#2 Amazon AlexaとAmazon Polly
Ai専門支部#2 Amazon AlexaとAmazon Polly
 
後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜
 
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみよう
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみようAlfresco勉強会#26 Alfresco SDK + Eclipseで開発してみよう
Alfresco勉強会#26 Alfresco SDK + Eclipseで開発してみよう
 
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
[db tech showcase Tokyo 2015] B12:カラムストアデータベースの技術と活用法 by 日本電気株式会社 田村稔
 
qpstudy 2013.07 NoSQL
qpstudy 2013.07 NoSQLqpstudy 2013.07 NoSQL
qpstudy 2013.07 NoSQL
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介
 
AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Polly (MAC204)
AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Polly (MAC204)AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Polly (MAC204)
AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Polly (MAC204)
 
Announcing Amazon Polly - Turn Text into Lifelike Speech - December 2016 Mont...
Announcing Amazon Polly - Turn Text into Lifelike Speech - December 2016 Mont...Announcing Amazon Polly - Turn Text into Lifelike Speech - December 2016 Mont...
Announcing Amazon Polly - Turn Text into Lifelike Speech - December 2016 Mont...
 
AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Rekognition (MAC203)
AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Rekognition (MAC203)AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Rekognition (MAC203)
AWS re:Invent 2016: NEW LAUNCH! Introducing Amazon Rekognition (MAC203)
 
AWS Black Belt Online Seminar AWS re:Invent 2016で発表された新サービス・新機能の紹介 パート3
AWS Black Belt Online Seminar AWS re:Invent 2016で発表された新サービス・新機能の紹介 パート3AWS Black Belt Online Seminar AWS re:Invent 2016で発表された新サービス・新機能の紹介 パート3
AWS Black Belt Online Seminar AWS re:Invent 2016で発表された新サービス・新機能の紹介 パート3
 
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
 
AWS初心者向けWebinar AWSでのNoSQLの活用
AWS初心者向けWebinar AWSでのNoSQLの活用AWS初心者向けWebinar AWSでのNoSQLの活用
AWS初心者向けWebinar AWSでのNoSQLの活用
 
Introducing Amazon Rekognition, Amazon Polly and Amazon Lex
Introducing Amazon Rekognition, Amazon Polly and Amazon LexIntroducing Amazon Rekognition, Amazon Polly and Amazon Lex
Introducing Amazon Rekognition, Amazon Polly and Amazon Lex
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
 

Semelhante a Javaでmongo db

20181031 springfest spring data geode
20181031 springfest spring data geode20181031 springfest spring data geode
20181031 springfest spring data geodeMasaki Yamakawa
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門Yohei Sasaki
 
2019年度 若手技術者向け講座 NoSQL
2019年度 若手技術者向け講座 NoSQL2019年度 若手技術者向け講座 NoSQL
2019年度 若手技術者向け講座 NoSQLkeki3
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2Atsuo Yamasaki
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~Akabane Hiroyuki
 
Mongo db + xsd:xml(20130219)
Mongo db + xsd:xml(20130219)Mongo db + xsd:xml(20130219)
Mongo db + xsd:xml(20130219)Michael Nguyen
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成弘毅 露崎
 

Semelhante a Javaでmongo db (9)

20181031 springfest spring data geode
20181031 springfest spring data geode20181031 springfest spring data geode
20181031 springfest spring data geode
 
Mongodb
MongodbMongodb
Mongodb
 
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
 
2019年度 若手技術者向け講座 NoSQL
2019年度 若手技術者向け講座 NoSQL2019年度 若手技術者向け講座 NoSQL
2019年度 若手技術者向け講座 NoSQL
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
 
Mongo db + xsd:xml(20130219)
Mongo db + xsd:xml(20130219)Mongo db + xsd:xml(20130219)
Mongo db + xsd:xml(20130219)
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
 
Distributed processwithapex&amp;flow lowcode
Distributed processwithapex&amp;flow lowcodeDistributed processwithapex&amp;flow lowcode
Distributed processwithapex&amp;flow lowcode
 

Mais de Funato Takashi

プログラムを作って飯を食うということ
プログラムを作って飯を食うということプログラムを作って飯を食うということ
プログラムを作って飯を食うということFunato Takashi
 
Springでdao 20070413
Springでdao 20070413Springでdao 20070413
Springでdao 20070413Funato Takashi
 
Unit testで定時帰宅!
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!Funato Takashi
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方Funato Takashi
 

Mais de Funato Takashi (7)

プログラムを作って飯を食うということ
プログラムを作って飯を食うということプログラムを作って飯を食うということ
プログラムを作って飯を食うということ
 
Git flow cheatsheet
Git flow cheatsheetGit flow cheatsheet
Git flow cheatsheet
 
Springでdao 20070413
Springでdao 20070413Springでdao 20070413
Springでdao 20070413
 
Unit testで定時帰宅!
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!
 
Maven2 plugin
Maven2 pluginMaven2 plugin
Maven2 plugin
 
問題解決ノ勘所
問題解決ノ勘所問題解決ノ勘所
問題解決ノ勘所
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方
 

Javaでmongo db

  • 1. JavaでMongoDB 船戸 隆 2011/02/25 2011年2月28日月曜日
  • 3. アジェンダ MongoDBの特徴 データ構造 MongoDBを操るには? 接続 操作 2011年2月28日月曜日
  • 5. MongoDBの特徴 MongoDBはドキュメント指向データベース データの格納方法がオブジェクト指向的 基本JSONの形(BSON) マッピングのコストが低い JOINの必要がない。というかできない。 2011年2月28日月曜日
  • 6. ドキュメント指向 データベースとは? 2011年2月28日月曜日
  • 7. RDBでは それぞれのテーブルの関係を リレーションで表す SQLを使う OneToManyの表現がしずらい 1+N問題 オブジェクト指向言語と相性 がよくない 2011年2月28日月曜日
  • 8. ドキュメント 指向DBでは レコードの単位がドキュメント JOINしない。内包する。 事前に構造を決める必要がない (スキーマレス) オブジェクト指向的構造にマッ チしやすい 2011年2月28日月曜日
  • 9. MongoDBの特徴 高性能 読み書きが高速 高可用性(マスタ、スレイブ自動切り替え) 容易なスケーラビリティ(シャーディング) 高機能なクエリ 2011年2月28日月曜日
  • 10. MongoDBの特徴 C++で書かれてる Boost使ってる GridFS 分散ファイルシステム Map/Reduce 商用サポート http://www.10gen.com/support 2011年2月28日月曜日
  • 12. RDB MongoDB レコード ドキュメント カラム エレメント テーブル コレクション 2011年2月28日月曜日
  • 14. どのようにアクセスするか? Javaの場合java-driverを使用してアクセス する。もちろんJavaで書かれている。 Maven2のリポジトリに登録されている その他にもC、C#、C++、.NET、 ColdFusion、Erlang、PHP、Javascript など 2011年2月28日月曜日
  • 15. 接続方法 接続サンプル JDBCの接続文字列のような感じ MongoURI uri = new MongoURI("mongodb://192.168.128.3 "); Mongo mongo = new Mongo(uri); DB db = mongo.getDB("sengoku"); DBが存在しない場合は自動で作成される 2011年2月28日月曜日
  • 16. コレクションを取得 DBを取得して、さらにコレクションを取得 RDBで言うところのテーブルを取得 コレクションに対して操作を行う DB db = getDB(); // コレクションがなければコレクションを新規作成 DBCollection collection = db.getCollection("daimyou"); 2011年2月28日月曜日
  • 17. コレクションに対する操作 追加 更新 削除 検索 2011年2月28日月曜日
  • 18. 追加 DBObjectに対して値を追加 Mapのような感じ どんどん入れ子にできる DBObject dbObject = new BasicDBObject(); dbObject.put("name", “あいうえお”); dbObject.put("sex", "male"); dbObject.put("age", 35); dbObject.put("height", 170); dbObject.put("weight", 61); dbObject.put("list", new ArrayList<String>()); dbObject.put("list", new HashMap<String, String>()); 2011年2月28日月曜日
  • 19. 追加 コレクションに追加 あとはよろしくやってくれる MongoDBが内部使うユニークなキー(UUID)を 自動で振ってくれる DBCollection collection = db.getCollection("daimyou"); collection.insert(dbObject); 2011年2月28日月曜日
  • 20. 更新 クエリを使って更新をかける DBCollection col = db.getCollection("daimyou"); DBObject dbobject = col.findOne(); String name = (String)dbobject.get("name"); System.out.println(dbobject); System.out.println(name); dbobject.put("name", "あいうえお"); DBObject query = BasicDBObjectBuilder.start() .add("_id", dbobject.get("_id")).get(); WriteResult update = col.update(query, dbobject); 2011年2月28日月曜日
  • 21. 削除 取得したドキュメントを渡して削除 DB db = getDB(); DBCollection col = db.getCollection("daimyou"); // 全件取得 DBCursor cursor = col.find(); while (cursor.hasNext()) { col.remove(cursor.next()); } 2011年2月28日月曜日
  • 22. 検索 <, <=, >, >= $all $exists 演算子 $mod $ne 様々な演算子 $in $nin $nor 検索条件もDBObject $or new BasicDBObject("$all", 値) $size $type 正規表現 ... 2011年2月28日月曜日
  • 23. 検索 or条件 // 条件付き取得 // or 条件 // territory = 美濃国 or territory = 飛騨国 BasicDBObject query = new BasicDBObject(); query.put("territory", "美濃国"); query.put("territory", "飛騨国"); System.out.println(query); DBCursor cursor = col.find(query); while (cursor.hasNext()) { System.out.println(cursor.next()); } 2011年2月28日月曜日
  • 24. 検索 大小 // age > 45 query = new BasicDBObject(); query.put("age", new BasicDBObject("$gt", 45)); System.out.println(query); cursor = col.find(query); while (cursor.hasNext()) { System.out.println(cursor.next()); } 2011年2月28日月曜日
  • 25. 検索 IN条件 // weight in (40, 50, 60) query = new BasicDBObject(); query.put("weight", new BasicDBObject("$in", new Integer[] { 40, 50, 60 })); System.out.println(query); cursor = col.find(query); while (cursor.hasNext()) { System.out.println(cursor.next()); } 2011年2月28日月曜日
  • 26. 検索 配列のマッチ // 配列のマッチ。三河国、美濃国、出雲国をすべて要素にもつもの。 query = new BasicDBObject(); query.put("territory", new BasicDBObject("$all", new String[] { "三河国", "美濃国", "出雲国" })); System.out.println(query); cursor = col.find(query); while (cursor.hasNext()) { System.out.println(cursor.next()); } 2011年2月28日月曜日
  • 27. 検索 要素の数 // territoryの要素の数が3つのもの query = new BasicDBObject(); query.put("territory", new BasicDBObject("$size", 3)); System.out.println(query); cursor = col.find(query); while (cursor.hasNext()) { System.out.println(cursor.next()); } 2011年2月28日月曜日
  • 28. 検索 DISTINCT // 名前でdistinct List distinct = col.distinct("name"); for (Object obj : distinct) { System.out.println(obj); } 2011年2月28日月曜日
  • 29. 検索 その他 オフセット検索 Count Sort グルーピング Map/Reduce 2011年2月28日月曜日
  • 30. 最後に OR/Mappingフレームワーク Morphia 今のところ銀の弾丸に近いところまで RDB置き換わる可能性 2011年2月28日月曜日