XStation / XPro

A Niubility Data Exchange System
MIT License
6 stars 0 forks source link

xpro完整的聊天记录功能 #16

Open ronalfei opened 9 years ago

ronalfei commented 9 years ago

主要需要实现以下2个功能:

  1. 对xnest记录完整的聊天记录
  2. 提供可查询的接口

主要功能通过独立module: xhistory(或者另外一个名字)实现 关联的模块有: xnest_manager, xnest, xhistory,

实现流程:

  1. xnest_manager在启动xnest时传递xnest_name给xnest进程.
  2. xnest通过xnest_name对每条信息通过xhistory模块异步调用进行记录( 记录格式需要考虑)

还需要考虑的地方:

  1. 聊天记录格式
  2. 用riak来存储并不是很直接. 是否可以考虑用专门的时间线数据库.
  3. 等等等.
ZhaoX commented 9 years ago

针对聊天记录的查询,具体是什么样的接口?

如果是批量的导出,类似导出最近7天的聊天记录这种查询,我觉得可以按照时间来打包存储。比如一个xnest的一个小时的聊天记录打包成一个object,然后用xnest的名字和时间做key,存储到key-value存储中。当一个小时内的聊天记录很多,比如超过4MB时,可以在一个小时内再做小的切分。

名字应该类似于: xnest1_20151015.11.1 代表xnest1这个聊天室中,2015年10月15号11:00-11:59期间的第一个聊天记录对象。

ronalfei commented 9 years ago

从目前产品上看, 聊天记录的查询应该是滚动查询的, 主要还是提供给用户能看见前面的最近的聊天话题是什么, 按小时切割出来应该不错. 但是当一个小时的记录超过了4M, 在做切割的时候,代码需要处理一些事情. 不过我们目前肯定不会有那么多聊天记录. 我想还是先有在改进会好些.

我们就按"xnest/年月日时"来做bucket/key, value就是一个数组, 里面就是一条条记录, 每一个小时一个k/v对. 可以先不考虑value过大的问题.
这样的话, 滚动查询 就相当于滚动一次就是一小时的记录, 如果要打包下载, 也比较容易处理了.

ronalfei commented 9 years ago

如果要考虑value过大的话, 就按分钟来切割, 这样一个value肯定不会太大了. 就是碎一点. 我觉得比直接判断是否超过特定大小要简单些.

ronalfei commented 9 years ago

聊天记录引出 #17 , 每条消息需要一个唯一id

ZhaoX commented 9 years ago

先按小时切割来实现一下?这样实现简单,后续再改进应该也比较方便。

ronalfei commented 9 years ago

嗯,按小时吧,简单点,先拥有

发自我的 iPhone

在 2015年10月15日,12:35,Xin Zhao notifications@github.com 写道:

先按小时切割来实现一下?这样实现简单,后续再改进应该也比较方便。

— Reply to this email directly or view it on GitHub.

ZhaoX commented 9 years ago

聊天记录暂时持久化到聊天服务器,后续再扩展? 如果是这样的话,我觉得可以先用https://github.com/leo-project/leo_backend_db

ronalfei commented 9 years ago

这个可以随意创建bucket吗? 如果没有限制的话, 可以先弄这个.

ZhaoX commented 9 years ago

leo_backend_db是对leveldb和bitcask的封装,没有bucket的概念。@ronalfei,你是想一个聊天室一个bucket吗?

ronalfei commented 9 years ago

我觉得一个bucket对应一个聊天室挺自然, 能这样其实是比较合适的.

ronalfei commented 9 years ago

问题和 #18 有一定关联系. 聊天的记录提供的查询功能主要就是要: 1.方便浏览器端能向上滚动获取聊天记录; 2.移动端能够方便的进行消息同步.

ronalfei commented 8 years ago

我把记录先记录到riak中了. 一个bucket一个聊天空间. 通过index的值来决定当前的记录在哪个key里. 目前50条一个key