私のiPhoneアプリケーションは、次のスキーマを持つSQLiteデータベースを使用しています。
- items(id、name、...)->このテーブルには50レコードが含まれています
- tags(id、name)->このテーブルには50レコードが含まれています
- item_tags(id、item_id、tag_id、user_id)
- 類似性(id、item1_id、item2_id、score)
アイテム、タグ、item_tags、および類似性テーブルには事前定義されたレコードが入力されているため、異なるアイテム間の類似性もオフラインで計算されています(アイテムのタグに基づくコサイン類似性アルゴリズムを使用)。
ユーザーは、アイテムにタグを追加したり、後でカスタムタグを削除したりできます。これが発生するたびに、アイテム間の類似度スコアをローカルで更新する必要があります。つまり、サーバーアプリケーションに接続する必要はありません。
今の私の質問は次のとおりです:そうするための最も効率的な方法は何ですか?これまでのところ、iPhoneアプリケーションの起動時に、すべてのアイテムとタグの用語ドキュメントマトリックス(各アイテムのタグ頻度を反映)を計算し、アプリケーションが実行されている限り、このマトリックスをメモリに保持します。タグが追加または削除されるたびに、このマトリックスを使用してデータベースの類似性を更新します。ただし、これはかなり非効率的です。何か提案はありますか?
ありがとう!