ファイル名にメタデータ情報を保存するのは悪い習慣ですか?より良いソリューション?


13

私が働いている場所に気づいたのは、人々がファイル名に情報を保存し、ファイル名を解析することに熱心だということです。

私にとってこれは特に良い習慣ではないようです。スクリプトがファイルをグロッビングし、別のファイルが最初に一致するため間違ったスクリプトを取得するという問題が既に発生していることを確認しました。

それは悪い習慣と見なされますか?

ある種のメタデータに基づいてファイルシステムからファイルを取得するために受け入れられている他のソリューションは何ですか?


ファイル名に何が正確に保存されているかに大きく依存します。例を挙げていただけますか?
T.サール-復活モニカ

回答:


14

はい、それは悪い習慣だと思います。長さの制限、エンコードの問題、重複データによる競合など、あらゆる種類の問題が発生します。

ベターは、メタデータとファイルへのパスを含む「マスターファイル」(マニフェストまたはインデックスと呼ばれることもあります)を使用することです。または、データベース、レジスターなどに似たもの。または、実際のファイル内に、たとえばJSONやXMLのファイルに含まれるデータ構造の最上位にメタデータを配置します。

これは、情報を格納する概念、またはキー値ストアに名前空間キーを置くという概念にやや似ています。名前空間にのみ使用してクイックルックアップを行う限り、これは大丈夫だと思います。キーコンポーネントは解析可能な情報を提供するために存在しません。その情報が必要な場合は、値に複製します(上記の場合はファイル)。


3
あなたは腸のポイントを上げています。しかし、それでもファイル名に情報を入れることが理にかなっている場合があります。ルールベースの方法でルーティングまたは処理する必要があるメールの添付ファイルを考えてください。多くの並列プロセスがマスターファイルを変更する必要がある場合、それがボトルネックになる可能性があります。
アクセルケンパー

データベース開発者として、私は当然、マニフェストファイルの代わりにデータベースを使用することを考えています(ここで代替方法を求める理由の1つ)。これは同時アクセスの問題を解決しますが、より複雑なソリューションです。
wobbily_col

1
@wobbily_colは、使用するシステムによっては、利用可能な拡張ファイル属性のサポートがある場合があります。
ヘリオン

@AxelKemper名前に収まる情報はあまりありません。名前と著者よりも多くのメタデータがあります。
Tulainsコルドバ

言うまでもなく、ファイル名はシステムの外部の誰かによって変更される可能性があり、予期される形式を壊します。適切なファイル許可が適用されている場合でも、最終的には脆弱なソリューションになります。
ベリンロリチュ

5

まず、メタデータはぼやけた概念です。

ただし、ファイル内のメタデータの多くのケースはすでに存在します。

  • ライブラリのバージョン番号
  • 画像の日時、または少なくともシーケンスインデックス
  • どのアプリケーションがファイルを開くかをトリガーするファイルタイプ
  • ホームディレクトリの名前。セッションユーザー名である必要があります

それにもかかわらず、その短いリストは慣行を支持する議論ではありません。

代替手段は次のとおりです。

  • Appleの古いHFSなどのFSレベルでメタデータを処理します
  • 画像の場合はExif、音声の場合はID3のように、ファイル自体にメタデータを入れます
  • ほとんどのメディアマネージャーのように、メタデータを別のファイルまたはデータベースに配置します。

5
すべてがぼやけた概念です。「ぼやけ」、「概念」、「すべて」さえもぼやけた概念です。
Tulainsコルドバ

3

データベースが必要なようです。

ユーザー名をファイル名に含めることには、多くのセキュリティ上の問題があります。各ユーザーのファイル( "username.txt")があるとします。誰かがユーザー名「../../../../etc/passwd」を登録するとどうなりますかは、ユーザー入力のフィルタリング方法によって異なります。

データベースフレームワークは、ユーザー入力のサニタイズに役立つ場合があります。


実際、多くのオペレーティングシステムは、ホームディレクトリと呼ばれるディレクトリ名にユーザー名を保存します。
ムービシエル

それは、誰かのソフトウェアがスタックの一番下になければならないからです。誰もがそのレベルで作業しなければならないという意味ではありません。プログラマーがデータベースを50年以上使用しているので、データベースのメリットについて議論するつもりはありません。
エリックウィンバリー

1
@mouvicielユーザーのホームディレクトリ名からユーザー名を解析するオペレーティングシステムを知りません。WindowsおよびUnixライクなシステムは、ディレクトリの名前を何らかのデータベースに保存し、ユーザーがログインしたときに環境にロードします。両方のシステムでは、ホームディレクトリ名がユーザー名(たとえば、ユーザー名の変更、または同じシステムパーティションに2つのウィンドウがインストールされている場合)。
ジュール

