さわってみよう!
Couchbase Lite
Vineyard Works
上津原 一利
at Couchbase Meetup #4
13年5月2日木曜日
自己紹介
★ iPhone App 開発やってます
★ どっちかというとCouchbaseファン
★ 趣味半分でCouchbase + Node.js
★ ブログ:http://ssdkfk.wordpress.com/
★ Tw:kazutoshi_u / Fb :kazutoshi.u
13年5月2日木曜日
最近のしごと
iOS Mobile BI
for JasperSoft
一昨日リリースしました!
OSSのBIに興味のある方、
お声掛け下さい!
13年5月2日木曜日
さて、本題に入って行きましょう
13年5月2日木曜日
Couchbase Lite
13年5月2日木曜日
Couchbase Liteってなにもん?
公式いわく(ざっくり)
CouchDBがMySQL
CouchbaseがOracle
Couchbase LiteはSQLiteみたいな感じ
“
”
Think of it this way: If Apache CouchDB is MySQL, and Couchbase Server is Oracle, then
Couchbase Lite is SQLite.
13年5月2日木曜日
何できるの?
★ ドキュメントベースのスマホ組み込みDB
★ LiveQueryで状態監視
★ CouchDBとのSync
★ JavaScriptのViewまで使えちゃう
(うまいことやれば)
13年5月2日木曜日
なんか良さそう
13年5月2日木曜日
あれ?でも
TouchDBってあったよね?
13年5月2日木曜日
TouchDBはCBLへ
★ TouchDBは1.0で一旦リリース完了
★ それ以降はCouchbase Liteとして開発中
★ 今はTouchDBで言うとVer.1.5
★ 今はプレアルファ。夏にはベータに。
13年5月2日木曜日
変わったところ
★ CouchCocoaが要らなくなった
★ コードがシンプルでわかりやすく
★ わかりにくかったクラス名が頭文字統一
★ JavaScriptやC#からのアダプタも準備
13年5月2日木曜日
つまり
高性能で使いやすくなりました
13年5月2日木曜日
コード比較
CouchDocument* doc = [db untitledDocument];
RESTOperation* ope = [doc putProperties: contents];
if (![ope wait]){
NSLog(@"SAVE error!!");
}else{
NSLog(@"SAVE success!!");
}
CBLDocument* doc = [database untitledDocument];
NSError* error;
if (![doc putProperties: contents error: &error]){
NSLog(@"Couldn't save the new item");
}
ドキュメントを保存する場合
TouchDB
Couchbase
Lite
13年5月2日木曜日
コード比較
Viewを使ってドキュメントを呼び出す場合
TouchDB
Couchbase
Lite
CouchDesignDocument* design = [db designDocumentWithName: @"Draft"];
CouchQuery* query = [design queryViewNamed: @"byDate"];
RESTOperation* op = [query start];
[op onCompletion: ^{
if (op.error) {
NSLog(@"erro!");
}
else{
for (CouchQueryRow* row in query.rows) {
NSDictionary *dic = row.value;
}
}
}];
CBLQuery* query = [[database viewNamed: @"byDate"] query];
for (CBLQueryRow* row in query.rows) {
NSDictionary* contents = row.value;
}
13年5月2日木曜日
コード比較
Viewを使ってドキュメントを呼び出す場合
TouchDB
Couchbase
Lite
CouchDesignDocument* design = [db designDocumentWithName: @"Draft"];
CouchQuery* query = [design queryViewNamed: @"byDate"];
RESTOperation* op = [query start];
[op onCompletion: ^{
if (op.error) {
NSLog(@"erro!");
}
else{
for (CouchQueryRow* row in query.rows) {
NSDictionary *dic = row.value;
}
}
}];
CBLQuery* query = [[database viewNamed: @"byDate"] query];
for (CBLQueryRow* row in query.rows) {
NSDictionary* contents = row.value;
}
その差9行!
13年5月2日木曜日
LiveQuery
LiveQueryは、指定したクエリの結果に
変化があった場合、通知をしてくれる機能。
ちょっと見てみましょう。
13年5月2日木曜日
LiveQuery簡単!
self.liveQuery = [[database queryAllDocuments] asLiveQuery];
[self.liveQuery addObserver:self forKeyPath:@"rows" options:0 context:NULL];
LiveQuery登録
- (void) observeValueForKeyPath: (NSString*)keyPath ofObject: (id)object
change: (NSDictionary*)change context: (void*)context
{
if (object == self.liveQuery) {
for (CBLQueryRow* row in [object rows]) {
// update the UI
[self allGet];
}
}
}
通知受け取り
13年5月2日木曜日
CouchDBとSync
NSArray *repls = [database replicateWithURL:[NSURL URLWithString:@"http://127.0.0.1:5984/testdb"] exclusively:YES];
13年5月2日木曜日
CouchDBとSync
NSArray *repls = [database replicateWithURL:[NSURL URLWithString:@"http://127.0.0.1:5984/testdb"] exclusively:YES];
まさかの1行
13年5月2日木曜日
CouchDBとSync
NSArray *repls = [database replicateWithURL:[NSURL URLWithString:@"http://127.0.0.1:5984/testdb"] exclusively:YES];
まさかの1行
しかもSync後はLiveQueryも動いてくれます
13年5月2日木曜日
13年5月2日木曜日
SQLiteと比べて Good
★ 使う手間が少ない
★ データをSQL化しなくていい
★ 動作が軽快
★ DBとのSyncがお手軽
★ LiveQueryが使える
★ NSDictionaryが返ってくる
13年5月2日木曜日
SQLiteと比べて Bad
★ コールバック式でちょっと馴染みに
くいかも
★ Viewの使い方がいまいちわからん
★ 設計の仕方もよくわからん
13年5月2日木曜日
まとめ
★ CouchbaseLiteはスマホDBの新選択肢
★ TouchDBはCouchbaseLiteへ
★ LiveQuery便利
★ Syncも簡単
★ 設計、活用法を学べば重宝しそう
13年5月2日木曜日
おまけ
13年5月2日木曜日
リアルタイムチャート
Demo
13年5月2日木曜日
Couchbaseの薄い本
この薄い本のお陰で、
サーバー初心者の僕も
リアルタイムチャート
作れました!
河村さん!どうもありがとうございました!
¥500
13年5月2日木曜日
以上
ありがとうございました
13年5月2日木曜日

さわってみよう Couchbase Lite