2012-04-26 10 views
2

私は現在、多少の広範な通信プロトコルを扱いやすいものに改造しています。これは一種の疑問な質問ですが、あなたの経験に基づいて、コードがますます大きくなるにつれてこれら2つのアイデアのどちらを維持するのが簡単です。通信プロトコルの保守性 - 重複または個々の要求?

クライアントとサーバーがあります。サーバーには、クライアントが望む情報A、B、C、Dなどがあります。情報は名前のような単一のデータセットではなく、名前のリストです。一般的に列の内容全体。クライアントは一般的に、ABC、DEF、ABDなどのようなグループでこのようなものを必要とします。オーバーラップはありません(つまり、Aの要求の80%はBとCの要求です)。

システムが大きく成長するにつれ、それが簡単に通信プロトコルは同じように動作し、システムを維持することです:

Request 1: Server returns ABC 
Request 2: Server returns ABD 

または

Request 1: A 
Request 2: B 
Request 3: C 

など

私はと行くに傾いています最初のコードは、コードを読みやすく、扱いやすくするためで、ABCのようなグループの特別な要求を持つことで、サーバーがデータベースに対して実行するクエリが少なくなることがありますo必要な情報を入手する。しかし、コードベースは現在よりも大幅に大きくなり、クライアントとサーバーがどのように通信しているかを見直す時間が既にかかっているので、ここの人々が/または方法で持っていた経験を聞きたかった。

編集: 私はネットワークトラフィックだけでなく、サーバーがこれらの要求をどのように処理するかといったことについても言及しています。クライアントが3つの個別の要求を行う場合、サーバーは3つのDBクエリを作成する必要があります。グループ化された要求は単一のクエリとして実行される可能性が最も高いからです。

答えて

2

「時期尚早最適化」のケースだと思います。

  1. パフォーマンスの問題が実際に発生するかどうかはわかりません。
  2. と認識されるより複雑なコードは、パフォーマンスの問題です。
  3. 実際には、2番目のオプションはパフォーマンスが良くなる可能性があります(重大 - 接続の受け入れとリクエストの処理、または少し長い応答の送信)

ここで、ボトルネックやパフォーマンスの問題は、この情報をどのように見えるか(データベースなど)に関連している可能性が高くなります。その場合、プロトコルに影響を与えずにその目的のパフォーマンスを調整できます(たとえば、DBから返された値をキャッシュできます)。

+0

はい、最初の方法を使用しないと、サーバはA、B、Cをクエリする必要があることを知ることができ、(ストアドプロシージャなどを使用して)一度にすべて実行できます3つの別々のクエリを実行します。あなたが言ったように、ボトルネックはデータベースにある可能性が高い、それは私が言及しているものです。クライアントが3つの別々のプロトコル要求を行う場合、サーバーはそれらを一緒にグループ化する方法を知りませんので、3つのDBクエリを作成する必要があります。 – cost

+0

私は同意して、最初の方法で行くと言っています。実際には、これは主な決定要因です。「コードを読みやすく、扱いやすくするため、最初のコードと一緒に行く傾向があります。 – yamen

+0

オハイオ州、私はそこに少しあなたを誤解しました – cost

0

パフォーマンスが問題にならない場合は、必要なものすべてを提供し、コードをより小さく、きれいに保つための簡単なプロトコルを維持する必要があります。

パフォーマンスが問題の場合 - どの程度大きな問題ですか?追加された複雑さを保証するのに十分ですか?

1

(2)はより簡単になりますが、(1)ははるかに効率的で複雑ではありません。私は(1)と行くだろう。それはあなたに最高の長期戦略を提供します。

考えてみると、リクエスト入力はT in(2)またはT [] in(1)のいずれかです。アレイを使用するのはそれほど複雑ではありません。

関連する問題