如何迁移数据到野火
我们遇到一个常见的咨询就是如何把现有系统迁移到野火,这里就简单讲一下。
首先需要能够现有系统中获取到所有的或者是必须的数据,可以是直接读库,也可以是API来读取数据;当拿到数据后,需要转成野火的格式;然后调用野火的接口导入到数据库中。
常见的数据包括:
- 用户信息
- 机器人账户
- 用户关系(好友/黑名单/备注等)
- 群组
- 消息
- 公众号及订阅关系
- 常见设置(置顶/静音等)
- 敏感词
以上野火都提供了对应的接口,其中消息有个导入消息的接口,这个只有近期专业版IM服务才加上的。社区版IM服务不支持消息导入,其他都支持。
有个问题是用户ID的映射,有可能是客户有自己的用户/业务系统,但聊天软件是一套独立的系统,拥有完全不同ID关系。为了方便,建议使用自己的用户id,这样当导入所有的数据时,都要做一下id转换。
另外就是数据转换,用户消息/用户关系/群组等都比较简单,字段一一对应就可以了。但消息是比较麻烦的,需要把现有所有类型的消息找出来,再转成野火对应的消息。如果是java语言,可以很方便的用野火的java sdk。
最后就是数据安全,一个是导入要在正式使用之前,导入之后要进行充分测试,另外一个要继续保留数据源,保留半年或者一年。
1. 常见问题:
- 如何处理未读?
答: 当导入后,所有消息都变成了未读。为了给用户更好的体验,可以把所有消息都变成已读。首先要理解野火未读是如何同步的,每个用户的每个会话都有一个最后阅读时间保存到
t_user_setting表的。这个表中有属性_uid,表示是那个用户的设置;_scope表示数据的类型,已读记录的scope值为7;_key是关键字,在同步未读的设置中_key是会话的拼接,格式是type_line_target;最后_value是时间戳的字符串。比如要设置用户A账号种的与B的单聊最后阅读时间为T,那么这个表的这一行的值就是A,7,0_0_B,T。可以直接写库,也可以调用接口写。这样当客户端同步下来后,就会把与B的单聊会好时间大于T的所有消息都改成已读。