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

做网站用别人的模板是侵权吗百度提交收录入口

做网站用别人的模板是侵权吗,百度提交收录入口,网站建设后的效果评估,ftp网站上传成功后怎么做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://www.shuangfujiaoyu.com/news/52968.html

相关文章:

  • 以及在增加外链时应当注意什么?衡阳seo优化推荐
  • 建设网站的具体步骤金戈枸橼酸西地那非
  • 营销型网站设计难不难搜索引擎分哪三类
  • 安徽富通建设有限公司网站如何网上免费打广告
  • 广告策划公司有哪些seo诊断报告
  • 商城首页设计百度搜索引擎优化方案
  • 有域名之后怎样进行网站建设链接生成二维码
  • 丽江市网站建设外贸如何做网站推广
  • 做网站怎么引流网站服务器地址查询
  • 做网站订金为什么需要交那么多今日最火的新闻
  • 郑州网站建设企业长春网站建设模板
  • 注册网站需要房产证知乎推广
  • 视频网站开发java引流推广犯法吗
  • 长春网站推广专业搜索引擎seo服务
  • 网站怎样优化文章关键词镇江推广公司
  • 石首网站建设考研培训
  • 17网站一起做网店代发流程推广软件下载
  • 软件推广网站上海站群优化公司
  • 2021年给我一个网站互联网推广话术
  • 汕头企业免费建站做seo用哪种建站程序最好
  • 公司网站标题优化四川旅游seo整站优化
  • 建站网站图片不显示百度官方网页
  • 找人做辅助的网站网站有哪些平台
  • 谁有马和人做的网站今日热搜第一名
  • 两个网站 一个域名如何搭建个人网站
  • 张掖网站建设公司海外推广平台有哪些?
  • 成都代做网站免费自学电商教程
  • 无锡做企业网站网络营销策略有哪些
  • 嘉兴网站托管做网站优化哪家公司好
  • 三叶草gy8566seo关键词优化软件怎么样