【发布时间】:2013-03-27 09:29:04
【问题描述】:
我有一个用例,我需要存储大量具有唯一集合大小的条目。如果我们将其简化为联系人(问题不是很大)。我们会遇到这样的问题:
假设用户知道他们有多少朋友:
乔 - 玛丽、约翰、鲍勃、汤姆
玛丽 - 卡罗尔、苏西、迈克、弗雷德、罗伯特
因此friends(Joe) = 4 - 唯一支持的操作是addFriend(Joe, Sam)。虽然 Mary 可能与 Joe 成为朋友,但无需存储任何相关信息。
我宁愿不做的是将所有条目存储在每个集合中,但是布隆过滤器感觉不太对劲。还有其他选择吗?
更新:挑战在于我在顶级集合中有 2000 万个 Joe/Mary/...,每个集合中有 400 万个半独立成员。下面是快速代码示例(为简单起见,python)-但在规模 + 持久存储上,宇宙走到了尽头。
class World:
def __init__(self):
self.friends = defaultdict(set)
def addFriend(self, id, member):
self.friends[id].add(member)
def friends(self, id):
return len(friends[id])
【问题讨论】:
-
您正在使用哪种编程语言?
-
几乎所有 - 快速更新。
-
friends(Mary) 的输出是什么?
-
不是
friends(Mary) = 6,因为乔和玛丽是朋友吗? -
成员的总规模是多少?是20m还是24m还是80m?即,4m 个成员是随机/唯一值,还是它们都包含在 20m 组标头中?另外,您更喜欢什么,小空间、快速插入还是快速检索?