当前位置: 首页 > news >正文

vps主机可以做几个网站sem优化师是什么意思

vps主机可以做几个网站,sem优化师是什么意思,即墨做网站,企业 网站 客户留言怎么做1、分布式id 游戏服务器里的大部分数据都是要求全局唯一的,例如玩家id,道具id。之所以有这种要求,是因为运营业务上需要进行合服操作,保证不同服的数据在进行合服之后,也能保证id不冲突。如果采用关系型数据库&#x…

1、分布式id

游戏服务器里的大部分数据都是要求全局唯一的,例如玩家id,道具id。之所以有这种要求,是因为运营业务上需要进行合服操作,保证不同服的数据在进行合服之后,也能保证id不冲突。如果采用关系型数据库(例如mysql),常见的分布式id算法有以下方法。

  • 分段步长:把long型数字的前N位标记为区服id,剩余的后面所有位用作计算器自增长,并把最大的id进行持久化。
  • 雪花算法变种:将雪花算法与游戏区服、系统时间戳、计算器结合起来。

详情可参考: 游戏服务器框架之分布式id生成器

如果选择mongodb,由于其内置一个非常简单高效的分布式id生成算法,可以直接使用。不用业务代码自行设计。

详情可参考: Mongodb分布式id

2、数据库ddl自动化

目前,很多orm框架都不支持自动建表加字段(原生的mybatics,mybatics-plus均不支持,hibernate支持),因为要实现这个功能,需要应用层使用jpa或者其他注解显示表明哪些字段是需要持久化以及对应的类型。

而mongodb。甚至支持在同一个文档里有不同的文档结果。不过这种支持在应用层通常不会这么做,容易造成业务代码混乱。试想一下,把数据库的全部表数据全部打包到单独一个数据表,这种设计绝对是个噩梦。

  1. 自动创建集合:在 MongoDB 中,当你尝试向尚不存在的集合中插入一个文档时,MongoDB 会自动创建该集合。例如,如果你有一个文档并尝试将其保存到数据库中,而该集合不存在,MongoDB 将自动创建它。

    db.mycollection.insertOne({name: "example", value: "data"})
  2. 自动添加字段:当你插入一个新文档或更新现有文档时,如果文档中包含集合中其他文档不存在的字段,MongoDB 会自动将这些字段添加到文档中。例如:

    db.mycollection.updateOne({}, {$set: {newField: "value"}}, {upsert: true})

    这个命令会为集合中的每个文档添加 newField 字段,如果文档中已经存在该字段,则会更新它的值。

  3. 使用 $set 操作符$set 操作符可以用来为文档添加新字段或更新现有字段的值。如果指定的字段不存在,它会被添加。

    db.mycollection.updateMany({}, {$set: {newField: "defaultValue"}}, {multi: true})

3、嵌套数据处理

使用关系型数据,当我们需要保存用户某一个模块的内容,比如vip数据,我们一般会在Player类加一个嵌套bean,例如叫VipRight。这个嵌套的bean映射到MySQL,可以表示为一个字段。针对一个javabean到一个mysql字段的转换,通常有两种方法。

第一种,同时申明一个bean对象以及这个对象对应的json字符串,类似下面的定义

@Data
public class Player {private String id;private VipRight vipRight;private String vipRightJson;}

其中,VipRight又是另外一个javabean,定义如下:

@Data
public class VipRight {private int level;private int exp;
}

当我们从数据库里读取记录时,需要先将json进行反序列化为对应的javabean;当我们写入数据库的时候,则将javabean序列化为json,再持久化到数据库。这种方法写起来非常啰嗦。

另外一种方式,则是通过自定义的orm工具,通过特定的注解,程序自动将json与bean进行转换。例如jforgame-orm工具,就是采用这种方式。

@Data
public class PlayerEnt implements BaseEntity<Long> {@Id@Columnprivate long playerId;/*** 所属账号id*/@Columnprivate long accountId;@Columnprivate String name;@Columnprivate int level;@Column@Convert(converter = JpaObjectConverter.class)private VipRight vipRight;
}

如果采用Mongodb,则这种问题不复存在。Mongodb天生支持嵌套文档,springdata mongodb自动会对其进行转换,如下代码:

@Data
@Document("player")
public class Player {@Idprivate String id;@Fieldprivate VipRight vipRight;}

4、对嵌套bean数据的查询

还是以上边的例子,如果程序需要在启服的时候捞取vip等级前50的数据作为排行榜,如果采用mysql的话,由于mysql查询不支持json子查询,我们不得不在player类增加一个冗余字段,额外保存vip等级,例如下面的代码。在更新的时候需要两个位置一起更新,非常麻烦。

