couchbase meetup 11/19

16
Couchbase Lite Primer and Example Jim Borden 10/29/13

Upload: jim-borden

Post on 13-Jul-2015

94 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Couchbase Meetup 11/19

Couchbase Lite Primerand Example

Jim Borden

10/29/13

Page 2: Couchbase Meetup 11/19

自己紹介

• 2009年8月に来日。2011日7月から株式会社想通に入社し、モバイルアプリを開発(iOS・Android・WinRT)

• 2015年1月にCouchbaseに入社する予定、Couchbase Lite .NET開発。

• 一応、日本語が話せる^^

Page 3: Couchbase Meetup 11/19

Recipe Manager

• カロリーや栄養を管理したいけど、毎回いちいち入力する

のは面倒。

• レシピの食材は固定なので、何かできないか。

Page 4: Couchbase Meetup 11/19

DEMO

Page 5: Couchbase Meetup 11/19

ご覧くださいソースを全部公開しましたので、以下のURLをご参考にも

https://bitbucket.org/borrrden/recipemanager/

Page 6: Couchbase Meetup 11/19

使ったデータの説明

• Ingredient(食材)が基本の単位。これに対してたんぱく

質、炭水化物などの栄養情報。

• Recipe(レシピ)はIngredientを集めた単位。

• Meal(食事)はRecipeを集めた単位。

• Ingredientの全ての栄養情報を計算する。

Page 7: Couchbase Meetup 11/19

Couchbase Liteの基本

• 「どこでもJSON」。データの形は事前に決める必要ない

• 検索はすべてMap(選択)とReduce(統計集成)

• ローカルのみでも、Couchbase Serverとの同期でも

• iOS・Android・.NET (Xamarin)・Java・PhoneGap

• オープンソースで、無償で使っていただける

Page 8: Couchbase Meetup 11/19

Mapの例CBLManager *manager = [CBLManager sharedInstance];

CBLDatabase *db = [manager databaseNamed:@"recipemanager" error:nil];

CBLView *ingredientView = [db viewNamed:@"ingredients"];

[ingredientView setMapBlock:^(NSDictionary *doc, CBLMapEmitBlock emit) {

if([doc[@"type"] isEqualToString:@"ingredient"])

emit(doc[@"_id"], nil);

} version:@"1"];

{

“name”: “apple”,

“type”: “ingredient”

}

[

{

“id”: “a8gehwdw8”,

“key”: “apple”,

“value”: null

},

]

• 条件を果たしたデータや、データの部分を取得する

Page 9: Couchbase Meetup 11/19

Reduceの例^id(NSArray *keys, NSArray *values, BOOL rereduce) {

if(rereduce) {

return @(values.count);

} else {

NSUInteger sum = 0;

for(NSNumber *val in values)

sum += [val unsignedIntegerValue];

return @(sum);

}

Page 10: Couchbase Meetup 11/19

ForestDBの紹介

• Couchbaseが開発したデータベース

ライブラリー

•サーバーも実装予定

• Recipe Managerは使っている

https://github.com/couchbaselabs/forestdb

Page 11: Couchbase Meetup 11/19

ForestDBを作った理由

• Apache CouchDBはモバイルでは重すぎるので、別のソル

ーションが必要

• しかし、開発するのに時間かかるからとりあえずSQLite

• サーバーの方でErlangのファイルIOがネック

• 統一すれば、両方にForestDBの改善が自動的に入る

Page 12: Couchbase Meetup 11/19

ForestDBのタイムライン

• 2011年:基本になるデータストラクチャーがKAIST学院のアン・ジョンサン氏によって考え出される

• 2013年:同氏がCouchbaseのインターンシップでForestDBライブラリーを開発

• それ以降:Couchbaseで改善され、CBForestライブラリー(C++)によって機能を追加し、モバイルプラットホームに提供

Page 13: Couchbase Meetup 11/19

ForestDBのメリット

• より分かりやすいソース

• 結構な速度UP

• Liteもサーバーも使うため、改善は両方に入る

• SQLiteのネックと不相性が解放される(特にAndroid)

Page 14: Couchbase Meetup 11/19

Performance

14

0

1000

2000

3000

4000

Populating DB Indexing (compound keys) Query with grouping

Docum

ents

/sec

SQLite (CBL 1.0.1) With ForestDB

Data set: iTunes library, 12189 documents(higher is better)

Page 15: Couchbase Meetup 11/19

さて、どうやって使える?

• Couchbase Liteのforestdbブランッチ

$ git clone https://github.com/couchbase/couchbase-lite-ios

$ cd couchbase-lite-ios

$ git checkout forestdb

$ git submodule update --init --recursive

Page 16: Couchbase Meetup 11/19

ご清聴ありがとうございました!

Questions?

スライドのダウンロード:http://www.slideshare.net/borrrden/couchbase-meetup-1119