リアルタイムとバッチの違い

昨日、分散DB本読書会のあとに品川のラーメン屋でリアルタイムとは何ぞや〜みたいな話になった。自分の思いついたポエムをここに書いておこう。現場の問題とはあまり関係がない。

Stream Data Processing: A Quality of Service Perspective (Advances in Database Systems)という本によれば、DSMS (Data Steram Management System) とDBMS (Database Management System)の違いは、クエリを発行するデータ集合の性質にある。つまり、DBMSは今ある有限のデータに対して操作を行うための仕組みで、DSMSはこれからやってくる無限のデータに対して操作を行うための仕組みと定義されていた。このDSMSというやつは、古式ゆかしいストリーム処理システムのことで、まあいわゆるCEPとかの元になったものである。もうひとつ、DSMSではデータは永続的ではない。クエリが永続的なものであり、先に決まってなければならないというところくらいがポイントだろうか。

この違いがお分かりだろうか。昨今、何とかというシステムがストリーム処理だの、リアルタイムだとオンラインだの、挙句の果てにマイクロバッチとかミニバッチという言葉が出てきて、さらにはバッチなのにレイテンシが100ms以内だとかどうとか、紛らわしいにも程がある。

そういうわけで、データベースの世界でリアルタイムとかバッチに一番関係あると思われる話がこれだ。そもそもリアルタイムという言葉をデータベースに持ち込むこと自体が間違っていて、本来データベースの世界にそういう言葉はない。バッチという言葉はたまに出てくるけど、テクニカルタームとしてではないと思う。あったら文献おしえてください。

そこさえ抑えた上で個別のシステムの主張と仕組みを理解していけば、混乱することはないだろう。

もうひとつのリアルタイムとしては、クラシックなリアルタイムOSの文脈がある。これは、ある処理に対して一定時間内に必ず結果を返すというものだ。上記の通り、この定義が頭にある人ほどデータ処理の世界にその言葉を適用しようとして混乱するだろう。だけど、ノリでみんな「自分たちのビジネスで影響がない程度のレイテンシで結果が返ってくる」という意味で言ってるだけで、コンピュータサイエンスの文脈には全く関係ないので混同しないように。

Stream Data Processing: A Quality of Service Perspective (Advances in Database Systems)

Stream Data Processing: A Quality of Service Perspective (Advances in Database Systems)

余談だがDSMSの「ストリームに対してクエリをかける」というのは、Pushされてくるデータに対してPassiveにプログラムを実行するという意味で昨今のリアクティブプログラミングに似ていると思うのだが、私のリアクティブプログラミングの理解は合ってるだろうか。