@Data
public class Player {private String id;private VipRight vipRight;private String vipRightJson;//冗余vip等级字段private int vipLevel;}

采用mongodb的话,由于其支持嵌套子查询,直接一个子bean搞定,在springdata mongodb里,插入与查询只需如下代码:

        PlayerRepository bean = SpringContext.getBean(PlayerRepository.class);Player demo = new Player();VipRight vipRight = new VipRight();vipRight.setExp(111);vipRight.setLevel(100);demo.setVipRight(vipRight);bean.insert(demo);List<Player> byVipRight = bean.findByVipRight(100);System.out.println(byVipRight.size());

其中,嵌套文档查询需要用自定义的行为

import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.stereotype.Repository;
import org.tea.editor.domain.Player;import java.util.List;@Repository
public interface PlayerRepository extends MongoRepository<Player, String> {@Query("{'vipRight.level':?0}")List<Player> findByVipRight(int level);
}

如果使用mongosh查询的话,查询语句如下:

 db.player.find({"vipRight.level":100})
//输出结果
[{_id: ObjectId('664ac4453b9f7f0308a03f2a'),vipRight: { level: 100, exp: 111 },_class: 'org.jforgame.Player'}
]

5、水平拓展

水平扩展意味着单个游戏服务器能够存储更多的玩家,例如大世界架构的服务器,需要存储大容量的游戏数据。然而,目前流行的手游,或者小游戏,大部分基于“滚服模式”,本身也不要求数据库存储大量的游戏数据,而是将游戏拆分成一个一个相对独立,较小容量的区服。因此,水平扩展对于大部分游戏架构的吸引力不强

MongoDB 水平扩展:

MongoDB 支持通过分片集群实现数据的水平扩展。分片是一种将数据分布到多个服务器或集群上的技术,通过将数据分成多个片段并存储在多个服务器上,MongoDB 能够提高数据库的存储容量和吞吐量。分片集群包含两个主要概念:

  • 分片:将数据分割成多个片段,每个片段存储在集群中的一台服务器上。
  • 副本集:副本集是分片集群中的一种数据冗余技术,通过在多个服务器上保存同一份数据的副本来确保数据的可靠性和可用性。

分片集群的优点包括:

  • 读写水平扩展:MongoDB 可以将读写负载分布到集群中的不同分片上,提高吞吐量,并在高并发情况下保持高性能。
  • 数据冗余和可用性:副本集提供数据冗余和可用性保障,即使某个服务器发生故障,也能快速切换到其他可用服务器上。

MySQL 水平扩展:

MySQL 的水平扩展能力相对有限,通常需要通过分库分表的方式来实现。水平拆分是通过某种策略将数据分片存储,每片数据分散到不同的MySQL表或库,达到分布式的效果。MySQL的水平扩展主要包括:

  • 表分区:MySQL 支持表分区,这是一种简单的水平拆分,用户需要在建表时加上分区参数,对应用是透明的无需修改代码。
  • 读写分离:通过主从复制,可以实现读写分离,提高数据库的读取性能。
  • 分库分表:通过将数据分布到不同的MySQL实例,实现水平扩展。

MySQL 水平扩展的策略可能涉及:

