質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

4回答

1226閲覧

ファイル名にはインデックスは効いているのでしょうか?

nazo

総合スコア4

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2020/06/26 11:47

編集2020/06/26 12:01

###お尋ねしたいこと
画像ファイルをサーバーに保存するとき
img1.jpg
img2.jpg
img3.jpg
などのファイル名がつきますよね。

こういった「ディレクトリのファイル名」には、「SQLのレコード」でいうインデックスのような機能はあるのでしょうか?

###懸念点
「SQLのレコード」であれば上のようなファイル名が何件あってもインデックスによって瞬時に取得されますが、「ディレクトリのファイル名」にもしそういった機能がなかったら、フルスキャンすることになりますよね?

例えばHTMLで
<img src="htttp://example.com/images/img1.jpg">
と画像を呼ぼうとしたときに大量の画像ファイルがサーバーにあったら、フルスキャンしていたらずいぶん時間がかかってしまうと思うのです。

その場合、どういった対策が有効でしょうか?

###考えた対策
ユーザーがアップした画像をimagesというディレクトリにすべてまとめて入れず、ユーザーごとのディレクトリを作ることで、少しは緩和できるかと考えたのですが、ほかに何かいい方法ございますか?

下記の、2つ目の構造として、
<img src="htttp://example.com/images/user1/img1.jpg">
のように呼び出すという対策です。

images/  ├ img1.jpg  ├ img2.jpg  ├ img3.jpg
images/  ├ user1/  │ ├ img1.jpg/  │ └ img3.jpg/  ├ user2/  │ └ img2.jpg/

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/06/26 11:51

SQLとファイルとどういう関係なのでしょうか。 タグと本件が関係ないと思います。 あと「Grep」ってご存知ですか?
maisumakun

2020/06/26 11:52

ファイルシステムは何でしょうか?
nazo

2020/06/26 11:54

タグは何がいいですか?すみませんGrep調べてもよくわからないです。
m.ts10806

2020/06/26 11:58

>タグは何がいいですか? OSやシステム次第です。どういう環境でのファイル検索を意図しているのか。 「ファイル」とかありますが、自身の環境にあわせて探してください。 >すみませんGrep調べてもよくわからないです。 https://ja.wikipedia.org/wiki/Grep >grep(グレップ、グレプ)は、UNIXおよびUnixオペレーティングシステムにおけるコマンド。テキストファイル中から、正規表現に一致する行を検索して出力する。 WindowsでもエディタによってはGrep機能を備えたエディタもあります。 https://sakura-editor.github.io/help/HLP000067.html
nazo

2020/06/26 18:29

なるほど、「ファイル」追加しておきました。Grep今回はあれですが、別件で使えそうです。ありがとうございます。
guest

回答4

0

自分だったら、DBに、検索できるようにファイル名やアップロード者のID等や日時等を保存します。

投稿2020/06/26 15:21

kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kyoya0819

2020/06/26 15:22

おそらくデフォルトでは無いと思います。 (サーバーのコマンドで使える場合もあるけど、あんまりなぁって感じです。
nazo

2020/06/26 18:31

たしかに「日付/ユーザー名/ファイル名」で行こうと思います。デフォルトではないのですね。知れてよかったです。ありがとうございます。
guest

0

ベストアンサー

最近のファイルシステムは知りませんが、プログラムから見えるディレクトリ構造体にインデックスは無いです(ファイルシステムが裏でうまくやってくれている可能性はある)。
参考:man 3 readdir
ファイル数が多いと時間が掛かるのは確かです。

見かけるのは、
/imgs/a/aeoadjoajeoia.jpg
/imgs/x/xdskjajkxpazx.jpg
みたいにインデックスとなる階層を設けること。もちろん均等になるように。
1ディレクトリ数千くらいならいいのでは。何十万とかならさらに階層を増やす。

投稿2020/06/26 13:40

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nazo

2020/06/26 18:31

悩みますが、順番としては「日付/ユーザー名/ファイル名」が良さそうですね。ありがとうございす。
guest

0

「ディレクトリのファイル名」にもしそういった機能がなかったら、フルスキャンすることになりますよね?

実際に、「1つのディレクトリにファイルを置きすぎると検索に時間がかかる」という状況は存在して、対策のためにある程度ディレクトリ分けすることもあります。

投稿2020/06/26 12:37

maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nazo

2020/06/26 18:29 編集

環境によりけりでしょうけれど、10万件くらいなら…ギリでしょうか。
guest

0

ファイルシステムによるとしか言えないですね。
実際ファイルはセクタが別れてバラバラに置かれていたりするので
物理的にシークするのに時間がかかったりもします

投稿2020/06/26 12:07

yambejp

総合スコア114583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/06/26 12:08

実際unix系のOSのどこにあるかわからないときに使うfindとかは ディレクトリルートで検索をはじめるとべらぼうに時間かかりますから・・・
nazo

2020/06/26 12:11

ファイルシステムというのがよくわからないです。Xサーバーを利用しておりまして、調べてみるとこちら(https://www.xserver.ne.jp/support/faq/faq_service_server.php)によれば >サーバーのOSには Linux を採用しています。 >ディストリビューションなどの詳細については非公開としております。 とありました。 これはファイルシステムは非公開だということなのでしょうか?
nazo

2020/06/26 12:13

でも<img src="">で画像ファイルを探すというのはよくある機能だと思うのですけど、みなさんどうしているのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問