簡體   English   中英

在 Gremlin 中以原子方式添加兩個頂點和一條邊的最佳方法

[英]Best way to add two vertices and an edge atomically in Gremlin

我將 Gremlin 與 AWS Neptune 一起使用,並嘗試以原子方式添加 2 個頂點和 1 個邊。 我基本上使用了fold() + coalesce()語義來遍歷,這樣我就可以繼續創建尚未存在的元素。 這就是我想出的,想知道人們是否有更好的選擇。

         g.V("America")
                .fold()
                .coalesce(unfold(), addV("Country")
                                        .property(T.id, "America")
                                        .property("Population", 300_000_000))
          .V("India")
                .fold()
                .coalesce(unfold(), addV("Country")
                                        .property(T.id, "India")
                                        .property("Population", 1_000_000_000))
           .V("America")
                .outE("connected")
                .inV()
                    .has(T.id, "India")
                .fold()
                .coalesce(unfold(), addE("connected")
                                        .property("distanceMiles", 8000)
                                        .from(V("America"))
                                        .to(V("India"))).next();

另外,是否有任何提示可以使查詢更具可讀性? 我正在使用 JAVA,並且由於需要鏈接步驟,因此無法將部分查詢提取到它自己的方法中,以便它可以重用。 這種理解正確嗎?

最后一個問題:IntelliJ 以Unchecked generics array creation for varargs parameter的形式向我發出警告,在這種情況下我無法理解。 有人可以幫忙澄清一下嗎?

謝謝!

我可能會為您提供其他變體,但折疊/合並/展開通常是執行此操作的方法,因此代碼最終看起來大致相同。 請注意,目前正在討論對這種模式進行重大改進。

另外,是否有任何提示可以使查詢更具可讀性? 我正在使用 JAVA,並且由於需要鏈接步驟,因此無法將部分查詢提取到它自己的方法中,以便它可以重用。 這種理解正確嗎?

就個人而言,我喜歡你采用的形式,但沒有什么可以說鏈接意味着如果你喜歡這種風格就不能提取部分。 怎么樣:

private Traversal createCountryTraversal(String id, int pop) {
    return __.addV("Country").property(T.id, "America").property("Population", 300_000_000);
}

...

    g.V("America")
                .fold()
                .coalesce(unfold(), createCountryTraversal("America", 300_000_000))
          .V("India")
                .fold()
                .coalesce(unfold(), createCountryTraversal("India",1_000_000_000))
           .V("America")
                .outE("connected")
                .inV()
                    .has(T.id, "India")
                .fold()
                .coalesce(unfold(), addE("connected")
                                        .property("distanceMiles", 8000)
                                        .from(V("America"))
                                        .to(V("India"))).next();

您也可以將遍歷 object 傳遞給不同的函數以在它們中進行鏈接,然后以一種元構建器模式返回遍歷。 或者,如果您想要更優雅的東西,請構建Gremlin DSL

最后一個問題:IntelliJ 以 Unchecked generics 數組創建 varargs 參數的形式給我關於查詢的警告,在這種情況下我無法理解。 有人可以幫忙澄清一下嗎?

我認為這是coalesce()的問題,但是 Gremlin 中的一些 generics 可以在 Java 中生成此警告。 我不確定是否有辦法避免該警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM