- PR -

MySQLデータベース設計で質問

1
投稿者投稿内容
handmadedude
会議室デビュー日: 2004/09/06
投稿数: 4
投稿日時: 2007-03-26 12:14
MySQLで下記のようなデータを扱おうと考えています。

ユーザが各商品をチェックするとそのクリックに応じて
課金されるような仕組みとお考えください。

1) ユーザ関連情報
 ・個人情報あり
 ・更新頻度低
2) 商品関連情報
 ・更新頻度中
 ・画像データあり
3) クリック課金用のログ
 ・ひたすらクリック情報を取得する
 ・更新頻度高
これらはいくつかあるテーブルを3種類に分別してみた
という感じです。
古い考え方かもしれませんが、分別したデータごとに
データベースを切った方がいいのかと思っております。
ですがMySQLにはスレッドという考え方がないので全く意味が
ないでしょうか?
DBを分けるよりは各種テーブルをMyIsamとInnoDBのどちらにするか
考えた方がパフォーマンス的にも効率がいいと思っていいもの
なのでしょうか??

MySQLのデータベース設計に詳しい方どうかよろしくお願いします。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-03-26 15:04
別にMySQLは詳しくはないですが・・・。

引用:

handmadedudeさんの書き込み (2007-03-26 12:14) より:
古い考え方かもしれませんが、分別したデータごとに
データベースを切った方がいいのかと思っております。



データの分類毎にストレージを使い分ける手法はよく使います。

例えば、更新頻度やアクセス頻度に応じて物理ディスクを使い分けたり、
パーティショニングをサポートするDBMSならば、テーブルを分割して
利用頻度の低い過去データを通常は参照しないようにするなどです。

MySQLにはその辺の機能はないので自力で実装になっちゃいますけど。

引用:

ですがMySQLにはスレッドという考え方がないので全く意味が
ないでしょうか?



DBMSでのスレッドって何のことですか?

引用:

DBを分けるよりは各種テーブルをMyIsamとInnoDBのどちらにするか
考えた方がパフォーマンス的にも効率がいいと思っていいもの
なのでしょうか??



MyISAMとInnoDBの使い分けは、トランザクションの必要性や、
障害時のリカバリの重要性の方が大きいのではないでしょうか。
MyISAMはその辺りを犠牲にして時間的性能を稼いでいます。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2007-03-26 15:27
使用頻度という軸と、
TransactionテーブルとMasterテーブルってきり方がありますね。

最近だと、個人情報保護法案のおかげで、
個人を一意に識別するデータを別DBに分けるとかって考え方も存在します。
handmadedude
会議室デビュー日: 2004/09/06
投稿数: 4
投稿日時: 2007-03-26 15:56
早々のご回答ありがとうございます。

引用:

データの分類毎にストレージを使い分ける手法はよく使います。

例えば、更新頻度やアクセス頻度に応じて物理ディスクを使い分けたり、
パーティショニングをサポートするDBMSならば、テーブルを分割して
利用頻度の低い過去データを通常は参照しないようにするなどです。

MySQLにはその辺の機能はないので自力で実装になっちゃいますけど。



なるほど、MySQLの機能で何か実装するというよりアプリで制御
するか物理的にDBのロケーションを変えるしかないようですね。

引用:

DBMSでのスレッドって何のことですか?



失礼しました。Oracleでいうインスタンスのイメージでした。

引用:

るぱんさんの書き込み (2007-03-26 15:27) より:
使用頻度という軸と、
TransactionテーブルとMasterテーブルってきり方がありますね。

最近だと、個人情報保護法案のおかげで、
個人を一意に識別するデータを別DBに分けるとかって考え方も存在します。



将来的にはAPI開放も考えているので、分けた方がよさそうですね。

とりあえず3つにDBを切ってみようかと思います。

ありがとうございました。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2007-03-26 16:27
MySQLの「データベース」は、他のデータベースで言うところの「スキーマ」に近いです。
なので、複数のデータベースオブジェクトを論理的にひとまとめにする目的に使えるのですが、分割にどのような効果を求めるのかによって是非は変わります。

パフォーマンスという意味では別に分けてもしょうがないはずですし、セキュリティという意味では、同一データベース内の全オブジェクトのアクセス権限を一括管理できるので、便利かもしれません。テーブル単位でもできますが。
1

スキルアップ/キャリアアップ(JOB@IT)