search
LoginSignup
1
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Milkcocoa Advent Calendar 2016 Day 12

posted at

Milkcocoaデータストアのメソッドを理解する

自主的に、UWP/.NET Frameworkで使えるMilkcocoa Libraryを書いている人です。

Milkcocoaって何?

Milkcocoaサイトから引用。

自前でサーバを準備せずクライアントSDKを介してデータの保存、更新、取得またPub/Sub通信を行うことが出来ます。

わたしは、次のように解釈しています。

  • Milkcocoaサイトでポチポチするだけで、自分でサーバを用意しなくても、データストア(データを保管する場所)を設置できる。
  • Arduino, ESP8266, mbed, JavaScript向けにSDKが提供されており、これらを使うことでサーバとの通信コードをゴリゴリと作らなくても、Web上にあるMilkcocoaのデータストアデータの追加、変更、削除、送信や、データの取得ができる。
  • Pub/Subモデルになっており、データが保存されたときに(ほぼ)即時に通知することも可能。

他社でも似たようなサービスがありますが、他と比べてデータストア作るまでの手順やSDKがシンプルなので、初めてインターネット上にデータを保管したいといったときにオススメですね。

脳内イメージ

わたしはMilkcocoaを使うときに、次のようなイメージで全体を捉えているというか考えているというか把握しているというか。

  • アプリによって、やりたいことが「データを操作する」「データを取り出す」のどちらか、もしくは両方。
  • 「データを操作する」手段は、追加・変更・削除・送信がある。手段によって、データストア要素をIDで指定が必要。
  • 「データを取り出す」手段は、取得がある。また、データ操作を即時に知る手段として通知がある。

image.png

データストアのメソッド

手段に応じた、データストアのメソッドが用意されています。

「データを操作する」は、スイッチ押したらデータ追加するとか、定期的に温度をデータ追加する、といったシナリオが多いと思います。
そのような場合は、pushやsendを使います。通知オンリーの場合はsend、保管と通知の場合はpushです。

使用頻度 手段 メソッド ID指定 説明
追加 push データを追加する。
変更 set 必要 データを変更する。
削除 remove 必要 データを削除する。利用非推奨。
送信 send データを通知する。データストアに保管しない。

「データを取り出す」は、スイッチを押したら即座に表示するとか、溜まっている温度データをグラフ表示する、といったシナリオが多いと思います。
即座に表示するだけであれば、onを使います。
溜まっているデータを表示するのであれば、streamを使います。
(ほとんどの場合はコレですが)溜まっているデータを取り出した後、即座の変化にも対応するには、streamとonの両方を使います。

使用頻度 手段 メソッド ID指定 説明
取得 get 必要 データを取得する。
取得(複数) stream 複数データを取得する。
取得(複数) history 複数データを取得する。
通知 on データの通知を受け取る。

プログラム

「データを操作する」は、

push
push
push
...

ひたすらpush。(データストアに保管しないときはsend)

「データを取り出す」は、

stream
on

溜まっているデータを取り出して処理した後に、通知が来たら処理します。
(細かいことを言えば、streamで取り出している最中にデータが追加されたのはどうするの?とかありますが、そこはスルーでw)

具体的なコードは、CHATサンプルのソースが参考になります。

        //3."message"データストアからメッセージを取ってくる
        ds.stream().sort("desc").next(function(err, datas) {
            datas.forEach(function(data) {
                renderMessage(data);
            });
        });

        //4."message"データストアのプッシュイベントを監視
        ds.on("push", function(e) {
            renderMessage(e);
        });

最後に

Milkcocoa SDK for UWP and .NET Frameworkを作っているときに「溜まっているデータを取り出して処理した後に」の必要性には気づいていたのですが、、、

image.png

streamが実装されていないという失態orz

えー、言い訳しますと、historyがいるよね!と思い、そっちを実装したのですが、最近、historyじゃなくstreamの方が使いやすいという、勘違いに気づきました。
早々に実装しますので、しばらくお待ちを。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1
Help us understand the problem. What are the problem?