Open ronalfei opened 9 years ago
针对聊天记录的查询,具体是什么样的接口?
如果是批量的导出,类似导出最近7天的聊天记录这种查询,我觉得可以按照时间来打包存储。比如一个xnest的一个小时的聊天记录打包成一个object,然后用xnest的名字和时间做key,存储到key-value存储中。当一个小时内的聊天记录很多,比如超过4MB时,可以在一个小时内再做小的切分。
名字应该类似于: xnest1_20151015.11.1 代表xnest1这个聊天室中,2015年10月15号11:00-11:59期间的第一个聊天记录对象。
从目前产品上看, 聊天记录的查询应该是滚动查询的, 主要还是提供给用户能看见前面的最近的聊天话题是什么, 按小时切割出来应该不错. 但是当一个小时的记录超过了4M, 在做切割的时候,代码需要处理一些事情. 不过我们目前肯定不会有那么多聊天记录. 我想还是先有在改进会好些.
我们就按"xnest/年月日时"来做bucket/key, value就是一个数组, 里面就是一条条记录, 每一个小时一个k/v对. 可以先不考虑value过大的问题.
这样的话, 滚动查询 就相当于滚动一次就是一小时的记录, 如果要打包下载, 也比较容易处理了.
如果要考虑value过大的话, 就按分钟来切割, 这样一个value肯定不会太大了. 就是碎一点. 我觉得比直接判断是否超过特定大小要简单些.
聊天记录引出 #17 , 每条消息需要一个唯一id
先按小时切割来实现一下?这样实现简单,后续再改进应该也比较方便。
嗯,按小时吧,简单点,先拥有
发自我的 iPhone
在 2015年10月15日,12:35,Xin Zhao notifications@github.com 写道:
先按小时切割来实现一下?这样实现简单,后续再改进应该也比较方便。
— Reply to this email directly or view it on GitHub.
聊天记录暂时持久化到聊天服务器,后续再扩展? 如果是这样的话,我觉得可以先用https://github.com/leo-project/leo_backend_db
这个可以随意创建bucket吗? 如果没有限制的话, 可以先弄这个.
leo_backend_db是对leveldb和bitcask的封装,没有bucket的概念。@ronalfei,你是想一个聊天室一个bucket吗?
我觉得一个bucket对应一个聊天室挺自然, 能这样其实是比较合适的.
问题和 #18 有一定关联系. 聊天的记录提供的查询功能主要就是要: 1.方便浏览器端能向上滚动获取聊天记录; 2.移动端能够方便的进行消息同步.
我把记录先记录到riak中了. 一个bucket一个聊天空间. 通过index的值来决定当前的记录在哪个key里. 目前50条一个key
主要需要实现以下2个功能:
主要功能通过独立module: xhistory(或者另外一个名字)实现 关联的模块有: xnest_manager, xnest, xhistory,
实现流程:
还需要考虑的地方: