スクリプトのお勉強 技術

Python3でMongoDBを使ってみる(MongoEngine)

投稿日:

仕事している過程で、ふと疑問に思うことがありました。非同期についてです。

非同期問題を解決する方法はたくさんあると思いますが、MongoDBで解決できるのかが気になったので
試してみました。

非同期問題とは

ここでの非同期問題とは、例として、2プロセスがディレクトリにあるデータを操作することを考えます。

  • Aプロセスでデータを新規書込/削除
  • Bプロセスでデータを読込/追記

の場合、以下の問題が考えられます。

  • Aプロセスが削除したデータをBプロセスが読込、あるいは追記する
  • Bプロセスが追記したデータをAプロセスが上書きする

ことが生じます。

いずれも操作対象オブジェクト一覧をロックしようがないためです。

さて、MongoDBで同様のことを処理するとどうなるか?を試してみました。

テスト環境

使用した環境は以下です。

  • WSL2 (Windows 10)
  • ubuntu 22.04(LTS)
  • Python 3.10.2
  • MongoDB 7.0.5

MongoDBのインストール

https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/#install-mongodb-community-edition

systemdではなく手動で起動しました。

$ sudo apt-get install -y mongodb-org
$ sudo mongod

テストコード

ここのような実装をしてみました。

MongoDBのアクセスはMongoEngineを使用しています。

各プロセスは以下を行います。

プロセスA

  • User(MongoDBではCollection)を生成
  • 乱数によりデータ新規or追記、あるいは削除

プロセスB

  • 全Userデータを取得し、乱数により追記

条件付きでエラーを防げる

各プロセスで以下のように一覧取得後(User.objects)にデータが削除された場合、e_idがNoneになるようです。

for u in User.objects:
...
    if not u.e_id:   <--- 一覧として取得してるはずなのにデータがない
        continue

結論: MongoDBを使用すると条件付きで非同期処理が可能

ということで、実装次第で「非同期処理」が可能なようです。

参考

https://mongoengine-odm.readthedocs.io/apireference.html
https://docs.mongoengine.org/projects/flask-mongoengine/en/latest/session_interface.html
https://qiita.com/key/items/b3894c64161a02d10649

-スクリプトのお勉強, 技術

執筆者:

関連記事

SPAMチェック for OCN の開発

前回、Thunderbirdプラグインの概要を書いたので、今回は開発したプラグインについて書きます。 SPAMチェック for OCNとは 以下の機能を持ったThunderbirdのアドオン(プラグイ …

MySQL for windowsでwordpress DBを再現する

はじめに 本当は、今はやりの生成AIとして、LLM(ローカルAPI)とMySQLのMCP Serverを使用してチャットシステムを作ろうと思ってました。 でも、その前に、そもそもLLMの対象となるMy …

seaborn + Pandas + Python によるグラフ描画(その1: 準備編)

グラフ描画してみよう 今現在の仕事で、グラフ描画する可能性があるので、少し練習してみようと思います。 題材について 突然ですが、私は確定拠出型年金に加入しています。証券会社はSBI証券 にしています。 …

Vue.jsをbetter jQueryとして使う!FastAPI+Vue.jsと生成AIで作る住所録アプリ

昔あるところに。。 昔、jquery全盛で、Vue.jsが出てきたすぐに「これはjqueryを駆逐できるかも」と思ってjqueryの実装をVue.jsに変えようとしたことがあります。 結局全部を変えた …

no image

GLP-1 メディカルダイエット 58日目

メディカルダイエットして58日目の記録をしておこうと思います。 9回目。 今回は左腹(中部)に打ちました。痛いのはいまだに慣れない。。 土曜にゲットしてした 渋谷に行ってきたが、そこの医院には相変わら …

    google オプトアウト Click here to opt-out.