マイクロブログタイプのアプリケーションがあります。ゼロ化された2つの主要な基本データベースストアは、MySQLまたはMongoDBです。
大量のデータを非正規化することを計画しています。つまり、投稿に対して行われた投票は投票テーブルに保存され、メインの投稿テーブルでもカウントが増加します。投稿に関連する他のアクションもあります(たとえば、「いいね」、投票する)。
MySQLを使用する場合、検索を高速化するために、一部のデータは固定スキーマよりもJSONに適しています。
例えば
POST_ID | activity_data
213423424 | { 'likes': {'count':213,'recent_likers' :
['john','jack',..fixed list of recent N users]} , 'smiles' :
{'count':345,'recent_smilers' :
['mary','jack',..fixed list of recent N users]} }
アプリケーションの他のコンポーネントもあり、JSONの使用が提案されています。したがって、JSONフィールドを更新するためのシーケンスは、次のとおりです。
PythonスクリプトでJSONを読み取ります。
JSONを更新します
JSONをMySQLに保存します。
これは、、など$push
のアトミック操作を使用したMongoDBでの単一操作でした。また、MongoDBのドキュメント構造も私のデータに適しています。$inc
$pull
データストアを選択する際の私の考慮事項。
MySQLについて:
- 安定しておなじみ。
- バックアップと復元は簡単です。
- 一部のフィールドをスキーマレスJSONとして使用すると、将来のスキーマ変更を回避できます。
- 早期にmemcachedのレイヤーを使用する必要がある場合があります。
- JSON BLOBは、メインの投稿などの一部のテーブルでは静的になりますが、投稿の投票やいいねなどの他のテーブルでは多く更新されます。
MongoDBについて:
- スキーマの少ないデータをドキュメントとして保存するのに適しています。
- キャッシングは後の段階まで回避される可能性があります。
- アプリが書き込みを多用する場合がありますが、MongoDBは、安全でない書き込みが問題にならないポイントでパフォーマンスを向上させることができます。
- 安定性と信頼性についてはよくわかりません。
- バックアップと復元がどれほど簡単かわからない。
質問:
- データの半分がスキーマレスで、MySQLを使用している場合はJSONとして保存されている場合は、MongoDBを選択しますか?
メインの投稿などの一部のデータは重要であるため、安全な書き込みを使用して保存され、カウンターなどは安全でない書き込みを使用して保存されます。このポリシーはデータの重要性に基づいており、書き込みの集中度は正しいですか?
MySQLと比較して、MongoDBの監視、バックアップ、および復元はどのくらい簡単ですか?定期的なバックアップ(たとえば毎日)を計画し、災害時に簡単に復元する必要があります。アプリケーションにとって安全な賭けにするために、MongoDBで私が持っている最良のオプションは何ですか。
安定性、バックアップ、スナップショット、復元、幅広い採用Iedatabaseの耐久性は、NoSQLドキュメントストレージが私の目的をよりよく果たすことができたとしても、MySQLをRDBMS+NoSqlとして使用するように私に指示する理由です。
私が考えているデータベース設計を考慮して、MySQLとMongoDBのどちらを選択するかに焦点を当ててください。RDBMSまたはMongoDBドキュメントのいずれかを使用してデータベース設計を計画するためのより良い方法があるかもしれないことを私は知っています。しかし、それは私の質問の現在の焦点ではありません。
更新:MySQL 5.7以降、MySQLは豊富なネイティブJSONデータ型をサポートし、データの柔軟性と豊富なJSONクエリを提供します。