6

多くの構成を使用するアプリケーションとサービスがありますが、そのほとんどは現在Javaコードにハードコーディングされており、多くのクラスに分散しています。明らかに、これは変更する必要があり、これを1つの場所に集中させ、パフォーマンスを向上させるためにクライアントの構成のキャッシュも組み込んだサービスの1つ(ConfigurationServiceなど)によって取得および公開する必要があります。また、長時間実行されるアプリケーションの構成を動的に再ロードし、再起動を回避する必要があります。この目的で使用する必要のあるストレージの種類についてコメントをお願いします-

データの種類-

データを構造化する必要はありません。単純なキーと値のペアの場合もあれば、マルチキーの単一の値のペアの場合もあります。構成のいくつかのランダムな例を次に示します-

  • "Client_Id"-> "ABC"(単純なキー値)
  • ["User_Type": "Admin"、 "Region": "Mumbai"、 "User_rating": "9"]-> ["Commission": "10%"](マルチキー値)
  • ["User_Id"-> "123"]-> ["WhitelistedRegions"-> "Mumbai、Goa"](コンテキストベースの構成、値はリストです)

ストレージソリューション-

基本的に、キーを形成するパラメーターのセットとタイプは固定されていないため、この構成が実際には構造化されていないことがわかります。構成全体のボリュームは実際にはそれほど大きくありません。読み取りと比較して、書き込みはほとんどありません。

  • データベース(RDBMS / NoSQL) -データベーステーブルを使用する利点は、セキュリティとそれが提供するバックアップである可能性があります。これはリレーショナルデータのようには見えないので、NoSQLソリューションを検討します。個人的には使ったことがないので、このようなデータに適しているものを教えてください。さまざまなキーが存在する可能性があるため、正確なキー(ある種のインデックス付け)を選択できるはずです。データベースを使用するとレイテンシが発生しますが、これを克服するために効率的なキャッシュを構築できます(構成への書き込みが多すぎないため)。データのクエリは簡単です。

  • ファイル(XMLまたはその他のフラットファイル) -ファイルを使用してシンプルに保つことができます。キャッシングはファイルの場合にも使用できます。構成全体をメモリ(RAM)にインポートできる限り、それもオプションです(選択的なキャッシュの無効化を実装する必要があります)。ファイルはバージョン管理を提供し、権限/セキュリティを調べる必要があります。XMLファイルは、大きくなると特に混乱する可能性があります。ファイルを使用している場合、データのクエリは簡単ではない可能性があります。

動的な再読み込みとキャッシュの無効化が別々に実装されていると仮定すると、どちらがより優れたストレージソリューションになるはずですか?ここで考慮すべき他の要因は何ですか?

そのような構成を保存するためにファイルを使用する場合、そのようなユースケースに適したファイル形式は何ですか?

注:私はSOについて同様の質問をしましたが、おそらく私が持っているべきほど明確に質問を組み立てていなかったので、大幅な編集を行う代わりに新しい質問を作成しました。

4

3 に答える 3

2

どうぞ、どうぞよろしくお願いし、 ArchaiusまたはCuratorがあなたのニーズに適しているかどうかを評価してください。Archaiusは、アプリケーションとコンテナの構成におそらくより適切であり、Curatorはおそらくマシンレベルの構成に適しています。

于 2012-12-27T19:23:25.630 に答える
1

あなたが提供する例は、ある種のルールエンジンが必要かもしれないことを示唆しています。私が何を意味するかを示すために、私はあなたの例を次のセマンティクスを持っていると解釈します:

if (true) {
    Client_Id = "ABC";
}
if (User_Type == "Admin" && Region == "Mumbai" && "User_rating" == "9") {
    Commission = "10%";
}
if (User_Id == "123") {
    WhitelistedRegions" = ["Mumbai", "Goa"];
}

私の解釈が間違っている場合は、質問を編集して、意図した意味を明確にすることができます。一方、私の解釈が正しければ、要件に合わせて調整された特定の構成構文を認識していません。代わりに、使用する構成構文の制約に、必要なもののセマンティクスを靴べらにする必要があると思います。

