绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
java商品太多搜索很慢,Datomic的递归Datalog查询确实很慢
2022-03-25 14:29:51

我目前正在评估Datomic的存储和查询形成本体的解析符号的用例 . 总共有225122个符号(实体)在数据库中(因此它是一个相当大的本体,但对于数据库来说不应该是一个大问题) .

结构非常标准,符号有

包含它们的父符号(如子符号等)

supersymbols(他们继承的符号)

为了能够很好地访问这些符号,我们为每个符号都有一个的 name . 这相当于以下Datomic架构:

[{:db/ident :ml/name,

:db/valueType :db.type/string,

:db/cardinality :db.cardinality/one,

:db/unique :db.unique/identity}

{:db/ident :ml/parent,

:db/valueType :db.type/ref,

:db/index true,

:db/cardinality :db.cardinality/one}

{:db/ident :ml/superclass,

:db/valueType :db.type/ref,

:db/index true,

:db/cardinality :db.cardinality/one}]

现在我有了基本的递归查询“给我所有符号(传递)包含在符号 p 中的符号” . 在Datomic术语中:

(def rules

'[

[(ubersymbol ?c ?p) (?c :ml/parent ?p)]

[(ubersymbol ?c ?p) (?c :ml/parent ?c1) (ubersymbol ?c1 ?p) ]

])

(q '[:find ?c ?n :in $ % :where

(ubersymbol ?c ?d) [?d :ml/name "name of a root symbol"] [?c :ml/name ?n]]

current-db rules)

查询本身(所以中等大小的符号)需要在 5 和 5.5 秒之间,并返回80次点击 . Not milliseconds, but real seconds . 这只是我想要询问的关于数据集的基本的查询(它旨在从Web工具中使用,以帮助建模者理解本体的结构) .

我正在运行 datomic-pro-0.9.5554 ,带有内存数据库并使用对等库(我按照"getting started"指南中的说明启动了服务器 .

非常感谢帮助为Datomic提供案例 .

马库斯

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Datomic
创建时间:2022-03-25 14:11:12
Datomic
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • gaokeke123
    专家
戳我,来吐槽~