MongoDBを循環型キュー方式で詳しく解説
MongoDBを使う場合、一般的にコレクション内に収まるデータの量はハードディスクのサイズに依存し、ハードディスクが十分に大きければ、そこにデータを無限に追加することができるのです。
それから、MongoDBをラウンドロビン・キューとして使いたいだけで、こんな挙動を期待する場合もある。
- キューの長さを10に設定
- 1個目のデータを挿入し、1番目の位置に配置される
- 2番目のデータを挿入し、2番目の位置に配置されます。
- ...
- 10個目のデータを挿入し、位置10に配置する
- 11個目のデータを1番目に挿入し、元の内容を上書きします。
- 12番目のデータを挿入し、元のコンテンツを上書きして2番目の位置に配置します。
-
...
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は、スクリプト家の前の記事を検索してくださいまたは次の関連記事を閲覧し続け、あなたがよりスクリプト家をサポートすることを願っています!この記事で紹介されている。
関連
-
springboot + mongodbによる緯度経度座標による平坦地マッチング方式
-
mongodbデータベースの移行に伴う変更の解決策
-
MongoDB ormフレームワークの注意点と簡単な使い方
-
Navicat Premiumでmongodbと接続する詳細チュートリアル
-
mongodb フィールド値自己増殖型実装コード
-
MongoDBのloggingモジュールについて説明します。
-
MongoDBの共通データ型と基本操作
-
MongoDBの条件付きクエリとソートについて説明します。
-
MongoDB起動時の例外エラーと正しいシャットダウン方法
-
[MongoDB] 127.0.0.1:27017 への接続に失敗しました、理由。接続が拒否されました
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン