web-dev-qa-db-ja.com

実稼働データに対して開発するのは悪いことですか?

生産データに対して開発することは悪い習慣であり、現在、 Dev> Stage> Production モデルに移行している最中であることを常に聞いています。私は彼にまだ実稼働データを直接操作させたくありません。

しかし、私は長い間頭を悩ませることなく本番データを直接扱ってきました。ただし、あちこちに忍び寄るいくつかのエラー、つづりの問題、悪い代替テキスト、間違った場所を指しているリンクなどを除きます。これは、ライブデータを操作するためではなく、私の側のピアレビューの不足によるものと思われます。

では、なぜライブサイトでの開発がそれほど悪い習慣なのでしょうか?

10
plntxt

開発中に、既存のデータベーステーブルでINSERTまたはUPDATEを含むSQLコマンドを実行している場合、それらのデータベーステーブルがミッションクリティカルであるというリスクがあります。

一部の場所では、たとえば週に1回、または開発者の要求に応じて、一定の間隔で本番データを開発データベースに同期するため、新しいデータを開発できます。

しかし、実稼働データが現在の作業から危険にさらされていない場合、たとえば、単にデータのビューを開発しているだけの場合、通常は大した問題ではありません。現在、テーブルスキャンを実行するレポートを実行している場合、テーブルをロックする可能性があり、既存のユーザーが影響を受けます。

このような場合は、データベース管理者に任せます。「公式」のDBAがいない場合は、慎重になります。自分でも、開発データベースを作成するのは簡単です。チームにとってそれは重要です。それに失敗すると、1つのデータベースのみを保持することに固執した場合、開発データベーステーブルの前にDEV_を付けて、少し気分を良くすることができます。はい、それはいくつかのコード変更を必要としますが、開発中に開発中にいくつかの変数を追加する$debug = trueなどは、通常努力する価値があります。

これにアプローチする多くの方法。それはあなたの状況に大きく依存しています。

17
artlung

実稼働サーバー上の実稼働データに対して開発する必要はありません。いくつかの大きな理由があります。

  1. 開発は生産ボックスを遅くし、脆弱性を作成します。コンピューターのロックを解除したまま放置するとどうなりますか?
  2. 間違えた場合、あなたのサイトを訪れた人はそれを見ることができます。
  3. データベースのトランザクション内で何らかのデータ更新を行い、すぐにコミットしない場合、またはトランザクションが完了するまでに時間がかかる場合は、関係するすべてのテーブルにロックをかけ、タイムアウトが発生する可能性があります。
  4. 一部のデータベースシステム、特にSQL Serverは、SELECTステートメントだけでテーブルロックを行うことがあります!つまり、意図せずにサイトのタイムアウトやエラーページをユーザーに与えることができます。

可能であれば、ライブボックスで開発作業を行うことはありません。最善の策は、データベースとページのバックアップを作成し、コピーを操作してから更新をプッシュすることです。私を助けてくれたツールの1つがMsftのSyncToyです。

11
Ben Hoffman

さて、あなたは本当にデータを台無しにすることができます。 where句を省略することを想像してください。 1時間ごとのバックアップがある場合でも、修正するのは苦痛です。

7
Echo

実稼働データを使用できる場合は、テストに使用するのが妥当ですが、そのデータのコピーを含む別のテストデータベースを使用します。そうしないと、少数の「blabla」テストレコードでは多くのことが機能しますが、実際のシナリオでは機能しません。

また、ライブの実稼働データで開発する場合は、マーフィーの法則「間違っている可能性のあるものはすべて間違っている」を覚えておいてください。

3
devmake

シートベルトなしで運転しない場合は、生産データに基づいて開発しないでください。安全性の問題です。

3
MrChrister