質問: いつもお世話になっております。 この度、データベースを使用した開発を行ってみようと考えております。 データベースにも(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が共存するものは無いと思います...。 どれかを切り捨てるならば...といったご意見もお待ちしております。 よろしくお願いいたします。
回答: 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用のサービスがありますが、これもそれぞれで使い方や費用計算が違うので、検討を考える場合は時間制約の中では開発者で触った事があるものか詳しい人に相談すると良いかと思います。