14
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

firebaseだけじゃない。MongoDBで更新された値をリアルタイムに取得する方法

Posted at

データベースの値の変更をリアルタイムに取得したい時ありますよね。例えばチャットのメッセージとか何かのログとか。

そのときに便利なのがFirebase Realtime Databaseです。
無料でも利用できて、データベースの値に追加があったり変更があったらそれを受け取ることができるNoSQLなデータベースです。

今回私は研究プロジェクトの関係で大量のリクエストが発生する問題がありました。
Firebaseだと保存容量が無料枠に収まらない可能性もあり、もともとログ保存用に立っていたMongoDBサーバーでリアルタイムに値を取れないか試してみました。

Change Streamsを使う

Change Streams
MongoDB3.6以降の機能にChange Streamsというものがあります。
これはデータベースに追加された値をストリームで受け取れる機能です。

以下のような簡単なコードでリアルタイムに値を取得することができます。

from pymongo import MongoClient

client = MongoClient('localhost', 8001)
db = client['db']
collection = db['logs']
st = collection.watch()
while True:
    print(next(st))

collectionに.watch()をしてあげるだけです。こんなに簡単にできてしまいます。

ただ、この機能はレプリケーションを組んでないMongoDBサーバーだとエラーになってしまいます。
データベースのリアルタイム処理では一貫性を保つことが重要なためです。

MongoDBでレプリケーションの構築

MongoDB で 2台構成 の レプリカセット を 構築する 方法
このブログがとても詳細にわかりやすく載っているためここでは省略します。

まとめ

レプリカセットさえ組んでしまえば非常に簡単にリアルタイムに値の取得をすることができますね。
とくにMongoDBのようなNoSQLデータベースはテーブルを組まないため、ログのような即時性が必要なデータとの相性が良いので、このような機能は大変便利だと思います。

14
10
0

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
  3. You can use dark theme
What you can do with signing up
14
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?