MongoDBとScala
日本語でMongoもだいぶ終わりに近づいたのでScalaで復習してみます。
Mongoのオンライン講義はこちら
https://education.10gen.com/courses/10gen/M101P/2013_September/about
WEEK1はMongoの特徴とか
コンセプト
- 限りなくRDB並みの機能を追求しつつkey valu store並みのスケーラビリティを目指す。
特徴
ドキュメント思考DB。JSON形式でデータを保存できる。
(Mongo内部ではBSONと呼ばれるJSONを拡張した形式で保存されている。)schema less コレクション内部のドキュメントが同じ形式である必要はない。
RDBとの違い
joinをサポートしない。
transactionをサポートしない。
JSONは構造を持つ事ができるのでjoinが必要なケースは少ないはず。
またドキュメント単位でアトミックに処理できるのでtransactionにつても問題になるケースはすくない。
インストール
省略
触ってみる
Biuld.scala
import sbt._
import sbt.Keys._
object MongoScalaBuild extends Build {
lazy val root = Project(
id = "mongo-scsala",
base = file("."),
settings = Project.defaultSettings ++ Seq(
name := "mongo-scala",
organization := "com.github.taka-",
version := "1.0.0-SNAPSHOT",
scalaVersion := "2.10.2",
scalacOptions ++= Seq("-deprecation", "-language:_"),
libraryDependencies ++= Seq(
"org.mongodb" %% "casbah" % "2.6.3"
),
initialCommands += """
import com.mongodb.casbah.Imports._
import com.mongodb.casbah.query.Imports._
import com.mongodb.casbah.gridfs.Imports._
"""
)
)
}
sbtを立ち上げてconsoleを起動。
- ローカルで起動したmongoに接続する。
scala> val uri = MongoClientURI("mongodb://localhost:27017/")
uri: com.mongodb.casbah.MongoClientURI = mongodb://localhost:27017/scala> val mongoClient = MongoClient(uri)
mongoClient: com.mongodb.casbah.MongoClient = com.mongodb.casbah.MongoClient@b1f3c4e
testという名前のDBに接続
scala> val db = mongoClient("test")
db: com.mongodb.casbah.MongoDB = testcollectionsという名前のcollectionを作成
scala> val collection = db("collections")
collection: com.mongodb.casbah.MongoCollection = collectionsとりあえず1件保存
scala> collection.save(Map("name" -> "takayuki", "work" -> "engineer"))
res: com.mongodb.WriteResult = { "serverUsed" : "localhost/127.0.0.1:27017" , "n" : 0 , "connectionId" : 1 , "err" : null , "ok" : 1.0}保存された事を確認
scala> collection.findOne()
res: Option[collection.T] = Some({ "_id" : { "$oid" : "52638419b67876df1eb5f9eb"} , "name" : "takayuki" , "work" : "engineer"})