ホーム>source

MoongoDBはNoSql時代のもので、LockはRDBMSに関連するものですか?ウィキペディアから:

ウィズウィズ

だからなぜPyMongo

Optimistic concurrency control (OCC) is a concurrency control method forrelational database management systems...

で見つけるのですか、そして非ブロッキング呼び出しを行うドライバーでも、ロックはまだ存在し、モーターは is_locked

is_locked
あなたの答え
  • 解決した方法 # 1

    MongoDBは、データベースレベルのロックシステムを実装しています。これは、ほとんどの技術者が基本的な操作のためにテーブルレベルでロックするSQLとは異なり、アトミックでない操作はデータベースレベルでロックされることを意味します。

    インプレース更新は特定のオペレーターでのみ発生します- $set  それらの1つであるMongoDBのドキュメントには、それらすべてを表示するページがありましたが、今は見つかりません。

    MongoDBは現在、読み取り/書き込みロックを実装しています。これにより、それぞれが独立していますが、相互にブロックできます。

    ロックはどのデータベースにとっても非常に重要です。たとえば、ドキュメントが現在書き込まれている場合、ドキュメントの一貫した読み取りをどのように保証できますか?また、ドキュメントに書き込んだ場合、一度にその単一の更新のみを適用し、同時に複数の更新を適用しないことをどのように保証しますか?

    バージョン管理がCouchDBでこれをどのように停止できるかわかりません。ロックは一貫した読み取りに非常に重要であり、バージョン管理とは別です。つまり、同じバージョンに読み取りロックを適用する場合、または現在実行中のドキュメントを読み取る場合新しいリビジョンに書かれた?明らかに、ロックキューが表示されます。バージョン管理が書き込みロックの飽和で少しは役立つかもしれませんが、それでも書き込みロックはあり、レベルで動作する必要があります。

    同時実行機能については、 MongoDBには、データがRAMにない場合、他の操作の操作を軽減する機能があります(1つに対して)。つまり、ロックはデータがページインされるのを待つだけではなく、他の操作もその間に実行されます。

    補足として、MongoDBには実際にはこれよりも多くのロックがあり、グローバルでブロックされているJavaScriptロックもあります。通常のロックの通常の同時実行機能はありません。

    ウィズウィズ

    うーん、「非ブロッキング」アプリケーションまたはサーバーとしての意味に混乱していると思います:http://en.wikipedia.org/wiki/Non-blocking_algorithm

  • 解決した方法 # 2

    NoSQLは自動的にロックしないことを意味しません。 ロックが必要な操作は常にいくつかあります。

    たとえばインデックスの構築

    そして、公式のMongoDBドキュメントはwikipediaよりも信頼できる情報源です(wikipediaを意図した違反はありません:))

    http://docs.mongodb.org/manual/faq/concurrency/

  • 解決した方法 # 3

    Mongoはインプレース更新を行うため、データベースを変更するためにロックする必要があります。ロックが必要なものは他にもあります。詳細については、@ Tigraのリンクを参照してください。

    これはデータベースに関してはかなり標準的であり、RDBMS固有のものではありません(Redisもこれを行いますが、キーごとに行います)。

    データベースレベルではなくコレクションレベルのロックを実装する計画があります:https://jira.mongodb.org/browse/SERVER-1240

    CouchDBなどの一部のデータベースは、新しいドキュメントを追加するだけでロックの問題を回避します。新しい一意のリビジョンIDを作成し、ドキュメントの書き込みが完了すると、データベースは新しいリビジョンをポイントします。使用するリビジョンを変更するときに何らかの並行性制御があると確信していますが、それを行うためにデータベースをブロックする必要はありません。これには、定期的に実行する必要がある圧縮など、特定の欠点があります。

    and even in driver that makes non-blocking calls

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ python - SQLクエリをdjangoクエリセットに変換する方法は?