我正嘗試使用SPARQL從三重存儲中生成一些用戶統計信息。請參閱下面的查詢。這怎麼能改進?我在這裏做什麼壞事?爲什麼這消耗這麼多的記憶? (請參閱本文結尾處的背景故事)具有多個聚合的SPARQL查詢超出內存限制
我更喜歡在三重商店內進行聚合和連接。拆分查詢意味着我必須在數據庫之外「手動」加入結果,從而失去了三重商店的效率和優化。沒有理由不需要重新發明輪子。
查詢
SELECT
?person
(COUNT(DISTINCT ?sent_email) AS ?sent_emails)
(COUNT(DISTINCT ?received_email) AS ?received_emails)
(COUNT(DISTINCT ?receivedInCC_email) AS ?receivedInCC_emails)
(COUNT(DISTINCT ?revision) AS ?commits)
WHERE {
?person rdf:type foaf:Person.
OPTIONAL {
?sent_email rdf:type email:Email.
?sent_email email:sender ?person.
}
OPTIONAL {
?received_email rdf:type email:Email.
?received_email email:recipient ?person.
}
OPTIONAL {
?receivedInCC_email rdf:type email:Email.
?receivedInCC_email email:ccRecipient ?person.
}
OPTIONAL {
?revision rdf:type vcs:VcsRevision.
?revision vcs:committedBy ?person.
}
}
GROUP BY ?person
ORDER BY DESC(?commits)
背景
的問題是,我得到的錯誤 「已達到QUERY內存限制」 在AllegroGraph(請參閱我的相關SO question)。由於存儲庫只包含大約200k的三元組,容易放入ca的(ntriples)輸入文件中。 60 MB,我想知道如何執行查詢結果需要超過4 GB的RAM,大約高兩個數量級。
鑑於代碼已經崩潰的合理大小的輸入,這不符合「工作代碼」。我將它移至Stack Overflow,我認爲這更合適。 – sepp2k
可能重複[是否有可能在SPARQL中聚合兩個資源?](http://stackoverflow.com/questions/12325974/is-it-possible-to-aggregate-over-two-resources-in-sparql) –