2

いいえ...まあ..必ずしもそうではありません。

厳密な規則と一般的な解析および検証手段(スクリプト、ライブラリなど)がすぐに利用できる限り、準備は万端です。

パッケージングと依存関係管理システム(Maven、NuGetなど)を例にとってみましょう。多くの場合、メタデータに特定のファイルを使用してより高度な情報を保存しますが、多くの場合、基本情報はファイル名自体の一部です。厳密な規則に基づいて、ファイル名にはパッケージに関する最も適切な情報を含めることができます。それはベンダー、名前、バージョン、タイプです。必要なのはそれだけかもしれません... 4つまたは5つの短い情報。

メタデータが単純な場合、ファイルの命名規則は適切なものであり、何も配置する必要はありません。非常にシンプルなツールとスクリプトで強化できます。データベースは必要ありません。いくつかのスクリプトと命名規則だけの専用インフラストラクチャは必要ありません。

あなたが必要とするものがまったくない場合、あなたのニーズは簡単です。これから始めましょう。

あなたの要件はこの慣習を超えていますか?適切なメタデータファイルで拡張します。後でこれをよりよく検索する必要がありますか?必要な場所に移動するファイルを検索するための優れたソリューションがすでにあります。

私はデータベースが嫌いというわけではありません。それどころか、本当に強力で便利ですが、データベースを使用するにはある程度のオーバーヘッドが必要です。それらをインストール、バックアップ、保守する必要があります。完全に専任ではないにしても、このインフラストラクチャに時間の一部を費やす必要があるスタッフが必要になります。彼らはまた、素人にとってより複雑で不可解であり、あなたをセットアップした開発者を失い、あなたが交換を見つけるまであなたのシステムは時間内に行き詰まります。

適切な監視でローテクの力を過小評価しないでください

そして、ローテクソリューションが大きくなる頃には、ニーズに最適なシステムを実装するためのすべての経験と要件を収集しているでしょう。


慣性力を過小評価しないでください。ローテクのソリューションをより堅牢なものに変更するには、最初からそのようにしないよりも多くの労力が必要です。
ベリンロリチュ

1
@BerinLoritsch同じ議論は、すべてのソリューション、ローテクまたはハイテクに適用されます...より多くのシステムの相互依存性を必要とするハイテクは、実際にこの状況を最悪であり、簡単ではないと主張することができます。とはいえ、単純なローテクのソリューションが、本格的なハイテクのソリューションよりも複雑になるしきい値があります。
ニュートピア

1
うん、そして私はプロジェクトでそのような例をいくつか解き明かしています。肝心なのは、ファイルシステムよりも厳密なインターフェースを必要とする回数が多いということです。残念ながら、私が継承するほとんどのローテクシステムには、適切な考え方やデザインが適用されていません。一方で数えることができる例外の数。
ベリンロリチュ

0

最初に、ファイル何であるかに同意しましょう。ファイルは、(非常に近い)アトミック操作で送信、受信、作成、削除できる名前を持つパッケージ化されたデータです。

多くのファイルシステム(Mac OS、および最近のLinuxファイルシステム)は、多くの場合リソースとメタデータを格納するために使用される「フォーク」を実装しています。メタデータを保存するこのアプローチは、特にソースと宛先のファイルシステムがファイルフォークを異なる方法で理解している場合、従来のネットワーク転送方法、バックアップおよび復元方法、ファイルコピー方法が一貫していないという問題がありました。

ファイル名はメタデータを保持するために使用されます。a)常に存在する、b)メタデータが常にファイル名に存在する(少なくともファイル拡張子を使用する)、c)ファイル名が移動時にほとんど翻訳されないシステム間(大文字と小文字の区別、文字セットの制限、文字の制限は別)。

そのため、ファイル名は表示、移植、管理が容易です。これは、一部のメタデータを保存するのに悪いことではありません。

おそらく、一般的なファイルメタデータに対処する最適なソリューションは、コンテンツリポジトリを使用することです。この場合、コンテンツリポジトリは、ファイルに使用されるメタデータスキーマで構成できます。多くの場合、これはやり過ぎですが、私見は、真剣なメタデータ管理を行う方法です。


0

これについての私の見解は、ファイル名でだらしないか壊れやすいコードをどこかで見たことがあるかもしれませんが、それは「ファイル名にメタデータを保存する」が一般的に悪いことを意味しません。

ファイル名メタデータです。ファイルデータ自体とは関係なく、ファイル内のデータに関するデータです。実際、ファイル名は非常に古いため、おそらくメタデータの標準的な例です。

ファイル拡張子がファイル名の最後の部分に過ぎないと考える場合、メタデータとしてのファイル名の概念はさらに避けられないものになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.