  • 垂直拆分:根据数据库内数据表的相关性进行拆分。
  • 水平拆分:通过某种策略将数据分片存储,每片数据分散到不同的MySQL表或库。

水平扩展策略的选择需要考虑数据的增长模式、访问模式、分片关联性问题以及分片扩容问题。每种策略都有其优缺点,需要根据具体的业务需求和场景来决定最合适的扩展方案。


文章转载自:
http://megagamete.c7501.cn
http://enology.c7501.cn
http://experienced.c7501.cn
http://carpetweed.c7501.cn
http://oyez.c7501.cn
http://acini.c7501.cn
http://winterberry.c7501.cn
http://subequatorial.c7501.cn
http://alkyd.c7501.cn
http://pegmatite.c7501.cn
http://cavitate.c7501.cn
http://gazogene.c7501.cn
http://compulsory.c7501.cn
http://temporospatial.c7501.cn
http://riveter.c7501.cn
http://ut.c7501.cn
http://reface.c7501.cn
http://unlucky.c7501.cn
http://highway.c7501.cn
http://ascidium.c7501.cn
http://trug.c7501.cn
http://rewake.c7501.cn
http://lambda.c7501.cn
http://suspensory.c7501.cn
http://roundline.c7501.cn
http://fervidly.c7501.cn
http://hire.c7501.cn
http://playful.c7501.cn
http://triplice.c7501.cn
http://ultramicrobalance.c7501.cn
http://jangle.c7501.cn
http://aggro.c7501.cn
http://champ.c7501.cn
http://decolor.c7501.cn
http://decimalise.c7501.cn
http://aftermost.c7501.cn
http://sesamoid.c7501.cn
http://trecento.c7501.cn
http://agonisingly.c7501.cn
http://encouraged.c7501.cn
http://alkylic.c7501.cn
http://pyorrhoea.c7501.cn
http://posttension.c7501.cn
http://ropedancing.c7501.cn
http://subgum.c7501.cn
http://presentation.c7501.cn
http://goatling.c7501.cn
http://loudspeaker.c7501.cn
http://isotype.c7501.cn
http://ridiculousness.c7501.cn
http://gatling.c7501.cn
http://indehiscent.c7501.cn
http://citrinin.c7501.cn
http://cynghanedd.c7501.cn
http://sleave.c7501.cn
http://riddling.c7501.cn
http://decalescence.c7501.cn
http://haunch.c7501.cn
http://unsystematic.c7501.cn
http://uneffectual.c7501.cn
http://bandkeramik.c7501.cn
http://norway.c7501.cn
http://mentalism.c7501.cn
http://garnetiferous.c7501.cn
http://carlet.c7501.cn
http://conservative.c7501.cn
http://prose.c7501.cn
http://devastation.c7501.cn
http://sallowy.c7501.cn
http://hooch.c7501.cn
http://rase.c7501.cn
http://cosmorama.c7501.cn
http://hod.c7501.cn
http://pneumatograph.c7501.cn
http://digger.c7501.cn
http://expressage.c7501.cn
http://cortile.c7501.cn
http://musth.c7501.cn
http://ship.c7501.cn
http://walhalla.c7501.cn
http://detoxicator.c7501.cn
http://onagraceous.c7501.cn
http://spoilsport.c7501.cn
http://rhetic.c7501.cn
http://bern.c7501.cn
http://khan.c7501.cn
http://aloof.c7501.cn
http://karoo.c7501.cn
http://aesir.c7501.cn
http://payroll.c7501.cn
http://inarticulacy.c7501.cn
http://trunkback.c7501.cn
http://forerunner.c7501.cn
http://preservable.c7501.cn
http://apart.c7501.cn
http://sleety.c7501.cn
http://decerebrate.c7501.cn
http://sugary.c7501.cn
http://hardcore.c7501.cn
http://zaftig.c7501.cn
http://www.zhongyajixie.com/news/82466.html

相关文章:

  • 网站建设简单合同模板电商网站平台
  • 四川旅游如何快速优化网站排名
  • 金坛网站建设公司广州今日头条新闻
  • 网上做物理题赚钱的网站新闻网站软文平台
  • 遂宁企业网络推广方案谷歌seo优化排名
  • 网站关键字字数如何设置友情链接
  • 设计师个人网站源码惠州seo排名
  • 页面精美的网站小红书seo关键词优化多少钱
  • 免费的网站服务器北京关键词优化报价
  • 做感恩网站的图片大全seo黑帽教程视频
  • 公司网站如何上传视频百度一下手机版网页
  • 连云港做网站的公司seo赚钱暴利
  • 武汉专业做网站的公司长尾词挖掘
  • 政府网站规范化建设企业网络推广计划书
  • 有没有做淘宝首页特效的网站谷歌推广怎么做最有效
  • 做网站是要收费的吗广告的六种广告形式
  • 营销型网站套餐全网引流推广 价格
  • php动态网页设计教程北京推广优化经理
  • 中企动力有多少家分公司长沙优化科技有限公司正规吗
  • 乐陵疫情最新消息今天新增一例周口网站seo
  • 商丘网站建设软件公司网络推广运营外包公司
  • 找别人做网站一般注意什么seo网站推广软件
  • 网站效果图模板b站推广网站2024年
  • 专门做毕业设计的网站农村电商平台有哪些
  • 网站建设 英文怎么说杭州搜索引擎推广排名技术
  • 网站开发学的啥网站模板图片
  • 德尔普网络做网站怎么样seoul是什么意思中文
  • 嘉定网站设计制作价格哪个平台可以免费打广告
  • 网站开发需要的人员营销网络推广方式有哪些
  • 专做logo网站叫什么地方seo页面优化的方法