2016-05-17 4 views
0

デザインに関するご意見やご提案が必要です。WebアプリケーションでのJavaおよびJSONファイルによる提案の設計

私は(変更することはできません)があります。

  1. Webアプリケーション(JSP /サーブレット)
  2. サーバー上のJSONファイル(データベース)

ユースケース:

  1. インフォメーションの同時読み取り上のJSONから

は私が問題を説明させて情報の

  • 同期書き込み:

    JSONファイル基本的に持っている情報のような:

    { 
        "modules": { 
        "module1": { 
         "sub-module1": { 
         "info": "some faq statememt" 
         }, 
         "sub-module2": { 
         "info": "some faq statememt" 
         } 
        }, 
        "module2": { 
         "sub-module1": { 
         "info": "info on module2: submodule1" 
         } 
        } 
        } 
    } 
    

    これで、すべてのユーザーがでJSPを介して情報を読み取ることができます任意のモジュールを要求し、次にサブモジュールを要求する。 プログラムは基本的に要求された情報を取得し、JSONファイルをロードし、それをモデルオブジェクトにマップし、AJAXを介して関連情報をJSPに返します。

    管理者ユーザーは、新しいキー/情報 を追加するか、既存の情報を編集して既存の情報を編集できます。

    制約:複数の管理者が同じキーの編集を行うことはありません。

    私はアプリケーションを書いていますが、今では並行性が上がっています。 この時点で、FileInputStreamおよびFileOutputStreamを介してファイルにアクセスします。

    私が質問に次のようしていると私はIOの上に多くの知識を持っていけないように私は彼らのために答えを必要とする:書き込みは、その後、意志読みスロー例外を長い時間がかかっている場合はどうなりますか

    1. ?これをどう扱う?
    2. どのように同時読み取りと同期書き込みが正常に行われることを確認しますか?おそらく、データアクセスクラスのシングルトンオブジェクトで書き込みメソッドを同期させることは可能ですが、次にどのように読み込み要求を処理するのでしょうか?
    3. JSONオブジェクト全体が私のプログラムのメインモデルに(Boonを使用して)マッピングされているため、デッドロックやメモリの問題が発生する可能性があります。これを回避するには?
  • +0

    通常、いくつのキーがありますか? –

    +0

    それぞれ約15〜20個のモジュールがあり、それぞれに約3〜4個のサブモジュールがあり、各サブモジュールにはA4サイズの2ページ分の情報を含む情報が含まれています。しかし、これらの制約は固定されていないため、アプリケーションを将来的に証明しようとしています。 – xploreraj

    +0

    サブモジュールにはいくつのキーがありますか? –

    答えて

    0

    質問2については、 Javaでは

    、サーブレットは、その性質上シングルトンオブジェクトであり、あなたがスレッドの安全性について懸念を持っている場合、あなたは間違いなくについては

    競合状態を防ぐためにラッパークラスを使用して、リクエストごとにインスタンスを作成する必要があります分散環境でホストされていないサーブレット(デフォルト) サーブレットコンテナは、サーブレット 宣言ごとに1つのインスタンスのみを使用する必要があります。しかし、SingleThreadModel インタフェースを実装するサーブレットの場合、サーブレットコンテナは、複数のインスタンスをインスタンス化して、 が重い要求負荷を処理し、特定の インスタンスへの要求をシリアル化することがあります。コメント欄にあなたの答えから判断

    +0

    データアクセスクラスはサーブレットではありません。 – xploreraj

    +0

    ですが、サーブレットはです。そのため、DataAccessクラスに直接アクセスできるサーブレットをラップする必要があります。 –

    1

    あなたは多分、各キーのメモリに監視対象を保ちながら逃げるし、キー」 のモニター上の書き込みコードを同期させることができます。これにより、あるレベルのパフォーマンスを維持しながら同時アクセスを回避できます。しかし、これは、ファイルを直接読み書きするのではなく、nosqlデータベースやその他のツールを使用することで避けるべきです。

    編集:約80個のキーしかないことが判明しました。少量のデータをメモリに保存して、Java同期を使用して同時アクセスを処理することができます。今すぐディスクにデータを書き込むバックグラウンドジョブを追加するだけです。

    関連する問題