1
b821025551b 2017-11-01 16:02:19 +08:00
并发问题,要加锁。
|
2
zjsxwc 2017-11-01 16:08:56 +08:00 via Android
用队列处理更方便
|
3
frozenway OP @b821025551b 数据库是 MyISAM,加不了锁
|
5
b821025551b 2017-11-01 16:14:15 +08:00
两个解决方案:
1:上队列; 2:做个定时任务,比如今天凌晨 3 点把明天的数据顺序的 add 一遍,保证明天的数据在明天只有 update 操作。 |
6
sagaxu 2017-11-01 16:24:28 +08:00
加唯一索引(aid, xdate),然后用 upsert(insert-on-duplicate)
顺便问一句,楼主你是来黑 PHP 的吗? |
7
vescape920 2017-11-01 16:24:33 +08:00
不知道我理解的对不对 就是每个用户每天第一次访问时 insert 记录 之后是 update 该条记录
你可以把 user_id 和 date 建一个 unique 索引 在写 sql 的时候使用 ON DUPLICATE KEY UPDATE |
8
akira 2017-11-01 16:28:35 +08:00
aid 和 xdate 做个复合主键 ,代码什么的完全不用动了。
缺点是会丢部分数据 |
9
frozenway OP |
10
fcten 2017-11-01 17:01:28 +08:00
mysql 是 php 不可分割的一部分!(滑稽.jpg
|
11
fcten 2017-11-01 17:04:23 +08:00
顺便,这样统计访问量性能非常差,建议做合理缓存
|
12
yxn1910 2017-11-01 17:16:10 +08:00
访问次数这样的非敏感数据建议先缓存,定时入库,在这里使用事务性价比太低。
|
13
linpf 2017-11-01 17:29:26 +08:00
并发量太大,在第一次请求时,数据库判断没有记录,然后再插入新纪录的时候,第二次请求也通过了有无记录的判断,导致重复插入。
最好的办法是加锁。但是加锁也不必依赖数据库。使用 TP 框架的缓存做一个简单的锁也可以。不妨试一下。 |