MYSQLのディスク容量に関して質問です。

下記内容は可能でしょうか。

現在の設定
----
・userテーブルにuser情報を登録している
・fileテーブルにファイル実体(blob型)とuser情報を紐付けて登録している
----

したいこと
----
・userごとのmysql利用ディスク容量(fileテーブルの利用容量)をしりたい
----

テーブル単位でのトータル容量は簡単にわかるのですが、userテーブルに格納されているユーザーごとの
情報の取得方法がわかりません。
上記はざっくりした説明用DBにはなっていますが…

何か方法があればヒントなどでも結構です。
宜しくお願いします。

回答の条件
  • 1人3回まで
  • 登録:2009/08/04 22:28:36
  • 終了:2009/08/10 13:16:28

回答(3件)

id:kn1967a No.1

kn1967a回答回数356ベストアンサー獲得回数72009/08/05 01:05:18

ポイント27pt

できない。

というか、BLOB型のサイズを登録するカラムを用意するのがセオリー。

id:chirubo

なるほど。。

mysqlだけでは取得できなさそうですか。

phpmyadminのデータ一覧画面でblob型の部分に[BLOB - 23.7KiB]などファイルサイズが書いてあるのですが、この情報って簡単に取得できないのでしょうか?

追記:

phpmyadminを見ていると、単純にstrlen()で情報を引っ張ってきているようか感じがします。

通常のvarcharなどの容量を調べようと思うと、同様にstrlen()なるのかな

プログラムと合わせてでも容量計算が出来ればいいのですが

2009/08/05 10:30:31
id:chuken_kenkou No.2

chuken_kenkou回答回数722ベストアンサー獲得回数542009/08/05 12:02:06

ポイント27pt

簡易的な方法とすれば、SELECT文でLENGTH関数を使用することで、データ長を得ることはできます。

実際に使用している容量となると、実際のデータの長さにより、物理的に複数レコードに分割されて格納されたりしますし、その管理情報も含めどこまで正確に求めるかという話しになってきます。

MySQL :: MySQL 5.1 リファレンスマニュアル :: 10.5 データタイプが必要とする記憶容量

MySQL :: MySQL 5.1 リファレンスマニュアル :: 11.3 文字列関数

id:chirubo

なるほど。

現状ですとuserごとの総容量(byte)を出そうとすると、PG側もしくはLENGTH関数でカウントをすることになりそうですね。

件数が多いとどちらにしても負荷も多そうで、、どのあたりが落とし所になるかですかね。。

2009/08/05 12:38:49
id:pahoo No.3

pahoo回答回数5960ベストアンサー獲得回数6332009/08/05 15:27:17

ポイント27pt

計算負荷を考えるなら、SQLをお勧めします。


テーブル名 file、userのID番号を格納したフィールドを user、blob型のフィールドを binとします。ユーザーID=101のBLOB型データの容量(バイト)を合計するのであれば、SQL文は以下のようになります。MySQL 4.x 以降で利用できます。

select sum(length(`bin`)) FROM `file` where user=123;
id:chirubo

なるほど!

一度試してみます。

ありがとうございます。

2009/08/05 20:59:11

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません