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

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

ただいまの
回答率

87.95%

データベースの選択について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 1,526

score 21

いつもお世話になっております。

この度、データベースを使用した開発を行ってみようと考えております。

データベースにも(BaaS、mBaas含め)様々な種類がございますが、
どれを使用すべきかで迷っております。


求められる条件は以下の通りです。

  1. データの更新・削除が容易である
  2. 大量のデータを扱うことに向いている
  3. 複数人が同時にデータを更新しても問題ない(マルチ処理が可能)
  4. カラム数が変動するので、それに対応できる
  5. 高速である

初めは NoSQL の何かにしようかと考えていたのですが、
「データの更新・削除が容易」を満たさないのではないか?ということで考え直そうと思います。

そもそも1〜5が共存することも難しい様な気もしますが...。
皆様のご経験お待ちしております。


(12:30追記)

aro10様
mts10806様

ご確認ありがとうございます。
確認不足のため記述が足りておりませんでした。失礼いたしました。

利用を検討しているアプリケーションのプログラミング言語

使い慣れている PHP を考えております。
ですが、よりよいものがあるのであれば言語含め一新もありかと考えております。

Webアプリなのかクライアントアプリなのかスマートデバイスなのか

Webアプリになります。

・以下も加筆するとより内容がまとまると思います

 1. データの更新・削除が容易である

運用の難しい分散システムも検討できます。
ただ、時間に制約があるため導入がしやすいと嬉しいです。

予算に関しましては、「少ない」となります...。
比較的安価なものだと嬉しいです。

 2. 大量のデータを扱うことに向いている

短期間に大量のデータが増減します。
また、蓄積された大量のデータをバッチ処理も行う予定があります。

大量の基準は現状言い切れないのですが、全体で100万は超えると思われます。
最初は超えないです。徐々に増えるものになります。

 3. 複数人が同時にデータを更新しても問題ない(マルチ処理が可能)

ユーザごとにアカウントを発行し、更新できるものになります。
TwitterなどSNSのように何人もが同時に書き込み(更新)できるようなイメージです。

 4. カラム数が変動するので、それに対応できる

ユーザごとに設定できるイメージになります。

例:

  • Aさんは「ID」「名前」「好きな食べ物」カラムを利用
  • Bさんは「ID」「血液型」「名前」カラムを利用

そのため、実稼働時に変動します。
システム停止は行えません。


当然1〜5が共存するものは無いと思います...。
どれかを切り捨てるならば...といったご意見もお待ちしております。

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • aro10

    2017/08/23 11:28 編集

    ・以下も加筆するとより内容がまとまると思います データの更新・削除が容易である
    >運用の比較的難しい分散システムを検討することもできるのか、クラウドを利用するとすれば予算上限はどのくらいか
    ・大量のデータを扱うことに向いている
    >短期間に大量のデータが増減するのか、蓄積された大量のデータをバッチ処理するのかまた大量の基準(100万件程度などかそれとも何億件、それ以上)
    ・カラム数が変動
    >メンテナンス期間を設けてシステム停止はどの程度許容されるか、それとも実稼働時にカラム数は柔軟に変動するのか

    キャンセル

  • m6u

    2017/08/23 13:27

    大量のデータって、何万行とか目安はあるのでしょうか。また、同時アクセスしそうな想定するユーザー数は何人くらいでしょうか。あと、ER図を起こしたりデータ構造の設計についてはどのくらい経験がお有りでしょうか。

    キャンセル

  • Rio18

    2017/08/25 09:25

    m6s様 ご確認ありがとうございます。データ数は増え続けるものとなりますので、具体的な数値は言えませんが最低100万レコードほどは想定しております。ユーザ数も同様ですが、瞬間であれば1000や(多くて)10000程はありえると思われます。ER図・データ図に関しましては「経験があります!」と言えるほどは経験がないと考えております。

    キャンセル

回答 1

checkベストアンサー

+3

PHPでのWebアプリ開発ということで、普段はWebフレームワークはLaravelを使っていますが、何度も取得する処理はキャッシュを利用して、非同期で行えるものはキューに回し、API部分はLumenというAPI向けにまとめられた物を切り出して利用したりと切り分けるとPHPでもそこそこの規模でも許容できる費用で十分使えます。
それでも間に合わない場合はPHPならPhalconフレームワークやGo言語に切り替えるといった事が考えられます。

予算が限られているとは、試験的な段階のサービスだと思うので、PHPとMySQLかPHPとMongoDBを使って開発すると良いかもしれません。
「カラム数が変動するので、それに対応できる:にはMongoDBはJson構造で保存するので柔軟な形式のデータ保存が可能です。
将来を考えるとMySQLでも5.7以降であればJSON形式でデータを保存できるので、予算が少ない試験的な段階ではVPS等で数千円で運用してその後AWSのAmazon Aurora等に移行という方法も考えられます。
MongoDBもマネージド・サービスはMongoDB mLab等があるので将来的な移行も検討できます。
性能としては全体で100万件程度(日に日に徐々に増えるものとして)のデータであれば目的に特化したデータベース以外はどのデータベースを使っても大丈夫かと思いますので基本的には使い慣れたデータベースで良いかと思います。

  1. データの更新・削除が容易である > 有名なデータベースであればクライアントライブラリなどは大方整っている。またCLIのツールやGUI管理ツールも存在する
  2. 大量のデータを扱うことに向いている > MySQL等のRDBSでもMongoDBでもきちんとインデックスやサーバースペック、SSDを整えれば可能
  3. 複数人が同時にデータを更新しても問題ない > 基本的に複数アクセスを想定してデータベースは作られているので、トランザクション処理が必要ならばRDBS、必要でない部分はNoSQLも検討
  4. カラム数が変動するので、それに対応できる > MySQLならばJSON型を利用、あるいはMongoDBを利用

あとは、mBaas等の検討については、FirebaseやMobile backend等がありますが、機能が特化している分開発途中で要件的に詰まる事もあるので時間に制約があるとの事で、検討を考える場合は詳しい人に相談すると良いかと思います。
クラウドの利用は、AWSやMicrosoft Azure、GCP等でDB用のサービスがありますが、これもそれぞれで使い方や費用計算が違うので、検討を考える場合は時間制約の中では開発者で触った事があるものか詳しい人に相談すると良いかと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/08/29 10:57

    aro10 様

    お忙しい中、詳しいご回答ありがとうございました。
    諸々勉強になりました。

    キャンセル

  • 2017/08/29 11:02

    すみません、コメント返信できていると思ってできていませんでした。
    組み合わせのパターンとしては、RDBSでは負荷が高いものや運用した場合にサーバーコストがかかる部分(Webのログ収集等)をMongoDB等のNoSQLにすると言ったことが考えられますが、管理が複雑になると本末転倒なのでMongoDBに精通したエンジニアの協力を受けられる前提にしたほうが良いかと思います。

    キャンセル

  • 2017/08/29 21:50

    aro10 様

    わざわざすみません!
    内容について承知いたしました。

    慎重に進めたいと思います。
    ありがとうございました。

    キャンセル

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

  • ただいまの回答率 87.95%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る