私があなたの例をConfig4*の構文に靴べら(私の解釈)しようとする方法(免責事項:私はその主な開発者です)は次のとおりです。

uid-rule {
    # unconditional
    client_Id = "ABC";
}
uid-rule {
    condition {
        User_Type = "Admin";
        Region = "Mumbai";
        User_rating = "9";
    }
    Commission = "10%%";
}
uid-rule {
    condition { User_Id = "123"; }
    WhitelistedRegions = ["Mumbai", "Goa"];
}

上記の例で使用されている構文を理解できるように、 Config4 *入門マニュアル(HTMLPDF )の第2章を読むことをお勧めします。

例をXML構文に変換する最初の試みは次のとおりです。

<rules>
    <rule>
        <property name="client_Id" value="ABC"/>
    </rule>
    <rule>
        <condition name="User_Type" value="Admin"/>
        <condition name="Region" value="Mumbai"/>
        <condition name="User_rating" value="9"/>
        <property name="Commission" value="10%"/>
    </rule>
    <rule>
        <condition name="User_Id" value="123"/>
        <property name="WhitelistedRegions" value="Mumbai, Goa"/>
    </rule>
</rules>

Config4 *パーサーもXMLパーサーも、すぐに使用できるセマンティクスを提供しないことに注意してください。代わりに、たとえば、というクラスを作成する必要がありますRulesEngine。このようなクラスは次のようになります。(1)構成ファイルを解析してルールを取得し、解析された表現をメモリにキャッシュします。(2)メモリ内のルールセットをクエリするためのシンプルなAPIを提供します。(3)reloadConfiguration()構成ファイルを再解析するメソッドを提供します。アプリケーションは、何らかの方法でreloadConfiguration()メソッドの呼び出しをトリガーします(たとえば、数分ごとに1回)。

構成構文にXMLを使用する場合は、XMLファイルをWebサーバーに保存することにより、集中化の目標を達成することをお勧めします。XMLパーサーは、そこでファイルフォームを取得できます。Config4 *構文を使用する場合、Config4 *との統合によりcurl、同じことが可能になります。

于 2012-12-13T22:24:02.843 に答える
0

状況を見るにはさまざまな方法があります。

  1. データを保存する場所を決定する方法は、通常、データの種類に基づいています。

    私があなたのデータを正しく読んでいる場合、それはクライアントID、ユーザーの場所と評価に基づく手数料、および特定のユーザーに適用可能な地域を指定します。私にとっては、構成というよりもビジネスの静的データです(ただし、これは頻繁に変更されることはありません)。したがって、私はそれをデータベースに保存したいと思います。

  2. ユーザーがこのデータを更新するための画面を提供する必要がありますか?UIがある場合は、PRODenvでこれを行うためにチケットの発行やリリースプロセスを実行する必要はありません。ただし、UIを使用すると、選択肢がデータベースに移動します。

  3. UIがない場合は、おそらくファイル構成の方が適しています。アプリケーションにファイルウォッチャーサービスを設定して、この構成ファイルを監視できるためです。ファイルが変更されると、このサービスはファイルを読み取り、再起動せずに構成を更新します。データベースの場合の動的リロードは、それほど単純ではない場合があります。構成の再ロードを手動でトリガーするための管理画面を引き続き提供できます。

  4. ファイルの種類については、Ciaranによって提案された選択肢を選択できますが、追加の学習が必要になります。大量の構成がないことを考えると、xmlに固執することができます。

  5. データをキャッシュすることは、データベースとファイルの両方で簡単に実行できるため、データベースとファイルのどちらを選択するかには影響しないと思います。ただし、HibernateなどのORMを使用している場合は、データをキャッシュするという追加の作業から解放されますが、ORMは、データベーステーブルへのクラスマッピングを定義するという別の複雑さをもたらします。

于 2012-12-25T10:21:11.073 に答える