对不起,如果我得到一点点肮脏的话:
我有两个集,X和Y,以及多对多关系ℜℜX✗Y。
- 对于所有x∈X,设xℜ= {y | (x,y)∈ℜ}⊆Y,Y的子集与x相关联。
- 对于所有y∈Y,让ℜy= {x | (x,y)∈ℜ}⊆X,X的子集与y相关联。
将查询定义为Y,Q⊆⊆(Y)的一组子集。
让查询的图像成为Q中子集的并集:
image(Q) = Uq∈Q q
假设X x 的元素满足查询Q如果对于所有q∈Q,q∩xℜ≠∅,即如果Q中的所有子集与与x相关联的Y的子集重叠。
定义证据满足查询Q的元素x,以便:
evidence(x,Q) = xℜ ∩ image(Q)也就是说,与x相关联的Y部分用于匹配Q的某些部分。这可用于验证x是否满足Q.
我的问题是我应该如何存储我的关系?这样我才能有效地报告哪些x∈X满足查询,并最好报告满意的证据?
关系不是太大,因为csv只有6GB左右。我有几个想法,我都不满意:
我怎么能做得更好?
答案 0 :(得分:1)
我认为#2是要走的路。此外,如果Q可以在CNF中表示,您可以使用多个查询和INTERSECT来使RDBMS执行一些繁重的工作。 (与DNF和UNION类似。)
这看起来有点像你想要的“反向索引”,这是一些RDBMS所支持的。 X =文档集,Y =单词集,q =与glob“a * c”匹配的单词集。
HTH