数据库怎么最简单实现 “栈” 结构存储?

2018-01-20 20:00:44 +08:00
 miniyao
比如用数据库保存员工的签到记录,只要求保留最后 30 次的签到记录即可。

现在是写了个定时任务去每天晚上自动执行“删除超过 30 次的旧记录”,有没有更简单的方法,用类似入栈 /出栈的方式,在员工签到的时候就把这个“删除超过 30 次的旧记录”的操作给办了?

即:如果新员工签到记录不满 30 条,签到记录就都留着;老员工已经有最近 30 次签到记录的,每次打卡,自动把最早的那条旧记录剔除。
7359 次点击
所在节点    MySQL
55 条回复
brickyang
2018-01-21 01:00:07 +08:00
MongoDB capped collection,极致优雅。
night98
2018-01-21 01:09:08 +08:00
每次签到的时候 count 一下,然后把头部或者尾部的那条记录删了
geelaw
2018-01-21 01:13:01 +08:00
@scnace FIFO 是队列。
liprais
2018-01-21 01:16:37 +08:00
用 mangodb 就是作死,用时一时爽查询火葬场
scnace
2018-01-21 02:02:34 +08:00
@geelaw 啊 说错了 LZ 的需求应该是 FIFO 算了 我还是滚去睡觉吧😂
bkmi
2018-01-21 02:38:31 +08:00
竟然没人问为啥要删吗,这种数据不应该都留着吗?查的时候查最近 30 条就行了
zxy
2018-01-21 03:14:47 +08:00
我想的是你在数据库里存的是每人一个 30 长度的数组,每次 update 下就好了
liz2nku
2018-01-21 07:32:28 +08:00
@bkmi 都被直接带入楼主的问题了 23333
leeg810312
2018-01-21 08:59:14 +08:00
这是一个需求分析错误的典型案例,收藏起来当培训素材
clino
2018-01-21 09:29:31 +08:00
这不是栈

但这是啥? 固定长度的数组?
bramblex
2018-01-21 10:09:34 +08:00
@clino

这其实是一个环装结构,一般用单 /双向循环链表实现
taojing10
2018-01-21 10:20:30 +08:00
好奇怪的需求……… limit 30 不就好了?不要多此一举
dexterzzz
2018-01-21 10:44:25 +08:00
temporary table 时态控制表
xrlin
2018-01-21 10:48:01 +08:00
直接 limit 30 不就行了?后续需求改了别人想查看一个季度的签到记录怎么办?
cnnblike
2018-01-21 10:59:06 +08:00
只有 30 个的话,你直接 json dump 到文件都成啊?每次遍历一遍又不会多废多少时间的
yuriko
2018-01-21 11:02:51 +08:00
FIFO -> 队列
FILO -> 栈

所以栈?
wizardoz
2018-01-21 11:53:10 +08:00
可覆盖的循环队列
hccdj131
2018-01-21 12:06:19 +08:00
设定固定长度,超过这个长度就删除
gzxultra
2018-01-21 12:25:22 +08:00
@feverzsj
数据库服务器的扩展成本比应用服务器大,在线的业务应该尽可能让数据库少做事,业务逻辑放在应用服务器上跑
cdlnls
2018-01-21 12:30:40 +08:00
我觉得应该全部存下来,然后查询到时候只取最近 30 条记录就好了

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

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

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

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

© 2021 V2EX