海量数据求并集交集

array020 2014-08-19 05:22:14
公司有个推送业务,场景简述如下:

某一个APP有许多个用户,每个用户会有若干的标签,比如国家类的标签有中国,美国什么的,爱好类的标签有旅游,美食什么的。开发者通过后台选择若干个标签,给自己的应用符合这些标签的用户推送消息。比如:

求标签A的用户和标签B的用户交集再跟标签C的用户的并集

最简单的算法就是依次取出每个标签的用户,然后遍历求出结果。

如果用户很多,每个标签下的用户很多,计算的时候给出的标签数量很多时,计算出来的结果集也很大,放到内存中也不太合适吧,这样简单的算法应该就不可行了吧。

大家有什么方案呢?要使用Hadoop之类的计算框架吗?
...全文
509 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2014-08-22
  • 打赏
  • 举报
回复
别人给你做个 SQL3000 才能满意,
array020 2014-08-22
  • 打赏
  • 举报
回复
引用 10 楼 Tiger_Zhao 的回复:
无满意结帖,真没礼貌!
的确是没有满意的回答啊。 昨晚google了下相关问题,有事还得请教google才行。
Tiger_Zhao 2014-08-22
  • 打赏
  • 举报
回复
无满意结帖,真没礼貌!
array020 2014-08-22
  • 打赏
  • 举报
回复
引用 8 楼 Tiger_Zhao 的回复:
[quote=引用 5 楼 damacheng 的回复:] [quote=引用 3 楼 Tiger_Zhao 的回复:] 先想想怎么做到海量用户才是正途。 这在数据库中是很简单的事。 即有(标签,用户)索引,也有(用户,标签)索引。 你这里就是用(用户,标签)索引,看同一个用户是否同时存在ABC三个标签,一遍扫描就行了,哪里需要求并集!
不止有交集,还有并集[/quote]
WHERE (标签='A' AND 标签='B') OR (标签='C')
照样是一遍扫描。 与其在自己傻想,不如多看看数据库。 数据库专职就是处理海量数据的,长期积累下来有应对各种需求的方法,多学习学习。[/quote] 哥们你太牛了。
Tiger_Zhao 2014-08-22
  • 打赏
  • 举报
回复
引用 5 楼 damacheng 的回复:
[quote=引用 3 楼 Tiger_Zhao 的回复:] 先想想怎么做到海量用户才是正途。 这在数据库中是很简单的事。 即有(标签,用户)索引,也有(用户,标签)索引。 你这里就是用(用户,标签)索引,看同一个用户是否同时存在ABC三个标签,一遍扫描就行了,哪里需要求并集!
不止有交集,还有并集[/quote]
WHERE (标签='A' AND 标签='B') OR (标签='C')
照样是一遍扫描。 与其在自己傻想,不如多看看数据库。 数据库专职就是处理海量数据的,长期积累下来有应对各种需求的方法,多学习学习。
Tiger_Zhao 2014-08-22
  • 打赏
  • 举报
回复
引用 4 楼 damacheng 的回复:
[quote=引用 3 楼 Tiger_Zhao 的回复:] 先想想怎么做到海量用户才是正途。 这在数据库中是很简单的事。 即有(标签,用户)索引,也有(用户,标签)索引。 你这里就是用(用户,标签)索引,看同一个用户是否同时存在ABC三个标签,一遍扫描就行了,哪里需要求并集!
每次都得扫全表?假设某个标签只有很少几个用户拥有呢,值得扫全表吗?[/quote] 不要拿结果来反推,海量数据你预先怎么知道标签有多少用户?
FancyMouse 2014-08-22
  • 打赏
  • 举报
回复
你怎么知道你真的到了海量数据的时候瓶颈会在这里而不是其他地方? 想解决不存在的需求那就是浪费精力。
array020 2014-08-21
  • 打赏
  • 举报
回复
引用 3 楼 Tiger_Zhao 的回复:
先想想怎么做到海量用户才是正途。 这在数据库中是很简单的事。 即有(标签,用户)索引,也有(用户,标签)索引。 你这里就是用(用户,标签)索引,看同一个用户是否同时存在ABC三个标签,一遍扫描就行了,哪里需要求并集!
不止有交集,还有并集
array020 2014-08-21
  • 打赏
  • 举报
回复
引用 3 楼 Tiger_Zhao 的回复:
先想想怎么做到海量用户才是正途。 这在数据库中是很简单的事。 即有(标签,用户)索引,也有(用户,标签)索引。 你这里就是用(用户,标签)索引,看同一个用户是否同时存在ABC三个标签,一遍扫描就行了,哪里需要求并集!
每次都得扫全表?假设某个标签只有很少几个用户拥有呢,值得扫全表吗?
Tiger_Zhao 2014-08-21
  • 打赏
  • 举报
回复
先想想怎么做到海量用户才是正途。

这在数据库中是很简单的事。
即有(标签,用户)索引,也有(用户,标签)索引。
你这里就是用(用户,标签)索引,看同一个用户是否同时存在ABC三个标签,一遍扫描就行了,哪里需要求并集!
array020 2014-08-20
  • 打赏
  • 举报
回复
引用 1 楼 FancyMouse 的回复:
你有上亿用户要海量?
假设而已= =
FancyMouse 2014-08-20
  • 打赏
  • 举报
回复
你有上亿用户要海量?

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