关于I/O的一些记录
2015-01-17 22:13
190 查看
前段时间做了一个聊天系统,这个系统需要缓存一些聊天的记录,所以用到了IO。
首先,简单那说下我定义的聊天消息的数据结构,该结构包括:聊天对象ID,昵称,聊天内容等关键信息。如果是我发送给别人,ID为被聊天对象的ID,由服务端转发(同时)到相应ID的人那里,同时修改ID为我的ID,客户端接收到这个消息之后就可以拿到聊天对象的ID并进行回复了。
对于如何区分存储我和不同聊天者的聊天消息,我的做法是以聊天对象的ID作为键值对的键,值为互相的聊天记录队列(FIFO),这个记录就是上面定义的那个数据结构,包括聊天对象的ID,昵称和内容等相关信息。在点击某个聊天对象发起聊天的时候就会先拿到他的ID,在缓存键值列表中查询,如果有聊天消息,则将缓存消息显示到界面上。再定义一个脏位,用于判断是否有新的消息加入,如果没有,在用户关闭聊天界面的时候就没有必要写入本地,如果有,就写入本地。
当用户登陆的时候,就读取本地聊天缓存文件,然后JSON解密,当用户关闭聊天界面的时候就将聊天消息使用JSON加密,然后缓存到本地。
当时做这个系统的时候,以为聊天文本不会很大,IO也不会很慢,也没有对聊天消息的数量进行限制,结果在PC上是感觉不到什么,当时在手机上,当聊天消息越来越多的时候,会在登陆界面卡一阵子。查看了下聊天记录的文本,也才十几KB。
总结下这次经验教训吧。
1.以后需要用到I/O的时候一定要对数据量进行相关的限制,不能无限制的缓存,不然会导致缓存文件越来越大,I/O时间肯定也是越来越大(这也是我的QQ越用越卡的原因);
2.移动设备的I/O性能和PC的I/O性能有很大的差距,且移动端更具有多样性,应该慎重考虑;
3.不同聊天者的聊天消息可以分别缓存为一个单独的文件,而没必要使用键值对存储并将所有聊天对象的聊天消息缓存到同一个文件中,这样当需要调用哪个聊天对象的聊天记录时再去I/O,数据量小且花费的I/O时间也短,也容易管理(比如新增删除特定人的聊天记录的时候只要将文件删除即可,没有必要去操作键值列表)。
首先,简单那说下我定义的聊天消息的数据结构,该结构包括:聊天对象ID,昵称,聊天内容等关键信息。如果是我发送给别人,ID为被聊天对象的ID,由服务端转发(同时)到相应ID的人那里,同时修改ID为我的ID,客户端接收到这个消息之后就可以拿到聊天对象的ID并进行回复了。
对于如何区分存储我和不同聊天者的聊天消息,我的做法是以聊天对象的ID作为键值对的键,值为互相的聊天记录队列(FIFO),这个记录就是上面定义的那个数据结构,包括聊天对象的ID,昵称和内容等相关信息。在点击某个聊天对象发起聊天的时候就会先拿到他的ID,在缓存键值列表中查询,如果有聊天消息,则将缓存消息显示到界面上。再定义一个脏位,用于判断是否有新的消息加入,如果没有,在用户关闭聊天界面的时候就没有必要写入本地,如果有,就写入本地。
当用户登陆的时候,就读取本地聊天缓存文件,然后JSON解密,当用户关闭聊天界面的时候就将聊天消息使用JSON加密,然后缓存到本地。
当时做这个系统的时候,以为聊天文本不会很大,IO也不会很慢,也没有对聊天消息的数量进行限制,结果在PC上是感觉不到什么,当时在手机上,当聊天消息越来越多的时候,会在登陆界面卡一阵子。查看了下聊天记录的文本,也才十几KB。
总结下这次经验教训吧。
1.以后需要用到I/O的时候一定要对数据量进行相关的限制,不能无限制的缓存,不然会导致缓存文件越来越大,I/O时间肯定也是越来越大(这也是我的QQ越用越卡的原因);
2.移动设备的I/O性能和PC的I/O性能有很大的差距,且移动端更具有多样性,应该慎重考虑;
3.不同聊天者的聊天消息可以分别缓存为一个单独的文件,而没必要使用键值对存储并将所有聊天对象的聊天消息缓存到同一个文件中,这样当需要调用哪个聊天对象的聊天记录时再去I/O,数据量小且花费的I/O时间也短,也容易管理(比如新增删除特定人的聊天记录的时候只要将文件删除即可,没有必要去操作键值列表)。
相关文章推荐
- 关于《博客园精华集》第一轮收录情况(仅针对2008年5月19日起的一些文章的记录)
- 最近关于DNN,又有一些值得记录的小技巧(tips),sql乱码和articles模块源码修改
- 关于Java性能监控的一些记录
- 关于IE浏览器历史记录的一些知识
- 关于IE浏览器历史记录的一些知识
- 和小贺的聊天记录,关于业务用例和系统用例的一些迷惑
- 关于完全卸载Office的一些记录
- 关于 log4j.jar 和 commons-logging.jar 的一些记录
- 关于线程安全的一些记录
- 关于XenServer6.0的一些使用心得记录
- 最近关于DNN,又有一些值得记录的小技巧(tips),sql乱码和articles模块源码修改
- 关于Linux2.6中断的一些记录
- 关于hadoop的一些记录
- 关于基础架构的一些零碎问题的整理记录
- 【讨论】关于Java性能监控的一些记录
- 关于《博客园精华集》第一轮收录情况(仅针对2008年5月19日起的一些文章的记录)
- 关于linux的一些临时记录
- 关于ZX的一些反检测的记录
- 关于SQL的一些记录
- 关于XenServer6.0的一些使用心得记录 2