如果,同时接收到N条数据,将N条数据存入数据库,此时需对N条数据进行数据库 某些字段 判重,如果数据库已有该数据,则不插入。
遇到的问题就是,假如1和2是相同数据,在做1和2查询数据库相同记录时,都返回没有,因此1和2就都插入数据库了。这不是想要的状态
像JAVA的话多线程,可以在查询数据库相同记录时做同步操作,而nodejs是单线程,没有加锁的概念,而且数据库已经有唯一性约束了,不能通过唯一
性约束来做。。
想问各位大神,有遇到这种情况是怎么解决的吗?
为什么不是mysql设置 字段 unique
@fish 数据库已经有A,B,C的字段unique了,此时我还想针对A,B进行判重。
A+B unique , A+B+C unique, 能推到出 C unique 么?
推导不严密~ 有问题,不能通过拆分索引解决。。。
a1+b1, c1
a2+b1, c1
…
@fish 当 A+B unique 的时候,A + B + C 的这条复合索引不具备意义。
@liming881227 描述详细一点。
@alsotang 现在是A+B+C unique, 比如标题 + 内容 + 发布时间 可是如果两条数据 标题 + 内容是一样的,只是发布时间不一样。 这样我想判重。
@alsotang 这个好像不能啊 ON DUPLICATE KEY
@fish 现在目前 是A+B+C unique 在此基础上我还想做A+B unique
@liming881227 我还不是不懂你的具体场景。 我觉得吧,既然 标题和内容 已经可以判定唯一了,那就做个 A+B 的 unique 就好了。
@alsotang 现在是有一部分数据我是想做A+B+C的unique,有一部分数据是想做A+B的unique。因此我就想沿用A+B+C的 对于A+B的unique,我在插入的时候来判断。
@liming881227 噢,这样。那就 upsert 吧,遇到什么问题吗?
@alsotang 用upsert的话不是检测 on DUPLICATE key , 可是我的主键是id,自增的, 这样的话也不会存在重复主键了啊。我现在就是想单纯地通过查询mysql判重
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
触发 duplicate key 的不一定是主键吧?
@alsotang 不是主键也得有约束条件吧,我已经没法添加A+B的约束条件了
@alsotang 我也想到事务了,先用事务试试吧,nodejs在这方面还挺弱的。
你这个问题原本就有问题,mongodb不敢说,因为不太懂。。 A+B+C unique = A(unique) && A,B(unique) && A,B,C(unique) 在你的应用场景里完全浪费索引空间,标题 + 内容 + 发布时间这样的结构"发布时间"还要做唯一不是蛋痛没事做吗,还不如做A+B unique。
@liming881227 这个问题就像手拿着鸡蛋只想吃蛋黄,然后就说鸡为什么不生只有蛋黄的鸡蛋。