我需要计算覆盖率,按不同的标准分组,并且希望将所有内容都保存在我的数据库中。我正在寻找 PostgreSQL 的预构建位集实现,或者关于如何实现我的目标的指针。
我目前正在做的是将 EWAHCompressedBitSet 的序列化 Java 实例存储在 bytea 列中,但这意味着我必须往返到 Java 进程才能继续我的计算。
理想情况下,我希望能够执行以下操作:
-- Unique people reached during a time window
SELECT service_name, last_updated_at, bitset_or(followers_bs)
FROM followers
GROUP BY service_name, last_updated_at
我使用了具有这种功能的商业解决方案(Truviso),它也是基于 PostgreSQL 的。
请注意,我确实有一个表,其中包含未压缩格式的数据,但是由于数据非常庞大(10M 行并且还在计数),加入它所花费的时间比我想要投入的时间要长。
您可以使用
"bit"
type 代替"bytea"
,并使用您自己的用户定义聚合吗?现在
bitset_or
应该按照书面形式处理您的查询(再次假设 bytea -> bit)。