質問: きわめて初歩的な質問と思います。 多少ぼかして質問させて頂きますが、ご了承ください。 多数(数万または数十万単位。数は固定ではない。途中で電源ONまたはOFFされる個体もある。)の デバイスがあって、それの状態が秒単位でリアルタイムに刻々と変化しているとします。 (流行りのIoT的な、いろんなところにある同種デバイスの状態をサーバで管理する、というイメージです) サーバにてそれらの状態を追跡する時、どのようなデータ構造が適しているでしょうか。 最初はデータベースを使うのかと思いましたが、別の方から 「データベースはもっと静的なデータの管理に使うものであって、刻々と変化するデータに使うものではない」と 指摘を受けました。 かといってプリミティブな配列構造を使うものではないと思います。 不勉強で恐縮ですが、アドバイス頂けると幸いです。宜しくお願い致します。
回答: #### はじめに まず最初に数万または数十万単位のセンサの情報をそれぞれデータベースに毎秒入れるのは現実的ではありません。おそらくデータベースの処理速度が追いつかなくて詰まると思います。 そこで、私の知っている中でIoT関係のビックデータ処理として有名なのがMicrosoft Azureのサービスを使用したシステム構築です。AzureとはMicrosoft社が提供しているクラウドサービスで様々な機能を持ったサービスを使用することができます。その中から * Event Hubs * Stream Analytics * Power BI を使うと構築できると思います。質問の追加でコメントいただきました要件より、データの保存はせず、現時点での値を確認できるのみという構成で説明します。 #### Event Hubs Event Hubsはセンサ情報をリアルタイムに収集するサービスです。エンドポイントをインターネット上に作成し、そこにセンサ値をつけてアクセスするとセンサ値を抜き出して集めてくれます。このサービスが優れているところは毎秒数百万件のイベントを処理できることです。これを使用すれば質問にあるような数十万単位のセンサが発するイベントの第一次の受け口になります。 Event Hubs #### Stream Analytics Stream AnalyticsはEvent Hubsで収集した情報を整形(クレンジング)して次の段階へ渡します。Event Hubsでは数十万のデータが毎秒発生しますが、その発生したデータにはいらない部分やデータ形式を変えなければならない部分などが含まれることが予想されます。それをクレンジングするのがStream Analyticsの役割です。このサービスのメリットはEvent Hubs同様毎秒数百万件のイベントを処理できることに加え、整形をSQL文に似た構文で行えることです。質問者様はデータベースで管理することを思いつかれましたことからデータベースを使用したことがあると勝手に推察いたしますと、これもメリットになると思います。 Stream Analytics #### Power BI Stream Analyticsで整形したデータを表で数十万行表示させられても見るに耐えません。そこでデータの表示方法が重要になるかと思います。その際におすすめしたいのがPower BIです。厳密にいうとPower BIはAzureのサービスではなく、Office 365のサービスなのですが、基本機能は無料で使用できます。このサービスは動的なExcelといったイメージです、グラフやメーターなど様々な形式でデータを表示できます。これの優れているところはリアルタイムにデータの更新と表示が行えるところです。このPower BIもEvents Hubsと同じようにエントリポイントを作成し、そこにデータをつけてプッシュするとPower BI内で自動的に描画されます。これにより、毎秒変わるデータを自動でリアルタイムに更新、描画することができます。 Power BI #### 全体の構成 全体像はこの図が的確に示されています。データは左から右に進んでいきます。最初にEvent Hubsでデータをとりあえず受けて、Stream Analyticsで整理、Power BIで表示、といった構成です。図ではデータの保存にSQL、分析にMachine Learningなども描かれていますが、データ保存の必要がないので使用しなくて良いと思います。 #### 最後に Azure はここでは書ききれないくらい多くのサービスがあり、今回紹介したサービスも他に機能が沢山あります。この方式の採用を検討されるようでしたら、サービス名を入れて検索すると様々な情報がでてくると思います。 回答になったかわかりませんが、問題解決の一助になれば幸いです。