Ste*_*zen 5 clojure database-schema datomic
Datomic中没有开箱即用的架构功能,用于在多对多关系中对子实体进行排序,但这是一个非常常见的要求.谷歌搜索已经发现了一些解决方案,所以我想在这里列出需求和解决方案的变化,并希望得到社区的评论.
可能的要求
我的特定用例是R1 + R3 + R5,我怀疑它很常见,但我希望尽可能多地枚举,以便将来可能成为其他人的有用参考.
解决方案
问题
每个解决方案似乎都有挑战.我能想到的是:
对于我的树用例,我不关心P2和P1不是一个大问题,因为N通常很低
所有这些研究都没有帮助我找到清楚哪种解决方案最适合我的树用例,但我倾向于S2.当然,最不复杂的是我的目标,但我怀疑所有解决方案都很复杂.
问题:您对此问题有什么经验吗?您可以分享哪些内容可以帮助其他人做出决定?我们会在指出时添加更多R,S和P.我(和许多其他人)将非常感谢任何反馈.
一个类似的问题在几年前询问,但没有多少那里发生.
为了将来的参考,我通过使用带拉链的 Datomic 链接列表包装器,成功满足了我的要求(有序树存储) 。链接列表代码有几个错误,我将很快将它们分叉/修复/部署到 clojars。
该解决方案非常简单,并且具有恒定的更改操作时间,因此性能良好。
一项挑战是多重有序的子关系。链表代码假定每个实体有一个有序列表,在我的例子中,我需要 1 个用于树子级的列表,但需要更多用于其他数据的列表。我已经解决了这个问题,但如果您的要求类似,则需要考虑这一点。
如果此原型中出现其他有用的观察结果,我将发表进一步的评论。