フロントエンドのみで完結するアプリケーションを作成する場合、IndexedDBをデータベースの選択肢にすることがある。
その設計において長い配列データを格納するときにObjectStoreの値にそのまま格納するか、もしくは別のObjectStoreを作成するかで迷うことが多い。
今回はどちらの方法を採用するかの自分なりに考えた3つの判断軸を紹介する。
配列データのアクセスパターン
アクセス頻度とアクセス方法を考慮する。
具体的には、配列データのアクセス頻度が高い場合は、別のObjectStoreで管理するほうがアクセス性の観点から効率的で高パフォーマンスとなる可能性が高い。
ただし配列データに一括でアクセスすることが多かったり、別のObjectStoreとの関連性が高い場合は単一のObjectStoreにしてしまったほうが高パフォーマンスとなることもある。
データの更新頻度と配列データのサイズ
ObjectStoreの値として配列データを格納する場合、追加や削除などの更新処理をAPIで行うことができないため、ArrayやObjectで処理しデータを置換する必要がある。
その処理はデータのサイズによってはボトルネックになる可能性が高いため、関連するデータ全体の更新頻度と配列データのサイズを考慮する必要がある。
トランザクションのオーバーヘッド
IndexedDBはトランザクションベースであるため、複数のObjectStoreを使用すると、トランザクション管理が複雑になる可能性がある。
単一のObjectStoreを使用する方が、トランザクションの管理が簡単になり、パフォーマンスに良い影響を与えることがあるため、トランザクション処理がどれほど複雑になるかを事前に考慮する必要がある。
注意点
もちろん実際には目的や実装方法、ブラウザによって変動があるため、実機でのパフォーマンステストが必須だが、まずは上記を考慮してみるといいかもしれない。