私はソフトウェアプロジェクトAを使用しています。このプロジェクトは、ファイルシステムに格納されたデータに大きく基づいているサードパーティソフトウェアBに対してAPI呼び出しを行います。また、これらのソフトウェアとファイルシステムは、別の場所にあるサーバーに配布されます。たとえば、ファイルシステムを使用せず、BLOBを格納するためにデータベースを使用する方法を考えていました。次のシナリオを想定します。
このシナリオでは、2つのオプションについて考えました。
私はこの問題の解決策を見つけようとしており、Oracleデータベースで [〜#〜] dbfs [〜#〜] に遭遇しました。外部アクセス用のファイルシステムインターフェイスを作成しているように見えますが、実際には、これらのファイルはリレーショナルデータベースに格納され、管理されています。理論的にはファイルシステムの問題は解決しますが、Oracleデータベースがないため、この製品をテスト/使用できません。他のオープンソースデータベースで類似の機能を探しましたが、成功しませんでした。多分私は正しく検索していないのかもしれませんし、私が気付いていないこのための正しい用語があるかもしれません。多くの人がおそらくある時点で直面している単純な問題のように思えます。
データベース内のファイルを処理するには、多くのトレードオフがあります。いくつかの実際的な制約により、データベースの製造元は、データベースファイル構造の外部にファイルを保存して、クライアントへのファイル転送を高速化する手段を提供しています。 OracleにはDBFS、MicrosoftにはFileStreams、FileTable、およびリモートBlob Store(RBS)があります。大まかなトレードオフは次のとおりです。
テンプレートの問題を処理するには、テンプレートファイルがdataかconfigurationかを決定する必要があります。違いは、問題の解決方法にあります。
テンプレートファイルをデータとして扱う
この仮定は基本的に、テンプレートをデータベース内の特定のレコードに関連付けます。これらは、データが処理されているときに適切にステージングし、その後クリーンアップして、他の処理に干渉しないようにする必要があります。この場合、サードパーティソフトウェアへのアクセスをBLOBストレージからテンプレートを取得するサービスでラップし、処理が完了したらクリーンアップすることをお勧めします。これにより、呼び出し側がテンプレートについて直接知る必要がないように、単一責任原則(SRP)が維持されます。
この場合、外部のBLOBストレージをお勧めします。
通常、管理されたblobストレージは、データベース内であっても、独自のホストされたソリューションよりもはるかに堅牢であり、作業がはるかに高速です。そのシナリオでは、バックアップについてあまり心配する必要はありません。 Min.ioではクラウドのようにblobストレージを操作できますが、デプロイメントを自分で管理する必要があります。つまり、Kubernetes(k8s)のようなオーケストレーションサービスを使用すると、非常に堅牢なデプロイメントを自分で維持できます。
テンプレートファイルを構成として扱う
このシナリオでは、テンプレートファイルはファイルシステムに存在する必要があるだけで、有効な展開の一部と見なされます。これは、コンテナーとオーケストレーション(k8s)が実際にそれを管理するための優れたオプションとなる場所です。コンテナは、必要に応じてサードパーティツールとすべてのテンプレートファイルを持つように構築されます。オーケストレーションサービスによってデプロイされたコンテナーの各インスタンスは、まったく同じように構成されます。
このアプローチは、デスクトップアプリケーションでも機能します。この場合、テンプレートファイルはインストーラの一部になります。