11

私は Facebook と非常によく似た機能を持つ新しいアプリを構築している最中です。明らかに 4 億人のユーザーに対処する必要はありませんが、依然としてかなりの数のユーザー ベースに使用され、そのほとんどが要求するでしょう。それは非常に速く実行されます。

私は MySQL について豊富な経験を持っていますが、ソーシャル アプリには複雑さがあり、MySQL もあまり適していません。Facebook や Twitter などの多くのデータが Cassandra に移行したことは知っていますが、どこまで行ってよいかわかりません。

たとえば、ユーザー データ (ユーザー名、パスワード、アドレスなど) を Cassandra に保存しますか? 電子メール、コメント、ステータス更新などを Cassandra に保存しますか? また、neo4j のようなものは、グラフ データベースであるため、ソーシャル アプリで使用される友人関係を表すのにはるかに優れていることもよく読みました。私は NoSQL ルートを開始したばかりなので、ガイダンスをいただければ幸いです。

誰でもこれについて私にアドバイスできますか?私が一般的になりすぎていないことを願っています!

4

4 に答える 4

5

たとえば、ユーザー データ (ユーザー名、パスワード、アドレスなど) を Cassandra に保存しますか?

いいえ、一貫性を保証するものではないためです。Cassandra は結果整合性を備えています。確かに、特定のユーザー アカウントのデータに同時実行性があるべきではありませんが、私はそれに賭けたくありません。全文検索やメッセージの受信箱などでは一貫性は必要ないかもしれませんが、セキュリティ関連のあらゆるものについては一貫性が必要です。

また、neo4j のようなものは、グラフ データベースであるため、ソーシャル アプリで使用される友人関係を表すのにはるかに優れていることもよく読みました。

私は、適切な仕事に適切なツールを使用することの大ファンです。私は neo4j を使用したことはありませんが、db4o (オブジェクト データベース) を使用しており、非常に役に立ちます。ニーズをネイティブにサポートするツールを使用すると、開発が容易になります。グラフが必要であり、SQL でグラフを操作するのは面倒なので、実際に見て、特定のニーズに合っているかどうかを評価することをお勧めします。

選択が自然である限り (つまり、それぞれのデータベースが特定のジョブに役立つ、グラフ用のグラフ データベース、テーブル用のテーブル、トランザクションの安全性が必要なあらゆるもの用の ACID データベースなど)、データベースを混在させることは私には良い考えのように思えます。 ..)。

于 2010-04-05T23:54:55.253 に答える
5

MySQL と Cassandra でテストを行うことをお勧めします。私の仕事の 1 つで PostgreSQL と MongoDB のどちらかを選択しなければならなかったとき、両方の何百万ものレコードのクエリ時間を比較したところ、約 1,000 万のレコードで Postgres が適切な応答時間を提供することがわかりました。

少なくとも 2 年間はその数の記録を達成できないことはわかっていました。また、Postgres の経験があったため (当時、MongoDB はあまり成熟していませんでした)、Postgres を選択しました。

私の言いたいことは、おそらく MySQL ベンチマークを見て、自分でいくつかのパフォーマンス テストを行い、データセットのサイズとそれがどのように成長するかを見積もり、その方法で十分な情報に基づいた決定を下すことができるということです。

リレーショナル データベースと非リレーショナル データベースを混在させることについても検討しましたが、2 種類のソフトウェアを維持し、データを取得するためにかなりの量のグルー コードを記述する必要があるため、面倒だと判断しました。両方からのデータ。Cassandra なら、すべてのデータを完全に保存できると思います。

于 2010-04-05T23:33:48.903 に答える
1

Facebook はCassandra に移行したのではなく、彼らが作成したのです。:)私の知る限り、noSQL DBMSはリレーショナルデータベースと並行して実行する必要はなく、言及することさえありません(修正のためにmnemosynに感謝します。FacebookはOracleとCassandraを使用しています)。これは逆の例です (ユーザー情報を noSQL DB に保存する)。

Cassandra が Facebook に適しているのであれば、あなたのプロジェクトにも適している可能性が高いと言えます。永続化ロジックを抽象化して、別のものに切り替える可能性がある場合は、そうしても問題ないかもしれません。

免責事項: 私は (まだ?) noSQL データベースを実際に使用した経験がありません。

于 2010-04-05T22:21:17.200 に答える
0

Cassandra は優れた分散ソリューションを提供します。おそらく、MySQL よりも Facebook のようなプラットフォームに適しています (スケーリングが必要な場合)。ただし、Cassandra は、多対多の関係が課題となるデータ関係には適していません。Cassandra に関連付けられたグラフ データベースは、大容量のニーズに加えて、非常に高速な関係クエリ機能の両方を提供します。私たちは 2 つのテクノロジを組み合わせたものに取り組んでおり、プラットフォームが提示する要件の種類に常に関心を持っています。特定のデータ関連の問題を処理する方法についてご質問がある場合は、ぜひお聞かせください。解決のお手伝いができるかもしれません。

于 2010-06-06T22:15:33.690 に答える