为什么不总是使用EnableCrossPartitionQuery

时间:2019-02-25 10:51:29

标签: azure-cosmosdb

如果我的cosmos数据库有多个分区,是否有任何理由不将public function yajraDT() { $users = User::all(); return Datatables::of($users) ->addColumn('delete', function (User $users) { return '<a href="admin/user/'.$users->id.'></a>'; }) ->rawColumns(['delete']) ->make(true); } //ROUTE Start Route::get('admin/user/delete/{id},'Users@destroy'); //ROUTE End //Remove User public function destroy($id){ try{ User::where('id',$id)->delete(); return back()->with([ 'message' => 'User removed successfully." ]); }catch(Exception $e){ return back()->with([ 'message' => $e->getMesssage() ]); } } 设置为 true

我知道如果运行查询可能会遇到多个分区,则很有必要。但是,如果查询使用有效的分区键并且肯定只会命中一个分区,由于我将该标志设置为true,会导致性能损失或成本增加吗?

1 个答案:

答案 0 :(得分:1)

  

但是,如果查询使用有效的分区键怎么办,肯定会   仅命中一个分区,是否有任何性能损失或提高   花费是因为我将该标志设置为true?

据我所知,您需要为分区集合设置分区键,即使您仍将EnableCrossPartitionQuery设置为true,费用也不会改变。因为请求仅扫描您已经设置的特定分区。我做了一个样本测试,然后尝试验证它。

    FeedOptions feedOptions = new FeedOptions();
    PartitionKey partitionKey = new PartitionKey("A");
    feedOptions.setPartitionKey(partitionKey);
    feedOptions.setEnableCrossPartitionQuery(true);

    FeedResponse<Document> queryResults = client.queryDocuments(
            "/dbs/db/colls/part",
            "SELECT * FROM c",
            feedOptions);

    System.out.println("Running SQL query...");
    for (Document document : queryResults.getQueryIterable()) {
        System.out.println(String.format("\tRead %s", document));
    }

    System.out.println(queryResults.getRequestCharge());

enter image description here

我认为也许您不必为这个问题而苦恼。仅当分区集合查询的作用域不限于单个分区键值时,才需要使用EnableCrossPartitionQuery选项。如果您知道特定的分区键,则无需设置EnableCrossPartitionQuery