数据库和逻辑如何设计

2018-03-05 13:38:38 +08:00
 maowenjie

数据库和逻辑如何设计 目前遇到一个项目

要搞个小系统

A 为帐号 表 accounts 会不停更新新的(如 a b c d ....) (每天增加几万个) T 为任务 表 tasks 固定的几百个个(如 1 号,2 号,3 号)

T 里的每个任务 A 只能做一次

要求: 需要 1 号任务 请求一下随机获得一个 A 的帐号(没有做个 1 号任务的帐号)

自己的想法是 建个黑名单数据库表 black 每完成一个 增加一行 如 a-1 a-2 b-2 c-3

然后获取的时候 select 后面加个 not in 来判断

select * from accounts where id not in (select id from black) order by rand()

但是感觉这样效率很低

英文 black 的数据库会增加得非常快

1 万个帐号 对应 100 个任务 就是 100 万条记录 估计没多久就上亿了 而且我不知这样 not in 这种效率如何

3040 次点击
所在节点    程序员
21 条回复
MeteorCat
2018-03-05 19:35:28 +08:00
@maowenjie 其实就是当天这样处理没问题,但是过了当天,你可以把数据表另外压缩成一张 Record 记录表( ID,DATE,TASK_USER ),你将当天记录跑脚本全查出完成任务的人数,完成任务信息等做成 JSON,后台查询只需要汇总信息,你展示给他这些大概信息就行了,之后就是把你任务表相关清空给明天使用,每天生产 100W 数据,数据库早晚会爆的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/434929

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX