私は自分自身でプログラミングを教えてきました(ここでは、書籍からほとんどがJavaであり、ここで質問を読んでいます)、プログラムは機能しますが、できるだけ速いとは確信できません。私はアプリケーションのプロファイリングを始めました。私のすべてのプログラムの大きな流れは、他のサービス(キューサーバー、データベースサーバーなど)にデータを接続/プル/送信しているようです。多くの接続のためのプログラムを設計するには?
この問題を解決するために人々が従うデザインパターンまたは構造はありますか?データベースからデータを取り出し、結果に何か(例えばresult + 1)して返す単純な問題がある場合、どのようにしてプログラムを構造化し、ほとんどの時間がデータの処理に費やされるか自体?私は、データのポーリングが複雑であることを理解しています。私はこれをやる必要がありますが、これを大規模に行い、データベース/キューサーバーから多くの単純なタスクを実行する必要がある場合はどうしたらいいですか?
私はスレッドを使用する方法を学び、同時にデータを送信する準備ができているスレッドのポーリングを作成しました(私のプログラムは確認応答を待っていませんが)どのようにデータの流入を改善するかを理解するために(私は50のデータ項目に時間を問い合わせます、プログラムはデータを処理するので、CPUはそれを処理できるよりも速く新しいデータをポーリングできません)。また、リクエストごとに接続やチャンネルを再開しないようにしましたが、それでも時間がかかります。
これはよくある問題だと思いますが、誰かが私のプログラム(できればjava)を設計する方法を学ぶことができるリソースを教えてもらえれば分かるでしょう。そのような大きなチャンクが接続に費やされないように/サービスapiのデータを取得します。私は一般的なポインタを探していて、どんな例でもうまくいくでしょう。質問があまりにも一般的で、コードサンプルで簡単に問題を再現できるかどうか教えてください。
ありがとう、うまくいけば私はこれを正しく説明しました。
ORM/JPAフレームワーク、接続プール、キャッシュなどを使用していますか? – mrab
あなたの質問は本質的に「どのように私は高いレイテンシに効果的に対処していますか?それは今、業界で未解決の問題です。明らかに正しい解決策はありません。開発者がこれらの問題を解決するのを支援するために、言語とフレームワークに組み込む必要があるアブストラクションのセットを決定することは非常に困難です。コルーチンの一種をファーストクラスの言語機能にすることで、C#とVBでそうしようとしていますが、これは確かに唯一可能な解決策ではありません。 –
クライアントがデータベースよりも単純に強力で、その側で調整するよりも速くデータを処理できない可能性もあります。 – Affe