CEDEC 2014 開催から半年ほど経過してしまいましたが
せっかくなので当時のレポートを公開しておこうと思います
概要
今年の5月にリリースされたばかりの最新技術かつモバイル初のNoSQLデータベースについて紹介します。
モバイル端末にデータを格納して、非同期でサーバとデータをやり取りするので、オフライン/オフラインに関わらず、
またネット回線が不安定な場合でもアプリユーザにストレスを感じさせることなくサービスを提供し続けることが可能です。
また、バックエンドで稼動するCouchbase Serverはダウンタイムやアプリケーションを変更することなく
クラスタの拡張/縮小が簡単に行え、Redis/TokyoTyrant/Flare等の
永続化KVSやmemcachedの代替としても利用することができます。
このセッションではモバイルとサーバを1つのソリューションとして紹介します。
アジェンダ
- モバイルNoSQL Couchbase Liteとは?
- Couchbase Liteの使い方
- Couchbase Liteを導入するにあたって
1.モバイルNoSQL Couchbase Liteとは?
-
ドキュメントベースのデータサーバ
-
CouchDBを商用化したような物
-
JSONでデータ管理が可能
-
ドキュメントベースのモバイルデータベース
-
CouchbaseとのSyncなどが簡単に行える
SQLiteとの違い
- JSON形式でのデータ取り扱い(KVS)
- スキーマレス
- SDKによりネイティブAPIで操作可能、SQLを使う必要がない
- 非同期で動作する、SQLiteは同期なので保存時になどに止まってしまう
- サーバとSyncすることがあらかじめ考慮されている、
- SyncGatewayを利用してユーザ同士のデータやり取りも可能、
モバイルサイドのエンジニアだけで実装可能
Syncについて
Couchbase ServerとSyncGatewayを利用すれば簡単にデータをSyncできる
「チャンネル」を利用し、ユーザ同士でデータのやり取りを行う事ができる
- JSON Anywhere
- JSON on the deceive
- JSON on the wire
- JSON in the cloud
動作プラットフォーム
- iOS
- Android
- PhoneGap
- Xamarin(beta)
- Microsoft.net(beta)
- Unityは開発予定?→別端末でセーブとかが楽になる
2.Couchbase Liteの使い方
iOS版のGet Startedをやってみよう(ToDo Liteを動かす)
ToDo Lite Code Tour
Developerサイトにコード解説しているパートがある
3.Couchbase Liteを導入するにあたって
データの管理方法の再認識
- 通常のテーブル型のDBと違って管理方法が変わってくる
- テーブルが存在しない
- リレーションを組まない
これがSQLiteでいうあれか?みたいな考えをしていると頭が固まって使いにくくなる
Viewの使い方を覚える必要がある
- MapReduceでデータを集めてきてそれを利用してQueryを作成する
- それを利用するための学習コストが発生する
モデル構成を考えておく
- モデルをどのように構成するかが効率化の鍵
- モデルの中にも出るクラスを指定して2重構造にすることも可能
Syncの活用
- サーバAPIを呼ぶことなくSyncできるのは大きなメリット
- 使い分けを考慮しつつ構成を考える
LiveQuery
- 特定のクエリを監視し変更が行われたときに通知を出す機能
- DBに変更があったら即反映が可能になる
- Syncと組み合わせると協力
Couchbase Server
- 単一障害点が存在しないマルチマスタ KVS
利用シーン
- モデル、セッション、レンダリングなどのキャッシュストレージとして(memchacheのかわり)
- ユーザーデータの永続か保存領域として
- Sync Gatewayを使ってスマートフォンDBのバッグエンドとして
Couchbaseの二つのストレージ
- Memcached:オンメモリKVS
- Couchbase:ディスクに保存する永続化KVS
サーバークラスタに複数のvBucketsを保持
Couchbaseを採用している企業
- 全世界で400社以上の企業で、10,000台以上の稼働実績
HA
- クラスタへの多重レプリケーション
Replication
- クラスタ内に指定した数のレプリカデータを保持し、
- ノード障害時のデーター損失を回避
- マルチマスタという
Rebalance
- クラスタに新規サーバの追加する際など、
- クラスタの構成変更にあわせ「リバランス」を行い
- 既存のデータの分散再配置を行う
- 新しく増えた1台のサーバにデータを分散してくれる
Failover
- Nodeが死亡した場合レプリカ数をKeep
- マニュアルでのNodeの新規追加、もしくは復帰により戻ってきた場合には
- 再リバランスにより、縮退運転からリカバリ
Administration
- web管理画面が存在するから楽です
- コマンドラインで管理する事もできる
- DATA BUCKETSの性能監視が可能
Sync gateway
- スマートフォンとクラスタを同期するゲートウェイ
- Sync Funtion APIsを使って動的なデータの同期を行う
- 容易な管理
- スケーラビリティ
- 開発速度を高める
- スケールによって大規模ユーザを扱うサービスをサポート
質疑応答
-
クライアント側でSyncした際にサーバ側でもSyncされるデータの形式は?
- 送られるデータも保存するデータもJSONです
- 通信時はSSLなどを使って暗号化する
-
ソーシャルゲームだとSSLで暗号化しても解析されてしまうがチート対策はある?
- あるがKVS的な使い方になる
-
保存したドキュメントのリビジョンを持っている
- バージョン管理されているので
- セーブデータが壊れたり改ざんされたりしたときに一個前のデータを取り出す事も可能
-
クライアントとの同期中にネットワークが切れたりしたらどうなる?SDKでサポート?
- ネットーワークが切れると同期されないが
送ってしまったデータがどうなるかは、サーバー側でマージが可能 - 失敗はわかる、マージはプログラマ側でコントロールする
- SDKを使っていれば意識しなくていい
- 例えば地下鉄に入ったときなど
- 同期中に切れた場合は問題ない
- 同期前に切れた場合はローカルに保存しておいて電波を発見したときに送信する事になる
- SDKでラップされているので大丈夫
- ネットーワークが切れると同期されないが