内存化思路

尽量做了,目标是绝大部分是操作内存。而又不需要特意去写麻烦的代码去处理内存与数据库 数据一致性问题

 思路是?

从内存 保存到数据库 ,这个好做吧

内存中每条记录记录个上次保存时间、保存频率等等

内存记录的创建时间,生命周期

写另外一个线程去写内存中的全部记录,把合适 时间的数据保存到DB

把合适时间的数据从内存中删除

这分别是一个保存到DB 和 清掉内存数据(为了减少内存使用) 的工作
然后从数据库里面读,就是早上发出来 那样的方法,尽量封装几个常用 的

先找内存中有没有,再找数据库中(找到就写入内存)。

就是说内存的数据 与 数据库中的数据不是100%对应的

但结构需要完全 一致

这样做,最终内存中的数据都是一些比较常用的。

而上次保存时间、保存频率、创建时间、生命周期 这些可以记录在 Java表结构类里。 程序员可以设定具体数值 

比如 玩家表 经常 用到,生命周期就长一点,保存频率长一点
日志的,生命周期短一点
后续 :
之前 说 “内存数据库” 与 “MongoDB” 100%对应
然后现在是发现不能100%对应
查询条件 对应 一条记录的 这类可以 对应
然后 查询条件 对应 多条记录的, 需要在内存数据库中做个标记“LIST”
在同步内存到数据库的时候 ,看到这个标记,就知道是列表,再读列表,写入数据库
就是内存数据库 完全使用 k / v 结构

关于mq 在游戏中的使用:

先分清出几类sql,一种是玩家密切重要的,要立刻看到效果,不允许慢的,这种就实时执行;另外一种sql,像log,玩家基本不会去关心的,我们可以在cpu或io不忙时候再去执行对不 
一个功能多数都会涉及两种sql执行吧 
我们就分开来实施,在这一功能中,重要的一定要执行,不重要sql我把他放在一个队列,搞个组件(判断cpuio不忙的时候)临时去这些待执行的队列再执行就ok
message queue就是信息队列技术的一个名称嘛
message queue组件目前有很多开源的框架技术嘛,如张宴老师做的httpsqs等,当然公司内部开发也行,我们公司自己独立开发过
httpsqs支持java、php、c等等语言 
异步取你要做的功能,如sql、功能等等 
httpsqs是独立的 
当然还有很多 
就是有内嵌的其他实现咯。 
那个异步组件你用个还可以把均衡负载做得非常理想的
是的,其实新浪微薄以及人人网用这个还是非常多的
里面架构很多基于这个来实现,而且能把几门语言很容易结合起来
关于一些需要实时操作的东西,好像就不能异步了。
组件不一定是异步,还可以同步,同步的作用在于跨语言实现啦
比如说我用php写个战斗算法,但很消耗时间,我改用c,但是整个游戏基本都是php,如果通过php调用c算法呢,估计要做扩展,这个时间有这个组件就很容易生效啦,这个组件可以同步也可以异步的 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值