[英]OrientDB Time Span 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
從用例中可以看到,我可以使用UNION
一次性獲得幾個指定的時間分支。
SELECT expand( records ) FROM (
SELECT union( month[3].day[20].hour[10].out(), month[3].day[20].hour[11].out() ) AS records
FROM Year WHERE year = 2015
)
如果您只有少數幾個分支,則此方法效果很好,但如果要獲取給定時間范圍內的所有記錄,則效果不佳。 假設您想獲取所有記錄之間的數據;
month[3].day[20].hour[11] -> month[3].day[29].hour[23]
我可以遍歷時間跨度並創建一個巨大的聯合查詢,但是在某個時候我猜該查詢會太長,而且我猜想它不會很有效。 我還可以完全繞過時間分支,並根據時間戳直接查詢向量。
SELECT FROM Sector WHERE timestamp BETWEEN 1406588622 AND 1406588624
問題是您失去了時間分支所獲得的所有效率。
通過試驗和閱讀有關orientdb中的數據類型的一些知識,我發現:
方括號允許:
選項1(更新):
如果您不想創建所有索引並且范圍很小,則唯一的選擇就是使用工會在多個時間加入。 這是文檔中使用union的查詢示例。
選項2:
如果始終為您的時間創建所有索引,並且在寬范圍內進行過濾,則應按范圍進行過濾。 與選項1相比,它的性能更高,這是因為必須創建要對其進行篩選的所有索引的成本。 有關現場零件的官方文檔。
這是查詢的樣子:
select
*
from
(
select
expand(hour[0-23].out())
from
(select
expand(month[3].day[20-29])
from
Year
where
year = 2015)
)
where timestamp > 1406588622
我強烈建議您閱讀此內容 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.