多くの構成を使用するアプリケーションとサービスがありますが、そのほとんどは現在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について同様の質問をしましたが、おそらく私が持っているべきほど明確に質問を組み立てていなかったので、大幅な編集を行う代わりに新しい質問を作成しました。