游戏后端自增id选型
多问几个为什么!
- 什么是自增id?
- 为什么游戏后端需要自增id?使用唯一id不行吗?
- 自增id有哪些方案?
- 我选择什么方案?为什么这么选择?
给出自己的见解
- 自增id是指 一个接口返回的值是一个正整数,且该接口多次调用后不断增加(可能每次不是加1)且不重复。
- 游戏业务中包含角色等
初始配置相同,可重复获得,不可堆叠的
的元素,需要使用唯一id加以区分。自增id有唯一id的特性,并且对数据库插入操作更加友好。 - 自增id有多种方案
方案 | 性能 | 优点 | 缺点 |
---|---|---|---|
使用关系数据库主键自增 | 低 | 实现方便 无需额外依赖 | 性能低 无法高并发 |
snowflake雪花算法及其衍生算法(uidgenerator, leaf, tinyid等) | 超高 | 性能超高 单机可实现 | 使用时间有限制 需额外配置机器id或者workId |
redis的incr原子自增命令 | 高 | 实现方便 无需额外依赖 | 可能会有重复id |
- 综合来看,使用snowflake算法或者redis自增id都是可行的,最终我选择的是
redis的incr原子自增命令
。有以下几点原因:
- redis的自增id性能满足需求
- 后端框架本身依赖redis,实现非常方便
- 在redis设置AOF落地策略时,不会有重复id,性能上有所下降,玩家在线不高的情况下也能满足需求。
- 对redis自增id有更高性能需求,也可以选择使用RDB方式落地,选用此种方式可能会由于redis宕机导致重复id的出现。重复id出现后,后端框架在数据同步过程中也能自动补偿。
游戏后端自增id选型相关推荐
- Twitter-Snowflake,64位自增ID算法详解
Twitter-Snowflake,64位自增ID算法详解 from: http://www.lanindex.com/twitter-snowflake%EF%BC%8C64%E4%BD%8D%E8 ...
- mysql自增id前端安全显示_mysql使用自增id遇到的坑
背景 最近在做一个项目,给APP提供接口,用户认证机制采用了JWT(JSON Web Token).项目开发完之后,给用户测试(删档测试),测试完之后,清空了数据库里的数据,之后又其他用户注册了.然后 ...
- 自增ID有什么坏处?什么样的场景下不使用自增ID? 1
这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析后端知识/技能,本篇分享的是: [自增ID有什么 ...
- 游戏后台生成唯一ID
游戏后台生成唯一ID MMO游戏后台通常需要由大量服务器来共同承载海量玩家,虽然玩家可能分布在不同的游戏大区,但是他们可能会通过跨服等等方式进行各种交互.游戏中的角色,装备,物品等需要生成一个全局 ...
- 基于Java的Minecraft游戏后端自定义插件 的Java实践项目整理
Minecraft_Plugin 1.项目概述 2.系统设计 3.功能模块成果展示 4.个人总结 1.项目概述 1.1 项目简介 小组准备编写一个具有武器战斗,道具收集.互动社交和任务悬赏四大系统的聚 ...
- 7年Java游戏后端,被淘汰辛酸史
本人Java开发6年半不到7年的样子. 英语专业,临毕业跟着隔壁专业去培训了四个月Java. 跟他们一起来了北京找工作,一找就是5个多月,面试100多家公司.最终还是隔壁专业的同学介绍到他们公司才就业 ...
- 技术分享 | 关于 MySQL 自增 ID 的事儿
作者:贲绍华 爱可生研发中心工程师,负责项目的需求与维护工作.其他身份:柯基铲屎官. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源. 当我们使用 M ...
- mysql自增id原理_《MySQL自增ID》告诉你不为人知的“秘密”......
原标题:<MySQL自增ID>告诉你不为人知的"秘密"...... 作者:Sunshine Koo 1.概述 " MySQL数据库是最常使用的数据库之一,我们 ...
- mysql自增id突然变大到超出范围
问题描述 mysql 我采用 id 自增生成策略,但是经过后端导入数据,刚插入的1-2条数据 id 生成正常,但是后面突然增大,导致id超出范围. 问题原因 首先排查数据库原因,我手动添加数据,看数据 ...
- 面试官问:如果MySQL的自增 ID 用完了,怎么办?
欢迎关注方志朋的博客,回复"666"获面试宝典 如果你用过或了解过MySQL,那你一定知道自增主键了.每个自增id都是定义了初始值,然后按照指定步长增长(默认步长是1).虽然,自然 ...
最新文章
- 【转】expect语言学习笔记
- 零基础自学python教程-零基础人员可以学习python吗?|Python培训基础教程
- apache-jmeter-3.1的简单压力测试使用方法(下载和安装)
- 面试基操:微服务拆分需要考虑什么因素?
- Python with上下文管理及自定义上下文管理
- 从还珠格格到街头霸王!80后的怀旧神器 三星GalaxyFold另类体验
- Linux中的Page cache和Buffer cache详解
- nodejs爬虫与python爬虫_不再羡慕python,nodejs爬虫撸起袖子就是干,爬取宅男女神网大姐姐的高清图片!...
- Nitrux 图标主题与 Faenza 一样的设计 – 漂亮
- PHP消息队列的实现方式
- android 微信 语音,安卓手机微信不能发语音的解决办法
- Sublime Text 3在行前插入递增数字序号的方法
- 【生活中的逻辑谬误】以泪掩过和以笑饰非
- 01_CSS简介.html
- 星光不负赶路人|2022年终总结
- Linux下time/timestamp相关。
- matlab仿真四轮abs,ABS系统的simulink的仿真。
- Vercel+Railway部署Typecho动态博客(超详细图文教程-Vercel CLI办法)
- python+django勤工助学管理系统Vue项目介绍
- Deepin编译安装 mongoc++ 驱动程序