CNode

[高并发]在高并发的情况下,怎么生成像陌陌里面每个用户都有的 数字账号 呢,如何才会不重复呢? 数据库是mongodb

问答
Wwhw1988发布于10 年前最后回复10 年前10 回复6459 浏览0 收藏

[高并发]在高并发的情况下,怎么生成像陌陌里面每个用户都有的 数字账号 呢,如何才会不重复呢? 数据库是mongodb

mongodb的锁:

27.pic.jpg

查看回复

回复 (10)

I
i5ting#1·10 年前
  • redis
  • 更复杂的可以采用发号器,比如snowflake
W
whw1988#2·10 年前
引用 i5tingredis 更复杂的可以采用发号器,比如snowflake

@i5ting redis可以保证 每个用户读到的maxId不一样吗,我是打算用一张表来存maxId,每个用户读到maxId然后加1,更新到用户表的id字段。 现在就是高并发时 好多用户读到的maxId可能会一样(虽然写有锁,可以保证maxId更新是对的,但是读没锁,会导致用户表的id字段有一些会一样)

W
whw1988#5·10 年前
T
Treagzhao#6·10 年前
引用 dou4cc@Treagzhao 数字类型爬起来方便不好吗?

@dou4cc 就是为了防止有人恶意爬库,所以都会换成随机串

T
Treagzhao#7·10 年前

插一句题外话,id不建议用数字类型,用随机串比较好

D
dou4cc#8·10 年前

串行化影响性能,可以给不同服务器分配不同id列表,比如开100个server,第i个server只能注册mod100余i的id。

D
dou4cc#9·10 年前

@Treagzhao 数字类型爬起来方便不好吗?

C
captainblue2013#10·10 年前

分布式ID,我最欣赏的实现也是snowflake, mongo的也差不多,了解一下原理,就可以自己实现一个了,关键还是思想,这不得不服,在这之前,我国的基本也是什么 给不同服务器分配不同id列表 这样的弱鸡办法。

参与回复
登录后即可参与回复。登录