SlideShare a Scribd company logo
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日月曜日

More Related Content

PDF
Parse introduction
PDF
jQuery超入門編
PDF
Spring Data in a Nutshell
PPTX
Active Directoryデータの "大きい整数"
PPTX
Active Directoryデータのプロパティ出力(Output Properties)
PDF
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
PDF
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
PDF
Rakuten tech conf
Parse introduction
jQuery超入門編
Spring Data in a Nutshell
Active Directoryデータの "大きい整数"
Active Directoryデータのプロパティ出力(Output Properties)
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
Rakuten tech conf

Viewers also liked (20)

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

Similar to Javaでmongo db (20)

PDF
MongoDBざっくり解説
PDF
Introduction to MongoDB
PDF
Mongodb 紹介
PDF
2019年度 若手技術者向け講座 NoSQL
PDF
PHP と MySQL でカジュアルに MapReduce する (Short Version)
ODP
Mongo db勉強会
PDF
PHP と MySQL でカジュアルに MapReduce する
PDF
PHP と MySQL で 1 カチャカチャカチャ...ッターン! MapReduce (@ニコニコ超会議)
PDF
"Programming Hive" Reading #1
PDF
mongodbの簡易ストレージ化
PPT
Mongodb
PDF
MongoDB勉強会資料
PDF
20120831 mongoid
PDF
MongoDBの使い方
PPTX
Mongo db使ってみよう
PPTX
Tritonn から Elasticsearch への移行話
PDF
はじめてのMongoDB
PDF
MongoDBとAjaxで作る解析フロントエンド&GraphDBを用いたソーシャルデータ解析
KEY
はじめてのCouch db
MongoDBざっくり解説
Introduction to MongoDB
Mongodb 紹介
2019年度 若手技術者向け講座 NoSQL
PHP と MySQL でカジュアルに MapReduce する (Short Version)
Mongo db勉強会
PHP と MySQL でカジュアルに MapReduce する
PHP と MySQL で 1 カチャカチャカチャ...ッターン! MapReduce (@ニコニコ超会議)
"Programming Hive" Reading #1
mongodbの簡易ストレージ化
Mongodb
MongoDB勉強会資料
20120831 mongoid
MongoDBの使い方
Mongo db使ってみよう
Tritonn から Elasticsearch への移行話
はじめてのMongoDB
MongoDBとAjaxで作る解析フロントエンド&GraphDBを用いたソーシャルデータ解析
はじめてのCouch db
Ad

More from Funato Takashi (7)

PDF
プログラムを作って飯を食うということ
PDF
Git flow cheatsheet
PPT
Springでdao 20070413
KEY
Unit testで定時帰宅!
PPT
Maven2 plugin
KEY
問題解決ノ勘所
ODP
スレッドダンプの読み方
プログラムを作って飯を食うということ
Git flow cheatsheet
Springでdao 20070413
Unit testで定時帰宅!
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日月曜日