質問: 現在iOSのアプリを開発していて、ローカルで取ったデータをawsのdynamodbに一定の期間で保存する様にしようと思っています。ローカルにも保存されているデータをデータベースにも入れてこちらで管理できるようにする、といった形です。 データは結構な頻度で発生するので、その度にデータベースと通信をしていると頻度が高すぎるきがします。そのため一定期間過ぎたらまとめてデータベースに送る、としたいです。 さらにまた一定の期間が経ったら送る、としたいのですがその際には以前ストアしたデータも変更されている可能性があるので前回アップロードされたデータは全て消して今回の物をアップデートする、としたいです。 この様な方法は何か問題あるでしょうか?その一度に送るデータは何百レコードとかになる場合もあります。毎回全部消して入れ直すというのは無駄にも感じますが、データが更新される度にすでにデータベースに保存されている値を参照してアップデートするのも毎回やっていたら高頻度になってしまう気がします。 このようにバックエンドを持つアプリを作るのが初めてなため、知識があまり無いのですが、この様な構成はどうなのでしょう?
回答: 私も設計をほとんど行ったことが無いため、諸先輩方のご指摘を受けることを覚悟で申し上げますが、 「更新されたレコードを参照して変更を行う」 というやり方で問題ないと思います。 さらに、今回はDynamoDB(NoSQL)なので、 「クエリチューニングの方法が限定される」 と思います。(MongoDBを少し触った程度なので、自信がありませんが......) まずはAWSにテスト用の環境を作るか、手元のマシンの中でDynamoDBを構築して検証するのが良いと思います。 昨今はコンテナ仮想環境技術のおかげで、ローカルマシン内で軽快に動くサーバーを構築することも簡単になっていると思いますし。 自分で構築したローカル開発環境のDynamoDBに読み書きを行う限りでは、AWSの利用料金がかかることはないので、 * 一度全部消して書き直しを行う方法 * 変更箇所だけを書き換える方法 の2つを、ローカル開発環境で自分で体感してみると良いと思います。 以上、少しズレた回答かもしれませんが、お役に立てば幸いです。