PhoneGap中文网

 找回密码
 立即注册

nodejs在做mysql判重的时候遇到的问题

nodejs在做mysql判重的时候遇到的问题 请大牛帮忙,万分感谢


如果,同时接收到N条数据,将N条数据存入数据库,此时需对N条数据进行数据库 某些字段 判重,如果数据库已有该数据,则不插入。

遇到的问题就是,假如1和2是相同数据,在做1和2查询数据库相同记录时,都返回没有,因此1和2就都插入数据库了。这不是想要的状态

像JAVA的话多线程,可以在查询数据库相同记录时做同步操作,而nodejs是单线程,没有加锁的概念,而且数据库已经有唯一性约束了,不能通过唯一

性约束来做。。

想问各位大神,有遇到这种情况是怎么解决的吗?


回复:nodejs在做mysql判重的时候遇到的问题
  • 为什么不是mysql设置 字段 unique

  • @fish 数据库已经有A,B,C的字段unique了,此时我还想针对A,B进行判重。

  • A+B unique , A+B+C unique, 能推到出 C unique 么?

    推导不严密~ 有问题,不能通过拆分索引解决。。。

    a1+b1, c1
    a2+b1, c1
    

  • mysql 的 upsert 不知道能不能解决你的问题?

    http://stackoverflow.com/questions/6107752/how-to-perform-an-upsert-so-that-i-can-use-both-new-and-old-values-in-update-par

  • @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判重

  • @liming881227

    untitled1.png

    http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

    触发 duplicate key 的不一定是主键吧?

  • @alsotang 不是主键也得有约束条件吧,我已经没法添加A+B的约束条件了

  • @liming881227

    untitled1.png

    第一种和第二种,都需要有 A+B 的约束条件。

    第三种用事务的方式,看来也只能这样了。

  • @alsotang 我也想到事务了,先用事务试试吧,nodejs在这方面还挺弱的。

  • 你这个问题原本就有问题,mongodb不敢说,因为不太懂。。 A+B+C unique = A(unique) && A,B(unique) && A,B,C(unique) 在你的应用场景里完全浪费索引空间,标题 + 内容 + 发布时间这样的结构"发布时间"还要做唯一不是蛋痛没事做吗,还不如做A+B unique。

  • @liming881227 这个问题就像手拿着鸡蛋只想吃蛋黄,然后就说鸡为什么不生只有蛋黄的鸡蛋。

  • 感谢楼主分享nodejs在做mysql判重的时候遇到的问题学习喽
  • nodejs在做mysql判重的时候遇到的问题 标题给力

Archiver|手机版|小黑屋| PhoneGap中文网 ( 京ICP备13027796号-1 )

GMT+8, 2024-5-16 06:02 , Processed in 0.061578 second(s), 11 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部