问题标签 [datalog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
332 浏览

prolog - 将 Datalog 与 C++ 应用程序集成

我对编程并不陌生,但我对 Datalog 很陌生。我整个星期都在练习 Datalog,对数据库进行查询非常有用。我很难弄清楚的一件事是如何将 Datalog 与 C++ 应用程序一起使用。

例如,我想要做的是,将用户输入作为美元金额,并使用该数字运行查询,以查看美元金额是否小于数据库中某个事实的美元金额。这可以通过可能的规则来完成。

到目前为止,我还没有看到任何将 Datalog 与 C++ 应用程序集成的方法。作为 Datalog 集成的初学者,我如何设置我的程序来进行数据记录查询等?

0 投票
1 回答
1513 浏览

recursion - Datomic 的递归数据日志查询真的很慢

我目前正在评估 Datomic 用于存储和查询构成本体的已解析符号的用例。数据库中总共有 225122 个符号(实体)(所以它是一个相当大的本体,但对于数据库来说应该没什么大不了的)。

结构很标准,符号有

  1. 包含它们的父符号(如子符号等)
  2. 超级符号(它们继承的符号)

为了更好地访问符号,我们name为每个符号设置了一个唯一的。这增加了以下 Datomic 模式:

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

查询本身(因此是一个中等大小的符号)需要55.5秒并返回 80 个命中。不是毫秒,而是真正的秒。这只是我想询问的关于数据集的最基本查询(它旨在从网络工具中使用,以帮助建模者理解本体的结构)。

我正在运行datomic-pro-0.9.5554,使用内存数据库并使用对等库(我按照“入门”指南中的说明启动了服务器。

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

马库斯

0 投票
0 回答
368 浏览

sql - 从 SQL 到 Datalog 的转换

我正在考虑将 SQL 查询转换为 Datalog。有没有可以完全做到这一点的工具?如果有,我可以知道我可以参考哪些工具吗?

0 投票
1 回答
338 浏览

clojure - 原子查询性能改进

我在 Datomic 数据库中有一个与此类似的模式:

随着时间的推移,这些任务是相当静态的,但每个任务平均每 5 分钟添加和删除一次子任务。我想说的是,在任何给定时间,每个任务平均有大约 40 个子任务,其中包含(几乎总是,但也有一些例外)一个参与者。我使用 Datomic 的唯一目的是能够看到任务是如何随着时间演变的,即我想看看任务在给定时间的样子。为了实现,我目前正在做类似的事情:

不幸的是,这非常慢。如果租户有很多任务(比如 20 个),每个任务包含大约 40 个子任务,则从这个函数返回可能需要将近 60 秒。我在这里做明显错误的事情吗?有可能加快这个速度吗?

更新:整个数据集大约为 2 Gb,对等方有 3.5 Gb 的内存(但如果我将其减少到 1.5 Gb 似乎没有任何区别)并且交易者有 1 Gb 的内存。我正在使用免费的 Datomic。

0 投票
2 回答
841 浏览

clojure - 查找 ref-to-many 属性包含所有输入元素的实体

假设我有entry具有 ref-to-many 属性的实体:entry/groups。我应该如何构建查询以查找其:entry/groups属性包含我所有输入的外国 ID 的实体?

下一个伪代码将更好地说明我的问题:

作为 Datomic/Datalog 的新手,我用尽了所有选项,因此感谢您提供任何帮助。谢谢!

0 投票
1 回答
247 浏览

database - 是否可以将数据日志通配符“_”传递给参数化查询?

是否可以将通配符传递给_参数化查询?像这样的东西:

当我按照上面的方法尝试时,它抛出了一个错误。有没有办法做到这一点?

我知道我可以通过如下查询获得所有内容:

(d/q [:find ?e:where [?e:type]] db)

但我的目标是避免在我不想按:type. 例如,用例是可能过滤或不过滤结果的 API 端点。

0 投票
1 回答
704 浏览

datomic - datomic 中的子查询支持

datomic 支持子查询还是可以在查询中模拟?那基本上是一个:find内另一个:find

我正在尝试在查询/数据库本身而不是在应用程序中执行数据的分析转换。

0 投票
1 回答
247 浏览

python - 如何在 pyDatalog 中创建动态算术事实?

我需要创建一个简单的 Datalog 机器(这意味着我的输入是 2 个文件:1.facts,2.rules。)我目前正在使用 pyDatalog 包。我需要解析事实并动态创建术语。

从 pyDatalog 的教程中,我找到了这个加载事实的示例:

在这种情况下,我只需要解析文件中的字符串。

如何动态加载算术项?(例如:SUM(X,Y,Z)-> Z = X + Y)

谢谢!

0 投票
1 回答
196 浏览

python - 如何在 pyDatalog 中创建算术谓词?

如何将这种算术谓词转换为合法的 pyDatalog 谓词?

添加(X, Y, Z) ← X + Y = Z

例如:

?add(5, 7, Z)。

答案应该是:add(5, 7, 12)。

谢谢!

0 投票
0 回答
45 浏览

clojure - 在 datomic 数据库中实现标记时遇到问题

我正在尝试在我的数据库中设置标记系统,我添加了两个属性来处理这个问题:

这在分配标签方面或多或少起作用,但是我在过滤标签时遇到了一些问题。我认为这样做时,我假设我能够以一种身份的方式引用标签,作为关键字,例如:tag1. 但事实证明它更具挑战性。

我的第一种方法是使用查询过滤器表达式,如下所示(非工作尝试):

其中 :tags 是提供的标签关键字列表,例如[:tag1 :tag2 ...]. 但是拉取的结果在这里并不完全有效,因为对于每个标签,拉取都会返回一个地图,其中包括:db/id标签以及标签,例如:

我认为我仍然可以通过映射?tagset来仅提取标签关键字来处理这个问题,但是在映射表达式中,'?tagset` 最终超出了范围。所以我对如何解决这个问题有点困惑,我觉得这一定有点普遍......有什么建议吗?