database - 对集合操作支持良好的数据库的建议

标签 database set redis

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

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

取值为12个字符串,集合大小从单个元素到百万不等。

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

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

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

APIKEY:20101001:site_domain:stackoverflow.com

键指向一个集合,我向这个集合添加了用户 ID。当我解析了所有日志文件后,我想知道一个属性在所有时间的唯一用户 ID 总数,因此我向 Redis 询问所有匹配的键的并集的基数

APIKEY:*:site_domain:stackoverflow.com

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

最佳答案

听起来你需要类似 boost::disjoint_set 的东西这是一种专门为获取大型集合的并集或交集而优化的数据结构。

关于database - 对集合操作支持良好的数据库的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3837297/

相关文章:

iphone - 在插入 iPhone 的 SQLite 数据库之前检查数据是否存在

syntax - CMake 中的 "set"语法

java - 将一组 Activity 传递给另一项 Activity 的最佳方式是什么? Java 安卓 SDK

Java:将 2 个相同的对象添加到 Set 后,它包含 2 个元素

java - 读取对象时发生 StreamCorrupedException

node.js - AWS Elastic Cache 是否支持 Redis 集群上的 Pub/Sub?

caching - 缓存失效和缓存服务器重启

sql - 在可能有也可能没有主键的表上插入行和更新行

sql - 索引可用时进行全表扫描

php - 如何使用 join codeigniter 从另一个表获取值