簡體   English   中英

OrientDB時間搜索查詢

[英]OrientDB Time Search Query

OrientDB中,我已使用此用例設置了時間序列。 但是,我沒有將我的頂點作為嵌入列表附加到各個小時,而是選擇僅創建一個從小時到與時間相關的頂點的邊。

為了爭辯,可以說每個小時最多包含60個時間Vertex每個時間Vertex都由時間戳標識。 這意味着我可以執行以下查詢以獲得特定的所需頂點:

SELECT FROM ( SELECT expand( month[5].day[12].hour[0].out() ) FROM Year WHERE year = 2015) WHERE timestamp = 1434146922

這個問題的第一部分是將時間戳存儲為Vertex的屬性(如上述查詢)與將其存儲為邊緣(或edge屬性)是否有任何優點/缺點。 在這種情況下,我認為查詢將是:

SELECT expand( month[5].day[12].hour[0].out('1434146922') ) FROM Year WHERE year = 2015

盡管這看起來更優雅,但我有兩個問題。 創建新邊緣類型的開銷。 靈活性,如果您實際上不知道確切的時間戳。

問題的第二部分涉及以下事實:一旦我根據時間隔離了單個頂點,這僅僅是頂點層次樹的頭部。

我當然可以從上面的查詢中獲取@rid ,然后構造一個新查詢,但是我想知道如何才能將上面的內容@rid實現。 例如,假設在所有分層頂點中都有一個稱為activeboolean屬性。 我怎樣都可以得到的頂點是true

回答問題的第一部分:

就像用例文檔中所述:

如果您需要比小時更多的粒度,則可以繼續使用直到需要的時間單位:

Hour -> minute (map) -> Minute -> second (map) -> Second

通過為樹添加更多精度而不是將時間的時間戳存儲在小時中來獲得更大的靈活性。

為樹添加更高的精度的唯一優勢是能夠以一種真正有效的方式按較小的時間單位進行分組。 如果您不需要按一個小時來分組較小的單位,則不必增加精度。

時間戳應該存儲在vertex屬性中,因為過濾將很容易且有效。 查看此博客,了解遍歷時對頂點屬性進行過濾的最佳方法: 改進的SQL過濾

回答問題的第二部分:

獲取特定的頂點,然后在該頂點的層次樹上進行查詢:

<your-hierachical-tree-query> from (select out('edge')[property = "value"] from
(select expand(month[1].day[1].hour[1].min[1]) from Year where year = 2015))

暫無
暫無

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

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