【问题标题】:Datomic - Get all datoms relevant to an arbitrary queryDatomic - 获取与任意查询相关的所有 datom
【发布时间】:2017-07-13 04:00:01
【问题描述】:

给定数据库 d 上的任意 datomic 查询 q,是否有可能从 q 派生一个查询 x,当对 d 运行时将返回在 d 上产生 q 的结果所需的所有相关数据 r? q 对 d 的结果应该等于 q 对 r 的结果。

我正在尝试将 datomic 与 datascript 客户端同步。我事先知道所有查询,并且我想在 datascript 中创建我的 datomic 数据库的一个子集,限制为与客户端查询相关的数据。为简单起见,假设没有参数化查询,尽管 Id 期望使用占位符,对于任意查询输入参数可能会达到相同的效果,并且允许它们的解决方案将是首选。

我知道我可以通过修改查询并针对 db 运行查询来获取查询返回的所有实体 id,然后触摸所有这些实体,但我希望有更有效的方法,只返回实体数据的子集与查询相关,并且可以从查询 q ALONE 派生,而无需先在 d 上运行 q。

谢谢。

【问题讨论】:

    标签: datomic datascript


    【解决方案1】:

    我不这么认为——查询不能直接作用于 datoms。如果您查询数据库,它们以 datoms 开始,但被转换为集合,并且所有后续操作都在集合上完成。这允许查询在任意集合上运行,就像在 Datomic 索引上运行一样。

    我相信https://github.com/mpdairy/posh 试图进行查询分析以找出它接触到哪些数据。可以看看吗?

    【讨论】:

    • 谢谢 Nikita,所以至少我应该能够修改查询以绑定所有实体 ID,然后查询添加的所有事务的 datomic 吗?对那些实体,对吗?它的效率较低,但应该产生所有相关的 datoms?
    • 如果您的查询没有谓词、规则并且总是查询同一个数据库,我认为可以做到,当然
    猜你喜欢
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 2022-08-03
    • 2012-06-08
    相关资源
    最近更新 更多