redis作主数据库, 数据分析和查询在mysql中,须要把数据从redis 同步到 mysqlmysql
有什么解决方案? gem 或者思路? 谢谢。 须要考虑数据的一致性,其实本身写git
应该是能够的,有没有现成的类库什么的?github
共收到 8 条回复web
来点思路也行额。。 有作过的吗sql
建议直接在 redis 中作分析和查询, 或者在往redis存数据的全部地方都加一个往mysql存数据的方法... redis 和 mysql 数据的范式是彻底不同的, 转换就是一个大问题, 恐怕很难找到现成的类库, 找到也不必定符合要求.ruby
redis 也有很多给查询和分析使用的方法, 还能够执行 server side lua: http://redis.io/commands/eval, 基本能解决缺乏 average()
, sum()
等函数的问题ide
#2楼 @luikore
谢谢啊,如今看了下,有几种思路,可是感受都不是很优雅且有必定的复杂度,抛砖引玉
1) 在全部redis 增,删,改数据的地方,处理完以后,放到队列,由MYSQL处理队列中的东西
缺点就是,代码估计很难看,并且这部分属于系统而外的东西。不爽
2) redis-dump,redis-rdb之类的工具导出数据并同步
https://github.com/nrk/redis-rdb
导出数据有两种模式
a. rdb 文件 ( redis 作的快照 ,这个文件看起来是会从新整理的,因此所sync的时候可能不方便,不便于判断哪些数据是删除了的,并且须要从新把全部数据检查一遍,这个恐怕很差)
b. aof 文件 ( 利用这种,能够有一个offset标记同步到哪儿了,若是失败了,或者下次sync的时候,从offset开始解析命令 )
问题在于,怎么对应redis的命令 和 mysql 的db 结构, 若是mysql 的db 结构和redis 不一样的时候,
好比有中间表,也须要想办法处理
3) 直接读redis db , 在redis 对象中须要加上create_at ,update_at,须要额外的记录deleted的对象。 sync的时候记下updated_at,
下次sync找到udpated_at 以后的数据进行处理 。
redis作主数据库
,这是啥应用 ...
#4楼 @bhuztez
手机端游戏类的,前期可能先这样弄吧,写入比较大。
估计数据量大的时候,会考虑持久化一部分到硬盘。
mysql 主要是怕处理全文索引,一些复杂查询redis不太好作
#5楼 @ihlayy redis作复杂查询很容易啊...全文索引就和数据库无关吧...
建索引得占内存啊,若是是从description之类的字段里索引,不必定划算的意思。
别用mysql了,多买几个ups,搞个100g内存就好了哈哈。