簡単に言えば、私は私の古い Android プロジェクトのリファクタリングに取り組んでいます。以前はシリアライゼーションを使用していましたが、これは非常に遅く、私が読んでいる限りでは、Android アプリの一般的な考えとしてはかなりお粗末なものでした。ユーザー固有のデータとアプリケーションの読み取り専用データの両方を永続化する別の方法を探しています。
両側にかなりの量のデータがあり、それを保存する「良い」方法があるかどうかはわかりません。基本的に、アプリは小さなRPGです。タイルの 2D 配列として表される「マップ」が多数あります。各タイルには、多数の属性、いくつかの単純なプリミティブまたは列挙型、その他の追加オブジェクト (イベントなど) があり、さまざまなオブジェクトが含まれる可能性もあります。20x20 マップだけで 400 個のタイルを使用すると、保存するデータが大量になります。そのデータの保存に加えて、どのタイルが訪問されたか、どのイベントが正常に実行されたかなど、多くのユーザー固有のデータを保存する必要があります。
私はこのデータを保存する方法を検討してきましたが、何かに決着がつかないようです. 要約すると、XML または JSON と SQLite のどちらかになります。XML または JSON は、将来の変更に関してより柔軟になります。これは、データに柔軟性が必要な場合に適しています。つまり、既存のオブジェクトに新しい属性を追加したり、必要に応じて新しいオブジェクトを追加したりします。SQLite は簡単に順応性がありませんスキーマを変更する必要があるため、おそらくクエリやインデックスなどを調整する必要がありますが、過去に SQLite を実際に使用したことがないため、そのプロセスを簡素化するのに役立つ機能がいくつかあるかもしれません。ただし、可能であれば、データへの高速ランダムアクセスを使用して、すべてを一度にメモリにロードすることを避けたいと考えています。たとえば、あるマップから別のマップに移動するとき、私は' すべてをメモリに保持するのではなく、必要な場合にのみ次のマップをロードします。これは、JSON/XML ファイルをトラバースして潜在的に分散したデータを見つけるのではなく、データを直接クエリできるため、SQLite が優れている場所です。つまり、 、マップをロードしますが、イベントとイベントに含まれるオブジェクトはそのマップに固有のものではない可能性があり、ファイル内の別の場所または別のファイル全体に簡単に存在する可能性があります。ただし、SQLite でデータを正規化すると、多くのテーブルと、かなりの量のオブジェクトの分解/再構築が必要になります。しかし、イベントとイベントに含まれるオブジェクトは、そのマップに固有のものではない可能性があり、ファイル内の別の場所または別のファイル全体に簡単に存在する可能性があります。ただし、SQLite でデータを正規化すると、多くのテーブルと、かなりの量のオブジェクトの分解/再構築が必要になります。しかし、イベントとイベントに含まれるオブジェクトは、そのマップに固有のものではない可能性があり、ファイル内の別の場所または別のファイル全体に簡単に存在する可能性があります。ただし、SQLite でデータを正規化すると、多くのテーブルと、かなりの量のオブジェクトの分解/再構築が必要になります。
ユーザー データの書き込みは、ユーザーが手動でゲームを保存する場合にのみ発生するため、書き込みパフォーマンスは大きな問題ではありません。
私は時々、このようなものに過度に分析して夢中になる傾向があります. どちらの場合も必ずしも「間違っている」わけではなく、極小のことを心配しています。たぶん、私が考慮していない他のケースがあるでしょう。私は Hibernate を使用しており、ORMLite のようなものを使用して多くのデータベースを処理することを検討しましたが、それには多くの改良が必要であり、おそらく他のオプションよりもはるかに多くの作業が必要になります。