1

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

楽観的同時実行制御(OCC)は、リレーショナルデータベース管理システムの同時実行制御方法です...

それで、なぜ私はPyMongois_lockedで見つけますか、そして非ブロッキング呼び出しを行うドライバーでさえ、ロックはまだ存在します、モーターは持っていis_lockedます。

4

3 に答える 3

3

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

たとえば、インデックスの作成

そして、公式のMongoDBドキュメントは、ウィキペディアよりも信頼性の高いソースです(ウィキペディアを対象とした違反はありません:))

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

于 2013-03-23T00:17:46.627 に答える
2

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

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

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

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

于 2013-03-23T00:26:16.843 に答える
1

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

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

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

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

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

並行性機能については、MongoDBには、データがRAMにない場合に、他の操作のために操作を鎮圧する機能があります(1つ)。つまり、ロックはデータがページインされるのを待つだけでなく、その間に他の操作が実行されます。

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

ノンブロッキングコールを行うドライバーでも

うーん、「ノンブロッキング」アプリケーションまたはサーバーとはどういう意味か混乱するかもしれません:http: //en.wikipedia.org/wiki/Non-blocking_algorithm

于 2013-03-23T10:00:35.347 に答える