0

Userというモデルがあり、ユーザーにはプロパティrelatedUsersがあります。これは、一般的な形式では整数の配列です。これで、ユーザーのrelatedUsers配列に特定の番号が存在するかどうかを確認したい場合があります。これを行うには2つの方法があります。

  1. インデックス付きの値(またはそうでない場合もある)を含む標準のPythonリストを使用し、INクエリを実行して、その番号がそこにあるかどうかを確認します。

  2. そのユーザーへのキーを持って、JSON文字列形式の配列であるプロパティrelatedUsersの値を取得します。文字列をデコードし、番号がそこにあるかどうかを確認します。

どちらがより効率的ですか?ナンバー1はオプション2よりも読み取りコストが高くなりますか?また、各値のインデックス作成には書き込みコストがかかるため、1番の書き込みには2番よりもコストがかかります。インデックスを作成しない場合はどうなりますか?どのソリューションがより良いでしょうか?

4

1 に答える 1

4

オプションごとのコストと機能は次のとおりです。

  1. インデックス付きリストに値を入れると、はるかにコストがかかります。リスト内の値ごとに 1 回の書き込みのコストが発生します。これは、ユーザーの友達の数に応じて爆発的に増加する可能性があります。特定の種類の複合インデックスがある場合、このコストの爆発がさらに悪化する可能性があります。良い面は、この情報に対してクエリを実行できることです。たとえば、特定のユーザーと友達になっているユーザーのリストのクエリを取得できます。

  2. ここでは、追加のインデックスや書き込みのコストはかかりません。問題は、クエリ機能が失われることです。

現在のユーザーの友達リストのみをチェックすることがわかっている場合は、必ずオプション 2 を使用してください。それ以外の場合は、設計をもう少し慎重に検討する必要があります。

于 2012-04-15T03:46:48.000 に答える