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