31
JavaMongoDB 船戸 隆 2011/02/25 2011228日月曜日

Javaでmongo db

Embed Size (px)

Citation preview

Page 1: Javaでmongo db

JavaでMongoDB船戸 隆

2011/02/25

2011年2月28日月曜日

Page 2: Javaでmongo db

アジェンダ

2011年2月28日月曜日

Page 3: Javaでmongo db

MongoDBの特徴

データ構造

MongoDBを操るには?

接続

操作

アジェンダ

2011年2月28日月曜日

Page 4: Javaでmongo db

MongoDBの特徴

2011年2月28日月曜日

Page 5: Javaでmongo db

MongoDBの特徴MongoDBはドキュメント指向データベース

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

基本JSONの形(BSON)

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

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

2011年2月28日月曜日

Page 6: Javaでmongo db

ドキュメント指向データベースとは?

2011年2月28日月曜日

Page 7: Javaでmongo db

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

2011年2月28日月曜日

Page 8: Javaでmongo db

ドキュメント指向DBでは

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

2011年2月28日月曜日

Page 9: Javaでmongo db

MongoDBの特徴高性能

読み書きが高速

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

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

高機能なクエリ

2011年2月28日月曜日

Page 10: Javaでmongo db

MongoDBの特徴C++で書かれてる

Boost使ってる

GridFS

分散ファイルシステム

Map/Reduce

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

2011年2月28日月曜日

Page 11: Javaでmongo db

用 語

2011年2月28日月曜日

Page 12: Javaでmongo db

RDB MongoDB

レコード ドキュメント

カラム エレメント

テーブル コレクション

2011年2月28日月曜日

Page 13: Javaでmongo db

実際に操作

2011年2月28日月曜日

Page 14: Javaでmongo db

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

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

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

2011年2月28日月曜日

Page 15: Javaでmongo db

接続サンプル

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

コレクションを取得DBを取得して、さらにコレクションを取得

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

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

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

2011年2月28日月曜日

Page 17: Javaでmongo db

コレクションに対する操作

追加

更新

削除

検索

2011年2月28日月曜日

Page 18: Javaでmongo db

追加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

追加コレクションに追加

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

MongoDBが内部使うユニークなキー(UUID)を自動で振ってくれる

DBCollection collection = db.getCollection("daimyou"); collection.insert(dbObject);

2011年2月28日月曜日

Page 20: Javaでmongo db

更新クエリを使って更新をかける

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

削除取得したドキュメントを渡して削除

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

検索演算子

様々な演算子

検索条件もDBObject

<, <=, >, >=$all$exists$mod$ne$in$nin$nor$or$size$type

正規表現...

new BasicDBObject("$all", 値)

2011年2月28日月曜日

Page 23: Javaでmongo db

検索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

検索大小

// 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

検索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

検索配列のマッチ

// 配列のマッチ。三河国、美濃国、出雲国をすべて要素にもつもの。 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

検索要素の数

// 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

検索DISTINCT

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

2011年2月28日月曜日

Page 29: Javaでmongo db

検索その他

オフセット検索

Count

Sort

グルーピング

Map/Reduce

2011年2月28日月曜日

Page 30: Javaでmongo db

最後に

OR/Mappingフレームワーク

Morphia

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

RDB置き換わる可能性

2011年2月28日月曜日

Page 31: Javaでmongo db

ありがとうございました

2011年2月28日月曜日