0

userIdでパーティション化されたエンティティ(Request)があります。userIdごとに、インデックスがありますよね?

ただし、userIdでリクエストをすばやく検索したいと思います。それを行う簡単な方法はありますか?または、パーティションを作成するために別のフィールドを選択する必要がありますか?

4

1 に答える 1

1

必要に応じて、2つの方法で分割できます。あなたがこれをするとしましょう

public class Request {
    @NoSqlId
    @NoSqlIndexed
    private String uniqueId;

    @NoSqlIndexed
    @NoSqlPartitionedBy
    @NoSqlManyToOne
    private User user;

    @NoSqlIndexed
    @NoSqlPartitionedBy
    private LocalDate beginningOfEachMonth;
}

必要に応じて、Userの代わりにプライベート文字列userIdを使用できます;)。

これで、月の初めをキーとして使用して時間パーティションにクエリを実行し、クエリを実行するか、ユーザーをキーとしてユーザーパーティションにクエリを実行できます。

名前付きクエリを2つに分割すると、次のようになります。

query="PARTITIONS("user", :user) SELECT r FROM TABLE as r"

テーブルをユーザーごとにパーティション化するだけの場合は、次のように記述できます。

query="PARTITIONS(:user) SELECT r FROM TABLE as r"

注:私が持っているように主キーにインデックスを付ける必要がある唯一の理由は、主キーの範囲クエリのためです.... pk =何らかの値である等しいクエリの場合、次のことができるので、明らかにインデックスは必要ありません。主キー自体で検索します。

ディーン

于 2012-10-17T22:54:40.243 に答える