2017-07-13 41 views
2

如果給定數據庫d上的任意數據組查詢q,是否可以從q中導出查詢x,以便在針對d運行時返回生成結果所需的所有相關基準r q對d? q對d的結果應該等於q對r的結果。Datomic - 獲取與任意查詢相關的所有數據集

我正在嘗試與datascript客戶端同步datomic。我事先知道所有的查詢,並且我想創建datascript中的datomic數據庫的一個子集,限制爲與客戶端查詢相關的數據。爲了簡單起見,假設沒有參數化查詢,儘管用期望佔位符可能對任意查詢輸入參數實現相同的效果,並且允許它們的解決方案將是優選的。

我知道我可以通過修改它並對數據庫運行它來獲取查詢返回的所有實體id,然後觸及所有這些實體,但我希望找到更有效的方法,只返回實體的子集與查詢相關的基準,並且可以從查詢q ALONE派生而不必首先在d上運行q。

謝謝。

回答

3

我不這麼認爲 - 查詢不直接在datoms上工作。他們從datoms開始,如果你查詢數據庫,但是轉換爲集合,並且所有後續操作都在集合上完成。這使得查詢可以像在Datomic索引上運行一樣運行在任意集合上。

我認爲https://github.com/mpdairy/posh試圖做查詢分析,找出它觸及哪些datoms。也許看一看?

+0

感謝Nikita,所以至少我應該能夠修改查詢綁定所有實體ID,然後查詢添加的所有事務的數據組?對那些實體是正確的?效率不高,但應導致所有相關數據? – Scott

+0

如果你的查詢沒有謂詞,規則和總是查詢同一個數據庫,我認爲它可以完成,當然 –

相關問題