私は、複数のデバイス間でユーザーデータを同期するクラウド同期アプリケーションを構築しています。私は交差点にあり、サーバー上のデータをファイルとして保管するか、リレーショナル・データベースに保管するかを決定しています。私はAmazon Web Servicesを使用しており、代わりにテーブルにデータを格納することを選択した場合は、S3をユーザーファイルまたはそのデータベースサービスに使用します。保存しているデータは、10秒ごとのアプリケーションの状態です。これは、格納されるユーザーあたりの平均行数が100,000であり、現在のユーザー数が2万人で、バットから20億行分のデータがあるため、データベースに格納するのは問題になる可能性があります。その情報をファイルに保存する方が良いでしょうか?これは、1人のユーザーあたり6メガバイトの合計約100個のファイルになるためです。ファイルまたはデータベースを使用する必要がありますか?
0
A
答えて
1
コメントで説明したように、私はこれらをファイルとして保存します。
S3はキーストアと価値ストアに完全に適しています。変更を比較して不必要に重複するデータがないことを確認できれば、関連するデータをダウンロードすることで同期がはるかに簡単になりますS3からのファイルとそれらをクライアント側で同期させます。
大量の行を格納してクライアントにすばやく提供できるデータベースサーバーを操作する必要がないため、大幅なコスト削減が実現します。
バックグラウンドビューまたは管理ビューとして複数のユーザーに統計情報/データ/情報を集約する場合、これらのファイルのデータを解析するのが難しいことがあります。値を集計するために単純なSQLクエリを書くことはできず、関連するファイルを開き、awk
や正規表現などのようなものを処理してから、そのように値を計算する必要があります。
あなたは、そのユーザーに関連する特定のファイルのクライアント側でこれを実行している可能性が高いので、そこにはおそらくいくつかの重複があります。
関連する問題
- 1. ジオコーディング - APIまたはデータベースを使用する必要がありますか?
- 2. arraryまたはsqliteデータベースを使用する必要がありますか?
- 3. テキストファイルまたはデータベースを使用する必要がありますか?
- 4. REST APIまたはSQLデータベースを使用する必要がありますか?
- 5. イメージなどのファイルにファイルシステムファイルまたはデータベースを使用する必要がありますか?
- 6. サブタイプ/スーパータイプはデータベースで使用する必要がありますか?
- 7. iOSはNSMutableArrayまたはNSMutableDictionaryを使用する必要がありますか?
- 8. 私はurandomまたはopenssl_random_pseudo_bytesを使用する必要がありますか?
- 9. Cordova:データベースを取得するのにphpまたはnode.jsを使用する必要がありますか?
- 10. 私はsingletableviewを使用する必要がありますか?
- 11. はcaptchaを使用する必要がありますか?
- 12. 私はフォームタグを使用する必要がありますか?
- 13. イメージをデータベースまたはフォルダに保存する必要がありますか?
- 14. アプリケーションまたはデータベースにUUIDを生成する必要がありますか?
- 15. @synthesizeをまだ使用する必要がありますか?
- 16. データベース設計:マッピングテーブルを使用する必要がありますか?
- 17. 複数のデータベースを使用する必要がありますか?
- 18. NoSQLデータベースでインデックスを使用する必要がありますか?
- 19. クロージャコンパイラは、CommonJSスタイルでjsファイルを使用する必要がありますか?
- 20. AppDomain.CurrentDomain.BaseDirectoryまたはSystem.Environment.CurrentDirectoryを使用する必要がありますか?
- 21. Cloudantでセレクタまたはビューを使用する必要がありますか?
- 22. アプリケーションにAsyncTaskまたはIntentServiceを使用する必要がありますか?
- 23. JavaScriptでwindow.navigateまたはdocument.locationを使用する必要がありますか?
- 24. データセットまたはデータテーブルを使用する必要がありますか?
- 25. ビューでディスパッチイベントまたはファイアイベントを使用する必要がありますか?
- 26. JComboBoxでEnumまたはStringを使用する必要がありますか?
- 27. Developer EntityまたはUser Entityを使用する必要がありますか?
- 28. マルチテーブルまたはマルチテーブルを使用する必要がありますか?
- 29. asyncioでプロトコルまたはストリームを使用する必要がありますか?
- 30. GetまたはLoad-nhibernateを使用する必要がありますか?
「保存しているデータがアプリケーションの状態です」ということを具体的に説明できますか?リレーショナルデータベースにとってより賢明なものにするために、そのデータを列に正規化できますか?前回のアップデート以降に加えられた変更を比較して、すべてをすべてダンプするのではなく、それらを保存することはできませんか? –
@MarcFowlerこれは、外部のマシン(酸素レベル、窒素レベル)から10秒ごとにさまざまなデータを取得するプロフェッショナルなアプリケーションのため、そのように構成する必要があります。そして、私は変更を同期するだけですが、そのユーザーの特定の行を照会するのに20億行はありませんか? –
両方を使用することを検討してください。それは何のための良い、それのo/sのためのデータベースです。だから、通常、それは非ブロブストレージ、2つの融合を意味する – Drew