作業中のプロジェクトのデータベースを設計しようとしています。ビデオ、写真、テキスト、オーディオなど、複数の種類のデータを保存する必要があります。私はそれらを保存する必要があり、phpを介してそれらを頻繁に照会する必要があります。私が取り組んでいるこのプロジェクトはソーシャルネットワークであり、通知とメッセージを介してユーザーを接続する必要があります。ここに質問があります:NoSQL DBを使用してデータを保存し、通知システム(MongoDBやRedisなど)またはMySQLを使用すると、この種のシステムでも役立ちますか?私の英語は申し訳ありませんが、私のような英語の初心者には技術的なことを説明するのはとても難しいです。君たちありがとう。
2 に答える
あなたはどちらの方法でも行くことができます。しかし、バイナリ データを db に格納することは、通常、最も効率的な方法ではありません。それをファイルシステムに保存し、パスをDBに入れることをお勧めします。
SQL 技術、つまり MySQL の問題は、通常、そのバイナリ テキストを BLOB 内に配置する必要があり、その時点ですでに間違っていることです。
考慮すべきもう 1 つの点は、MongoDB であれ SQL であれ、ファイル システムへのアクセスはデータベースへのアクセスよりも常に高速であるということです。ただし、データベース ストレージにはいくつかの利点があります。最終的に、あなたのサイトで (少し人気が出た場合)、CDN が必要であることがわかります。これらの種類の分散ネットワークはコストがかかる可能性がありますが、MongoDB のようなものを使用すると、他のリージョンでデータのレプリカをスピンアップし、必要に応じてバイナリ データを複製することができます (CDN のように TTL を使用することもできます)。
したがって、これは考慮すべき領域の 1 つであり、ファイル システムはほとんどの場合、ソーシャル ネットワークのような負荷の高いサイトの正しい答えではありません。ただし、Facebook 自体でさえ、ファイル システムから直接サービスを提供する必要があるとは言えません ( https://blog.facebook.com/blog.php?post=2406207130。この面で変更されました):
また、ディスク読み取りをできるだけ少なくしてファイルを提供するように調整された独自の専用 Web サーバーも開発しました。何千ものハード ドライブ スピンドルがあっても、トラフィックが非常に多いため、I/O (入力/出力) は依然として懸念事項です。私たちの squid キャッシュは負荷を軽減するのに役立ちますが、squid は私たちの目的に対して十分に高速でも効率的でもありません。そのため、独自の Web アクセラレーターも作成しています。
ただし、非常に大規模なインフラストラクチャを備えているため、データベース ストレージと CDN のどちらを使用するかを検討する必要があります。
個人的には、コンテンツ配信ネットワークと、他のサイトが画像を提供する方法について調査する必要があると思います。Google のいたるところで情報を見つけることができます。最近まで CDN に Akamai を使用していた Facebook を具体的に検索できます。