sql >> データベース >  >> RDS >> Mysql

SerialBlobとbyte[]の使用

    あなたは正しいですSerialBlob byte []の周りの単なる抽象概念です 、しかし:

    • チームで働いていますか?
    • 時々間違えますか?
    • コメントを書くのが面倒ですか?
    • 1年前のコードが実際に何をしているのかを忘れることがありますか?

    上記の質問のいずれかにはいで回答した場合 、おそらく SerialBlob

    これは、単純なデータ構造に関する他の抽象化と基本的に同じです( ByteBuffer を考えてください)。 、たとえば)または別のクラス。 byte []で使用したい 、理由:

    1. それはより記述的です。 byte [] ある種のキャッシュ、循環バッファ、ある種の整合性チェックメカニズムが間違っている可能性があります。ただし、 SerialBlobを使用する場合 、これがデータベースからのバイナリデータのブロブ/データベースに保存されることは明らかです。

      手動で配列を処理する代わりに、クラスでメソッドを使用します。これも、コードがわからない場合に読みやすくなります。些細な配列操作でさえ、コードの読者が理解する必要があります。良い名前のメソッドは自己記述的です。

      これは、チームメートにとっても、このコードを1年以内に読むときにも役立ちます。

    2. それはよりエラーの証拠です。新しいコードを書くたびに、バグを犯した可能性が高くなります。最初は見えないかもしれませんが、おそらくそこにあります。 SerialBlob コードは世界中の何千人もの人々によってテストされており、それに関連するバグは発生しないと言っても過言ではありません。

      バイト配列が正しく処理されていると確信している場合でも、それは非常に単純なので、他の誰かが半年以内にコードを見つけて「最適化」を開始した場合はどうなるでしょうか。彼が古いブロブを再利用したり、魔法の配列のパディングを台無しにした場合はどうなりますか?インデックス操作で1つずつエラーが発生すると、データが破損し、すぐには検出されない可能性があります( ユニットテストを書いていますね。)

    3. それはあなたをほんの一握りの可能な相互作用に制限します。これは実際にはデメリットのように見えるかもしれませんが、そうではありません!これにより、完了後にBLOBをローカル一時変数として使用しないようになります。 Stringを作成しようとしないようにします それからまたは愚かな何か。ブロブとしてのみ使用するようにします。繰り返しますが、明快さと安全性。

    4. すでに書かれていて、いつも同じように見えます。プロジェクトごとに新しい実装を作成したり、10の異なるプロジェクトで10の異なる実装を読み取ったりする必要はありません。 SerialBlobが表示された場合 誰のプロジェクトでも、使用法はあなたに明らかです。誰もが同じものを使用します。

    TL; DR: 数年前(またはまだCのまま)、 byte []を使用 大丈夫だろう。 Java(および一般的なOOP)では、プリミティブ(低レベル)構造ではなく、ジョブ用に設計された特定のクラスを使用してみてください。これにより、意図がより明確に記述され、エラーが少なくなり、長期的にはコードの長さが短くなります。 。




    1. 日付が UNIX タイムスタンプとして表されている場合に、Oracle で 2 つの日付の最小差を選択する

    2. HTMLをMySQLデータベースに保存する

    3. Postgres階層(jsonb)CTEが不必要に遅い

    4. AzureSQLデータベースの帯域幅に適したクエリプロファイリング