2

我正在寻找一个对集合操作有良好支持的数据库(更具体地说:联合)。

我想要的是可以存储短字符串集并计算这些集的并集的东西。例如,我想将 A、B 和 C 添加到一个集合中,然后将 D 和 A 添加到另一个集合中,然后得到这些集合的并集的基数 (4),但放大了一百万倍左右。

这些值是 12 个字符串,集合大小范围从单个元素到数百万。

我已经尝试过 Redis,它在各个方面都很棒,除了我拥有的数据量之外,基于内存的东西很棘手。我尝试过使用 VM 功能,但这使得它使用更多的内存,它更适合大值并且我有小值(所以说 Redis 邮件列表上的乐于助人的人)。不过,陪审团还没有出来,我可能会让它发挥作用。

我还草拟了在关系数据库之上实现它的草图,这可能会起作用,但我要求的是我不必破解工作的东西。Redis 将是一个很好的答案,但正如我上面提到的,我已经尝试过了。

我当前的基于 Redis 的实现或多或少是这样工作的:我解析日志文件并为每一行提取一个 API 密钥、一个用户 ID 以及许多属性的值,如站点域、一天中的时间等. 然后我制定了一个看起来有点像这样的键(每行产生许多键,每个属性一个):

APIKEY:20101001:site_domain:stackoverflow.com

关键点指向一个集合,我在这个集合中添加了用户 ID。当我解析完所有日志文件后,我想知道一个属性的唯一用户 ID 的总数,所以我向 Redis 询问所有匹配键的联合的基数

APIKEY:*:site_domain:stackoverflow.com

除了 Redis 之外,是否还有一个数据库可以很好地支持这个用例?

4

1 回答 1

1

听起来您需要类似这样boost::disjoint_set的数据结构,该数据结构专门针对大集合的联合或交集进行了优化。

于 2010-10-01T07:46:30.460 回答