質問: 自己学習で、Ruby on RailsでWebスクレイピングアプリを開発しています。 その中で、NoSQLを使ってみようかと考えています。 アプリケーションの機能は下記の通りです。 ■アプリケーションの機能 ・ログイン・ログアウト ・ユーザ情報登録・変更・削除 ・仮パスワード発行 ・スクレイピングデータ表示 現状はノートPCでの開発段階になります。 ログインログアウト、スクレイピングデータ表示以外の機能は、ユーザー一人当たりの行動はあまりないという想定です。 また、ログインセッション管理の為にmemcachedを使用しています。 当面は私個人のみの利用を考えているので、1日あたり5件~10件程度のログが発生する見積もりでいます。 仮に公開した場合、100人ぐらいの利用を考えており、1日あたり500~1000件程度のログが発生するという想定になります。 下記のデータをDB管理する場合、RDB・NoSQLのどちらが向いているのでしょうか。 また、NoSQLであれば、どのNoSQLを使用したほうがよいのでしょうか。 ●地域情報 【データ】 地域名:テキスト、地域ID:APIから引っ張ってきたIDなのでテキスト 【用途】 ・地域情報そのものは更新・削除はほとんどしない。 ・地域情報の追加の可能性あり。 ・ログイン後、RDBのユーザー情報側で保持しているデータをもとに地域情報を複数取得し、 データを画面表示する。 ●ユーザーのアクションログ情報 【データ】 アクション内容:テキスト、ユーザー識別情報(IDなど):テキストor数値、登録日時:テキストor日付型 【用途】 ・ユーザーが特定のアクションを起こした時に、RDBまたはNoSQLに登録する。 ・基本的に追加のみで、更新・削除は行わない。 ・アクションログは、トラブル対応時の追跡、またはアプリケーション運用改善対応時に参照します。 Ruby:2.2系 Rails:5.1系
回答: 列指向DB、KVS等色々ありますが、どれも一長一短でバランスが良いRDBと比べると、 どうしても数の暴力で速度を出したいケース以外はNoSQLを使うな...というのが一般的な回答かな? 特にRDBは近年のマシンスペックの向上で見直されてきて、 毎秒何千件の書き込みがある...という状況でも採用するケースもあるね。 (ソシャゲの多くはMySQLで頑張ってるという感じ) > > NoSQLを使ってみようかと考えています > > > いいんじゃない? 普段から触っておかないと、いざ速度が求められる大規模プロジェクトで採用しても 落とし穴にハマって大炎上とかあるからね。 > > どのNoSQLを使用したほうがよいのでしょうか > > > 別に速度が必要なわけじゃないから、殆どのNoSQLは不要だと思う。 ただし、スクレイピングの目的ってサイトやユーザーによって違うから、 結果抜き出したいデータもそれぞれ違うだろうね。 フリーフォーマットのJSON投げ込んで管理するMongoDBはスクレイピングの用途に合うかも。