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

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

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

4回答

9363閲覧

顧客ごとにDBを分けるかどうか

mcncx

総合スコア17

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2020/10/02 10:33

あるWEBシステムを取引先に公開したのですが、現在は1つのDBにユーザIDを切ってデータを登録しています。
ところが、取引先によっては数十万レコードを登録するようなお客様もいらっしゃいますし、利用しないお客様は数十レコードってお客様もいらっしゃいました。

そうなると、あまり利用しないお客様の処理が遅くなるのではないかと懸念してますし、また数十万レコードのお客様が今後も複数出てくれば、数百万レコードになっていく可能性もあります。
(現状でこれなので、時間の経過とともに、もっともっと増えていくのではないかと思います)

▽ユーザーごとにDBを分けるメリット、デメリット
https://teratail.com/questions/192919
で、似たような質問があるのですが、結局メリットデメリットがよくわからずにいます。

やりたいことは、プログラムは共通のものを使うとして、DBはお客様毎に分けた方がいいのか、DB構造の更新や追加機能などのメンテナンス性を考えればこのままDBは1つで利用した方がいいのか、ご助言を賜りますとありがたいです。
そもそも、同一WEBシステムでDBを分けると言うことってありなんでしょうか。。。

ちなみに、取引先同士で何かデータを共有するようなことはありません。
(完全な独立データになります)

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

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

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

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

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

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

takasima20

2020/10/02 11:04

そのWEBシステムのポジションといいますか、扱いといいますか、どういう目的で公開しているかによるんじゃないですかねえ。とりあえず… 有料なの?
mcncx

2020/10/02 11:09

はい。有料システムです。 トランザクションではなく、アカウント数によって料金が変わりますので、 同じアカウント数であれば数十万件でも数十件でも料金は変わりません。
guest

回答4

0

ベストアンサー

そもそも、同一WEBシステムでDBを分けると言うことってありなんでしょうか。。。

普通にアリです。
そもそも、同一WEBシステムで「DBを分けてはいけない」理由がありません。

メンテナンス性についても、DBサーバーの負荷が問題になるようなケースを想定すれば、ユーザー単位で切り離せる事にはメリットがあります。

DBサーバーにパフォーマンス上の問題が出た場合、基本的にはスケールアウトで対応するは難しいですが、ユーザー単位で違うDBのインスタンスを持っているのであれば、負荷が最大となるユーザーのみ専用のサーバーに移す事が容易になるなど、柔軟性が増します。

また、他の方が書かれている通り、全ユーザーで単一DBの場合は、例えばSQLインジェクション等のセキュリティ問題が発生した際に、1つのDBへのアクセス権だけで全ユーザーに影響範囲が広がるなどのリスクもあります。

ユーザごとにDBが別れて、かつ適切なアクセス制御が行われていれば、不正なアクセスが成功したユーザーのみに影響は抑えられます。

もちろん、分散することで管理対象が増えるというデメリットはありますし、共通するマスターデータをDB毎に持つようになれば、その分余分な容量を消費する事にはなりますが、そこは上記のメリットとトレードオフの関係なので、そのシステムをどのように運用したいのか、という要件次第で判断することです。

投稿2020/10/02 12:14

gentaro

総合スコア8947

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

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

mcncx

2020/10/02 13:05

> 普通にアリです。 ありがとうございます!決心がつきました。 勉強になりました。 いろいろご教授いただきありがとうございました。
guest

0

とりあえずテーブルをわけるだけで良い気もします。
きっちりインデックスをはれば同じテーブルでも大丈夫かも

投稿2020/10/02 11:02

yambejp

総合スコア116724

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

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

mcncx

2020/10/02 11:11

既存のテーブルにPrefixかSuffixか付けて、顧客ごとにテーブルを分けると言うことでしょうか?? 確かにそっちの方がDBを分けるよりメンテナンスは楽なような気がしますが・・・ それ用のシステム改修が大変だ...orz
yambejp

2020/10/02 11:19

データベースはそんなにボンボンつくるものでもないでしょう 基本はテーブル単位です。 でも同じ機能のテーブルを沢山つくるくらいなら、 各レコードに使用者のIDを埋め込めば、1テーブルで管理できます
mcncx

2020/10/02 13:06

確かに仰る通りですね。 今回はDBを分ける方向でメンテナンスいたします。 ありがとうございました。
guest

0

ちなみに、取引先同士で何かデータを共有するようなことはありません。

(完全な独立データになります)

であればユーザー毎に分けます。
セキュリティ面で他のユーザーのデータを覗かれる危険も避けたいですし。

投稿2020/10/02 10:47

Orlofsky

総合スコア16417

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

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

mcncx

2020/10/02 11:14

確かにセキュリティ的には強固になりますね。 やり方としては「あり」なんですね。 もう少し、他の意見の様子を見させてください。m(__ __)m
mcncx

2020/10/02 13:07

他の方も同じことを仰ってました。 今回はDBを分けることにします。 ありがとうございました。
guest

0

(完全な独立データになります)

システム提供側(つまり質問者側の人達)が使うマスターデータもシステム利用者毎に独立しているのならDBごとに分けた方が良いと思います。

投稿2020/10/02 11:50

hentaiman

総合スコア6426

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

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

mcncx

2020/10/02 13:08

ありがとうございます! そのようにいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問