问题标签 [datomic]
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.
scala - 使用 Datomisca 更改 Datomic 模式
如何isComponent
使用 Datomisca 库添加到 Datomic 属性?
在 Datomic 中,我会执行以下操作:
datomic - Datomic 聚合使用情况
我想通过下一个查询找到年龄最小的人
但结果是
怎么做?
scala - 使用 SBT 加载 Datomic Pro 对等库?
有没有人成功使用 SBT 下载和管理 Datomic Pro 对等库?Datomic 的网站为 Leiningen 和 Maven 提供了明确的说明,但没有 SBT。翻译 Leiningen 说明后,我在 build.sbt 文件中添加了以下内容。
请注意,我通过运行curl -X GET https://my.datomic.com/repo/com/datomic/datomic-pro/0.9.4752/datomic-pro-0.9.4752.pom -v
并看到了奇怪的“限制区域”领域WWW-Authenticate: Basic realm="restricted area"
。这是 Datomic 网站上没有记录的一条信息。
运行上述构建会导致可怕的 UNRESOLVED DEPENDENCIES 错误。
请注意,它尝试下载的 URL 确实是正确的。我可以使用 wget 下载 POM,它工作正常(当然提供用户名和密码)。
我还应该提到我正在使用 SBT 0.13.5-M2 有人让它工作吗?任何帮助将不胜感激!
编辑:
根据 Eugene 下面的建议,我尝试运行我尝试运行--debug
以查看是否可以获得任何其他信息,但找不到任何确凿证据。下面的输出:
rest - Clojure 即时/解析时间戳的使用
一个clojure新手问题。我试图找出将日期从客户端(以任何语言编写)传递到以 clojure 编写的基于 Datomic 数据库的服务器的最佳方法。为了避免语言特定类的任何问题,我计划将日期作为 RFC3339 格式的字符串传递。但是,我无法在 Clojure 中解析字符串。我显然错误的假设是我可以做到:
从而获得瞬间。但是,此调用导致
这让我非常困惑,因为据我所知,这个函数只接受一个参数(格式化字符串)。
我错过了什么?
distributed - 多个输入上的数据查询性能与单个输入上一样快吗?
Datomic 允许我们使用多个输入,即多个 datomic 服务器。
由于查询是在对等方本地执行的,因此使用对等方内部的实际数据库索引,似乎运行连接来自多个 datomic 服务器的数据的查询可能几乎,如果没有在单个 datomic 服务器上执行类似的连接那么快。
是这种情况还是在使用多个来源时查询引擎的工作方式存在质的差异?
(如果没有,我们可以绕过这样一个事实,即数据服务器中的所有写入都必须通过单个事务处理,通过进行分片以任意扩展写入性能。与 RDBMS 分片相比的好处是在加入时查询性能和效率)
编辑:
事实证明,即使在单个 datomic 服务器内,也不是所有查询都同样快:
您经常查询的实体(例如示例数据中与社区相关的实体)应位于同一分区中以提高查询性能。
所以让我换个说法:跨数据服务器的查询是否与跨单个数据服务器上的分区查询大致一样快速和高效(内存、cpu 使用、网络) ?
clojure - 将 Datomic 枚举作为 map 中的键
我有一个包含以下枚举的 datomic 数据库
现在说我这样做:
并获取包含实体及其属性的惰性映射,包括上面的枚举。我现在想要获取作为查询响应得到的枚举值的字符串表示形式。我的想法是这样做:
然后这个
然而,这并没有奏效。这样做的正确方法是什么?
谢谢
scala - 确定 Datomic (Datomisca) 中是否存在属性
我试图找到一种有效的方法来确定数据库中是否已经定义了 Datomic 属性。
我正在使用 Scala 包装器Datomisca。这是迄今为止我发现的最好的方法:
但我猜有更好的方法。
我正在使用 Datomisca 0.6 运行 Datomic-pro 0.9.4755。
datomic - 将任意键/值条目与 datomic 实体一起存储
假设我有要存储在 datomic 中的实体。如果这些属性都是预先知道的,我只需将它们添加到我的 datomic 模式中,然后就可以使用它们。
如果除了已知属性之外,实体还可以有任意数量的任意键,映射到任意值。当然,我可以将该列表存储在一些我也添加到架构中的“blob”属性中,但是我不能轻易地查询这些属性。
我想出的解决方案是在 datomic中定义一个key
和一个属性,每个 type ,并使用上述属性将这些附加键/值条目中的每一个单独视为实体。然后我可以使用类型通过 1:n 关系将所有这些键/值实体连接到实际实体。value
string
ref
这让我可以查询。这是要走的路还是有更好的方法?
heroku - 如何在 Heroku 上使用 Datomic Pro?
我想在 Heroku 上使用 Datomic Pro(目前是入门版)。但我不想将我的下载密钥提交给 Git。相反,正确的做法似乎是将其存储在环境变量中。这意味着我的project.clj
现在包含:
我已经设置DATOMIC_EMAIL
并DATOMIC_KEY
在 Heroku 应用程序的配置中。事实证明这并不重要,因为它project.clj
是在构建阶段处理的,没有访问环境变量。
现在该user-env-compile
功能不再存在,我怎样才能让 Datomic 在 Heroku 上运行?
(我可以分叉构建包并强制在构建阶段使用环境变量,但如果可以的话,我宁愿避免走那么远。)
clojure - Datomic 中的访问控制
在编写基于 Datomic 和 Clojure 的应用程序时,对等点似乎可以不受限制地访问数据。如何构建一个用户 A 无法访问用户 B 私有数据的多用户系统?
我知道我可以在 Clojure 中编写查询,以便只返回用户 A 的私人数据......但是是什么阻止了恶意用户破解二进制文件以查看用户 B 的私人数据?
更新
根据@Thumbnail 的回答和 John P Hackworth 博客的链接,Clojure/Datomic 应用程序的状态实际上缺乏安全性。
让我更清楚地说明我看到的问题,因为我没有看到任何解决方案,这是引发这个问题的原始问题。
Datomic 有一个数据存储、一个交易者和对等点。对等点位于用户的计算机上,并针对数据存储中的数据运行查询。我的问题是:如何限制对数据存储中数据的访问。由于数据存储是愚蠢的,实际上只是存储数据,我不确定如何提供访问控制。
当 AWS S3 用作数据存储时,客户端(对等方)必须在访问 S3 之前进行身份验证,但是一旦通过身份验证,对等方就无法访问所有数据!?仅限于它运行的查询,如果用户想要获取另一个用户的数据,他们可以更改客户端中的代码(二进制),以便查询以不同的用户名运行,对吗?要清楚......访问控制不只是查询的条件吗?或者是否存在数据存储识别的用户特定连接并且数据存储限制了哪些数据可见?
我错过了什么?
在像 Rails 这样的传统 Web 框架中,服务器端代码限制对数据的所有访问,并对用户进行身份验证和授权。用户可以更改 URL 或客户端代码,但除非用户提供了正确的凭据,否则服务器将不允许访问数据。
由于 Datomic 中的数据存储是愚蠢的,它似乎缺乏基于每个用户限制访问的能力,应用程序(对等方)必须这样做。我不想相信用户的行为,也不想尝试获取其他用户的信息。
一个简单的例子是银行系统。当然,用户将通过身份验证......但在那之后,是什么阻止他们修改客户端代码/二进制文件以更改数据查询以从数据存储中获取其他用户的帐户信息?
更新 - 模型
这里有两个关于 Datomic 和 Clojure 如何工作的可能模型……第一个是我当前的模型(在我的脑海中)。
- 用户的计算机运行客户端/对等方,该客户端/对等方具有查询并完全访问在客户端启动之前对用户进行身份验证的数据存储,从而将用户限制为我们拥有凭据的用户。
- 用户的计算机具有与驻留在服务器上的对等点交互的接口(webapp)。查询在服务器上,用户不能修改,因此访问控制本身受到运行对等服务器的安全性的访问控制。
如果第二种模型是正确的,那么我的问题就得到了回答:用户无法修改服务器代码并且服务器代码包含访问控制......因此,我认为驻留在用户计算机上的“对等方”实际上驻留在应用服务器。