对具有良好支持集合操作的数据库的建议

时间:2010-10-01 07:43:28

标签: database set redis

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

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

值为12个字符串,设置大小从单个元素到数百万个。

我已经尝试过Redis,并且在各个方面都很棒,除了对于数据量而言,基于内存的东西让我感觉很棘手。我尝试过使用虚拟机功能,但这会让它使用更多的内存,它更适合大值,而且我的值很小(所以说Redis邮件列表上有帮助的人)。尽管如此,陪审团仍然没有成功。

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

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

APIKEY:20101001:site_domain:stackoverflow.com

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

APIKEY:*:site_domain:stackoverflow.com

除了Redis之外,还有一个数据库能够很好地支持这个用例吗?

1 个答案:

答案 0 :(得分:1)

听起来你需要boost::disjoint_set之类的东西,这是一个专门针对大型集合的联合或交叉点进行优化的数据结构。