日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Gremlin請求參數模板化

阿里云GDB推薦使用String-based Gremlin scripts請求與GDB服務端交互,在使用各SDK發送scripts請求時,需要將請求中參數部分模板化以提升查詢性能。

重要

參數模板化是使用一個Map結構參數bindings,將scripts請求中可變數據參數用占位符替換,同時再將占位符和對應的數據值放到bindings,達到使用相同scripts請求、不同bindings完成同類型Gremlin訪問。

各語言SDK的參數模板化寫法相似,以下給出關鍵部分代碼示例。

常見問題

  • 內部保留字

    • proprty(id, G__id)這個不加引號的id為主鍵,滿足全局唯一性約束

    • 你在設置參數綁定時,不要使用以下g.addV(label).property('id', id)寫法,因為id、label均為系統內部保留字,語句中加引號的id代表一個普通屬性,不滿足唯一性約束。

  • 模板化參數個數限制

    GDB支持bindings中模板化參數的個數最大值是128,不可修改。

  • 模板化中參數的選取

    一類scripts請求通常使用在固定場景時,數據參數中僅有部分是可變的,我們只需要給可變部分建立占位符,固定數據部分可以直接硬編碼到請求中。

    以下示例請求是添加標簽為’person’,帶’name’和’age’兩個屬性的點。

    dsl = "g.addV('person').property('name', G___PV1).property('age', G___PV2)"
    
    bindings = {"G___PV1":"Jack","G___PV2":29}
    client.submit(dsl, bindings).all().join()

    參數dsl不變,使用獲取到的’name’和’age’數據填充bindings。提交請求寫入點數據。

  • List參數支持

    // 帶有list類型,hasId、within等  valueMap見下文,需要使用多個占位符
    String dsl = "g.V().has(G__key1, within(G__value1)).valueMap(true)";
    Map<String, Object> parameters= new HashMap<>(1);
    List<String> values = new ArrayList<>(Arrays.asList("beijing", "shanghai", "shenzhen"));
    parameters.put("G__key1", "location");
    parameters.put("G__value1", values);
    List<Result> result = client.submit(dsl, parameters).all().join();

    部分Gremlin Step參數不支持數組類型參數,比如ValueMap,需要使用多個占位符分別指定多值類型中的元素。

    # valueMap參數不支持數組,參數錯誤
    bindings = {"G___PKs":["name","age"]}
    dsl = "g.V().hasLabel('person').valueMap(G___PKs)"
    client.sumbit(dsl, bindings)
    
    # 使用兩個占位符表示兩個參數,正確
    bindings = {"G___PK1":"name","G___PK2":"age"}
    dsl = "g.V().hasLabel('person').valueMap(G___PK1,G___PK2)"
    client.submit(dsl, bindings).all().join()

Java參數模板化


String dsl ="g.addV(G___label).property(id,G___id).property('name',G___name)";

Map<String, Object> parameters = new HashMap<>();
parameters.put("G___id","sand131_id_5_99"); // 點id參數
parameters.put("G___label","person");       // 點label參數
parameters.put("G___name","Jack");          // 點屬性'name'值參數

List<Result> result = client.submit(dsl, parameters).all().join();

python參數模板化

dsl ="g.addV(G___label).property(id,G___id).property('name',G___name)"

parameters = {}
parameters["G___id"] = "sand131_id_5_99"
parameters["G___label"] = "person"
parameters["G___name"] = "Jack"

results = client.submit(dsl, bindings=parameters).all().result()

.Net參數模板化

string dsl ="g.addV(G___label).property(id,G___id).property('name',G___name)";
Dictionary<string, object> parameters = new Dictionary<string, object> {
                    {"G___id", "sand131_id_5_99"},
                    {"G___label", "person"},
                    {"G___name", "Jack"}};

gremlinClient.SubmitAsync<dynamic>(dsl, parameters);

Nodejs參數模板化

function addVertex1()
{
    return client.submit("g.addV(G___label).property(id,G___id).property('name',G___name)",{
        G___id: "sand131_id_5_99",
        G___label: "person",
        G___name: "Jack"
    }).then(data => {
        console.log("Add Vertex Result: %s\n", JSON.stringify(data));
    });
}

Go參數模板化

dsl := "g.addV(G___label).property(id,G___id).property('name',G___name)"
parameters := make(map[string]interface{})
parameters["G___id"] = "sand131_id_5_99"
parameters["G___label"] = "person"
parameters["G___name"] = "Jack"

results, err := client.SubmitScriptBound(dsl, parameters)