2011-12-07 1 views
1

これはJavaとMySQLの両方を含む設計上の問題です。マルチブール論理フラグとJavaとMySQLの多重整数(ビット)の効率

クライアントは、既存のクラス/テーブルの新しい情報を追跡するために、14個のブール型フラグ(T/F)を追加する必要があります。

これらのフラグを既存のテーブルに追加することができます。または、このデータ用に新しいクラスとテーブルを作成することができます。既存のテーブルに14個のブール型フラグを追加すると、かなりの数の属性が与えられます(特に、フラグの数が時間的に増加する場合)。新しいクラス/テーブルを作成することはよりクリーンですが、この場合は本当に必要ですか?

代わりに、マスクを使用して16ビット整数を使用してデータを多重化した後、既存のクラス/テーブルに1つの変数のみを追加しています。

私の主な質問は、MySQLデータベースに14個のブール型変数を格納し、それらをクラスにロードする方が効率的か、それとも単一の整数を格納して(Javaでは)ビット操作(つまりマスク)を使用していますか?

2番目の質問では、個々のフラグが効率的であれば、1つのテーブルに多数の属性を持たせるか、分割する方が良いでしょうか?すでにかなりの数のエンティティがあるテーブルにたくさんのブール値フラグを格納する場合のペナルティは何ですか?

主な質問の回答が「整数+多重」の場合、2番目の質問は疑問になります。

ありがとうございました。

-R

+0

私はブール型を使用できませんでした。クライアントは、複数の選択肢が必要となるように仕様を変更しました。クラスでint []配列を使用して終了し、次にint []から単一の文字列に変換して戻します。インターフェイス要件のために、文字列をデータベースに格納します。かなりうまく動作します。 – Huntrods

答えて

1

を見てみましょう。これは、フラグをエミュレートする最も良い方法です。これは、設計上ははるかに明確で、intとほとんど同じパフォーマンスを持ちます。 intに簡単に変換できます(データベースへの読み込み/読み込み)。詳細については、「効果的なJava」ブック、「EnumSet」の章を参照してください。

0

第一の質問では、より効率的なものは何が良いのかを尋ねます。これは答えを複雑にします。

開発者とDBAの観点からは、単一の列を持つ方が効率的です。予備の場所とマスクを使用するため、挿入と更新のパフォーマンスが向上します。

ビューアナリストの観点からは、別の列がより効率的なソリューションであり、各列には特定の役割があります。私はマスク を好む私のあちこちに進むにつれ

- レコード に変更 - より良い管理を(限られた整数の容量がここに危険である)

3

私は個人的には別々の列を持っているのが好き。私がマスキングすると考える唯一の場所は、データベースやアプリケーションが極端な条件下で実行されている場合や、メモリやスペースの使用が重要な低メモリやストレージデバイスで実行されている場合です。

1つのスペースは、クラス/テーブルが巨大なボリュームに拡大する可能性がある場合を除き、考慮しないでください。 ブールフラグをシミュレートするには、小さなint(1)で十分であり、必要なのは0/1の値だけです。

2テーブル上でクエリを実行したい、またはテーブルを使用してレポートを書きたいと思っている人にとっては、はるかに難しくなります。クライアントがデータベースにアクセスする場合は、ほとんどの場合、マスキングが受け入れられないと確信しています。

3 - 彼らが必要とされるときには、(データベースに基づいて)すべてで可能になります場合はより多くの作業とすべきではない多くのコードを書く

4-、この列に索引を作成するためにはるかに困難になります問題。あなたはもっと今働いていますが、将来はあまり働かないでしょう。それはプログラマーのためのより少ない仕事だと思って/ dbaはまさにイリュージョンIMHOです。

a-コードを維持してデータベースクエリを書き込むことは難しくなります。多分あなたは今あなたのJavaコードのすべてを行うが、あなたは未来が何を保持するか決して決してわからない。

構造変更がより困難になります。顧客が2つのフラグを削除して4を追加する必要がある場合はどうなりますか?削除されたフラグを保持していた元の2ビットをデータベースに保持し、4ビットを追加しますか? 2つの新しいフラグのためにそれらを使用し、2つのビットを追加しますか?すでに書かれているコードにどのような影響を与えますか?すべての場所を追跡して実際にコードを変更するのはどれほど簡単でしょうか?

小さなアプリケーションでは、これは大きな問題ではありません。アプリケーションは時間とともに成長します。テーブルが広く使用されるようになると、これは非常に危険です。 7番目と8番目のフラグで作業していたコードが削除され、そのコードが削除され、同じ場所を再利用するように決定された場合、7番目と8番目のビットにアクセスするために使用されたコードは、 )それが気づかれるまで。問題が発見されて修正されるまでは既に有害なことが起きる可能性があります。別の列があり、それらをドロップした場合、その列がそこには存在しないため、そのコードの最初の使用時にエラーが表面にポップアップします。

c- dbaのデータをアップグレードしたり、構造を変更するスクリプトを作成することは間違いありません。経験豊富なdbaは座って列名を次々と書き、スクリプトを生成するツールを使用しません。ビット操作では、彼は手作業で作業し、様々な選択/更新で彼が作成する表現を間違えないでください。

5つ以上はデータベースに関連しています。アプリケーションに達すると、あなたは無料です。 データベースから16個のフラグを読み取り、整数を生成することができます。コードはビット操作を使用でき、時間を節約することができます。私は個人的には、あまりにも良いことではないが、とにかくそれをあなたが選んだのも良いと思う。

私は集中していないと私は知っている私はこことそこに繰り返されている可能性があります。しかし、私は、あなたがあなたの事件のために正しい選択をするのを助ける長期的な考慮事項を見て、あなたを助けることができたことを願っています。

関連する問題