[英]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.