1. ホーム
  2. データベース
  3. モンゴルディーブ

MongoDBを循環型キュー方式で詳しく解説

2022-01-20 03:33:07

MongoDBを使う場合、一般的にコレクション内に収まるデータの量はハードディスクのサイズに依存し、ハードディスクが十分に大きければ、そこにデータを無限に追加することができるのです。

それから、MongoDBをラウンドロビン・キューとして使いたいだけで、こんな挙動を期待する場合もある。

  1. キューの長さを10に設定
  2. 1個目のデータを挿入し、1番目の位置に配置される
  3. 2番目のデータを挿入し、2番目の位置に配置されます。
  4. ...
  5. 10個目のデータを挿入し、位置10に配置する
  6. 11個目のデータを1番目に挿入し、元の内容を上書きします。
  7. 12番目のデータを挿入し、元のコンテンツを上書きして2番目の位置に配置します。
  8. ...

MongoDBにはキャップドコレクションという、まさにそれを実現するためのコレクションがあります。

通常のコレクションは前もって作成する必要はなく、MongoDBにデータを挿入すれば自動的に作成されます。キャップドコレクションは、あらかじめコレクションをキャップドタイプとして定義しておく必要があります。

構文は以下の通りです。

import pymongo

conn = pymongo.MongoClient()
db = conn.test_capped

db.create_collection('info', capped=True, size=1024 * 1024 * 10, max=5)



パラメータ capped=True は、このコレクションがキャップド・コレクションであることを示し、そのサイズを 10MB に制限します。

作成されたキャップド・コレクションの挿入とクエリ操作は、通常のコレクションと全く同じである。

col = db.info
for i in range(5):
  data = {'index': i, 'name': 'test'}
  col.insert_one(data)


ここでは5つのデータを挿入し、結果は次の画像のようになりました。

ここで、インデックス0を持つこのものが最初に挿入される。

次に、別のデータを挿入します。

data = {'index': 100, 'name': 'xxx'}
col.insert_one(data)


この時点で、データベースは次のようになります。

インデックス0のデータが最新のデータで上書きされていることがわかります。

もうひとつデータを挿入して見てみましょう。

data = {'index': 999, 'name': 'xxx'}
col.insert_one(data)


実行結果は、以下の画像のようになります。

ご覧のように、インデックス1のデータも上書きされます。

このようにして、循環型キューを実装しました。

MongoDBはキャップドコレクションに対して特別な最適化を行っているので、通常のコレクションよりも高速に読み書きができます。

しかし、キャップド・コレクションには欠点もあります。MongoDBの公式ドキュメントに記載されています。

<ブロッククオート

更新や置換操作によってドキュメントのサイズが変更された場合、その操作は失敗します。

<ブロッククオート

キャップされたコレクションからドキュメントを削除することはできません。コレクションからすべてのドキュメントを削除するには、 drop() メソッドを使用してコレクションを削除し、キャップされたコレクションを再作成してください。

つまり、キャップされたコレクション内の各レコードは更新できますが、更新によってレコードのサイズを変更することはできず、更新は失敗します。

キャップド・コレクションの行を個別に削除することはできません。コレクション全体として削除し、再構築することしかできないのです。

まとめ

この記事は、巡回型キューとしてMongoDBに導入され、より関連する巡回型キューコンテンツとしてMongoDBは、スクリプト家の前の記事を検索してくださいまたは次の関連記事を閲覧し続け、あなたがよりスクリプト家をサポートすることを願っています!この記事で紹介されている。