4

私はMongoDB自分のデータベースとして使用しており、初めてのバックエンド開発者として、データベース/コレクション全体を簡単に削除できることに本当に悩まされています。

入力するだけdb.collection.remove()で、そのコレクションからすべてのレコードが削除されます。

効果的なバックアップ戦略によってこれが問題にならないことはわかっていますが、ときどきいくつのコレクションで実行.remove()することがあります。誤って間違ったコレクション名を入力して (a) バックアップの復元を行う必要があるのは嫌です。 (b) 特にアプリが大量のユーザー データを収集するため、バックアップと復元の間に収集したデータが失われます。

データベースを使用するように設定できる「セーフガード」はありますか?

"Yo, are you sure you want to remove everything from <collectionname>?選ぶ:Yes/No"

4

2 に答える 2

4

ユーザーの役割では問題は解決しません。アカウントに 1 人のユーザーを削除する権限がある場合、誤ってすべてのユーザーを削除してしまう可能性があります。アカウントに 1 人のユーザーの属性を更新する権限がある場合、誤ってすべてのユーザーを更新する可能性があります。

ただし、これには簡単な修正があります。

ステップ 0:データベースをバックアップします。また、バックアップを定期的にテストしてください。また、バックアップが実行されなかった場合やエラーが発生した場合にアラートが表示されるようにしてください。レプリカ セットはバックアップではありません。私はこれが明白であることを知っていますが、明らかにそれは誰にとっても明らかではありません.

ステップ 1:データベース用のWeb 管理GUI インターフェースを作成します。これには 1 日か 2 日しかかかりません。また、秘書やインターンがデータを心配することなく使用できるほど簡単なはずです。(時間がかかると思われる場合は、より多くの機能を備えたフレームワークを見つけてください。管理コンソールは、アプリと同じ言語で記述する必要さえありません。)

ステップ 2:データの移行 (データベースのメンテナンスの変換) は、常にソース管理にチェックインされたスクリプトから実行し、事前に非本番環境でテストする必要があります。スクリプトは のように単純なものmongo -e "foo.update(blah)"でもかまいませんが、切り貼りエラーを避けるためにスクリプトとして実行する必要があります。理想的には、すべての移行のチェックリストを作成することもできます。(最近のバックアップがあることを確認してください。事前にデータベース ログとシステム負荷を確認してください。移行が成功したかどうかを示す前後のクエリを記述してください...)

ステップ 3:これで、本番の Mongo コンソールを使用する必要がなくなりました。だからしないでください。これは開発用の便利なツールですが、ローカルの開発データベースでのみ必要です。

上記のロールは、読み取り専用クエリに役立つ場合があります。ただし、非マスター レプリカ セット メンバーに対しては既にそれを行うことができます。

tl;dr:カウボーイの管理手法を使用してかなりのことを行うことができますが、最終的には、すべてを自動化する方が優れている (そしてそれほど手間がかからない) ことがわかります。

于 2013-07-27T03:43:12.030 に答える