汽配网 国内最专业的汽配B2B商务网

环信李楠:IM客户端数据库加载过程优化

IM通讯里面有两个重要的数据概念,一个是会话,一个是会话中的消息。

在系统初始化时,这两部分都要从数据库中加载到内存中。

数据组织结构是ConversatonManager包含多个会话,每个会话含有消息列表。

环信李楠:IM客户端数据库加载过程优化

每次系统启动的时候,首先查询会话列表,然后对每一个会话加载其中的消息。对应的伪码

环信李楠:IM客户端数据库加载过程优化

因为每次查询都要涉及数据库操作,导致加载时间很长,而且大量的IO操作也会导致耗电量增加,所以这部分加载过程,是我们优化的重点。

思路很简单:一条SQL语句做完所有事情,避免for循环,避免多次遍历数据库。

修改后的结构是:

环信李楠:IM客户端数据库加载过程优化

这样大量的细节隐藏在SQL语句实现中。

这里面的实现有两种情况:

1. 一种是每个会话只加载一条消息记录。

2. 另一种是每个会话加载多条消息记录。

1. 每个会话只加载一条消息记录(假设是最后一条消息),这种情况可以使用关键字group by 处理:select *, max(msgTime) from xxx_table group by conversation,这种情况比较好理解,而且网上类似的问题很多,很容易找到答案。

2. 对于每个会话要求加载多条消息的情况(消息按照时间排序),我的思路是在group by, order by, limit这些关键字中寻找答案。

先在网络上寻找答案,寻找一些类似的实现,可惜都不理想。

有的实现就是把for循环转移到sql语句中,利用游标的概念,但是计算的数量级并没有下降,使用我本地的较大的数据量进行试验,执行时间过长。

或者是看到oracle数据库中有解决方案,但是需要使用关键字partition,这个应该是oracle数据看到经常会有类似的问题而提出的专用关键字。

对于mysql, sqlite等常用数据库,没法移植该实现。

最终我使用的方法是

select * from xxx_table order by conversation, msgTime desc.

这样整个表单进行排序,首先按照会话名称进行排序,然后按照消息时间排序。

还剩下一个条件没有满足,就是每个会话消息的限定个数。

把个数的遍历放在外面实现,通过一个while循环将会话中超出limit部分的消息剔除。

伪码:

环信李楠:IM客户端数据库加载过程优化

这种方法的缺点是cursor会把整个表单都返回到用户空间,然后把所有的数据在用户空间都遍历一遍,有多余的操作。

不属于最优实现。

优点是两次排序使用order by,可以由数据库实现,这部分执行效率比较高,然后一次遍历cursor就执行完剩余操作,执行效率在接受范围之内,和改动之前相比效率提升至少一个数量级。

测试结果:一万条消息记录,一千个会话,执行时间大概4秒

补充一下,对于非数据库专业人员来说,有一点需要注意:

group by, order by, limit这些关键字在sql语句中有强制的顺序要求,limit , order by,都不能写到group by前面。

下面是我在寻找这个问题过程中看到的一些帖子,第一行是文章标题,后面是我看后的感受。如有冒犯,敬请原谅。

[SQL中Group分组获取Top N方法实现]

游标方法可取,网上讨论说运行比较慢。

[]一条SQL语句搞定分组并且每组限定记录集的数量]

仅适用于oracle

[]mysql实现每组取前N条记录的sql,以及后续的组数据量限制]

好像是可以,没看明白

[]SQL--分组显示数据,显示每组的前几行数据]

http://blog.163.com/peng_peng1028/blog/static/107463820111019240379/

像是答案,效率好像很低

[取每组前几条记录的SQL写法]

http://blog.sina.com.cn/s/blog_412897e10100r2rq.html

该页面提供两种方法,都尝试过,效率太低,杀掉程序时还没执行完

本文章版权归环信所有,转载请注明出处。

责任编辑:barcasoul
0
先锋旗舰石头V20深度体验:下一代清洁神器标杆 新闻
29
Mar2024
681
定义清洁新标准!石头G20S正式发布上市 新闻
29
Mar2024
346
石头G20S深度体验:直击用户痛点 重塑扫拖机器人清洁新体验 评测
29
Mar2024
283
超越现有产品的下一代清洁神器 先锋旗舰石头V20正式发布 新闻
29
Mar2024
365
有AI的科技∙艺术∙家”三星家电新品发布会举行  2024全系产品重磅升级 新闻
17
Mar2024
114
三星携多款重磅新品亮相AWE 2024,打造有AI的科技·艺术·家 新闻
14
Mar2024
175
海尔智家:科技的最高目标是让用户满意 新闻
14
Mar2024
241
海尔李华刚:海尔是全球家电第一品牌 是中国家电无可争议的引领者 新闻
13
Mar2024
897
中国家用电器协会执行理事长姜风:海尔是中国家电的骄傲 新闻
13
Mar2024
374
长虹电视迎来革新,壁画系列新品即将亮相AWE 新闻
08
Mar2024
302
石头P10S Pro评测:加量不加价 新一代全能性价比机皇全面升级 新闻
05
Mar2024
1426
森歌集成灶峰会发布重磅战略,引领厨电行业新年新气象 新闻
28
Feb2024
592
海信电视业绩飙升,全球市场表现亮眼 新闻
26
Feb2024
1895
石头科技两款自清洁扫拖机器人新品发布双伸缩机械臂清洁力新巅峰 新闻
18
Feb2024
955
董明珠豪掷两亿!格力年终奖大放送,员工梦想盛典现场沸腾 新闻
29
Jan2024
5639
格力电器2024全球梦想盛典:董明珠展望业绩翻番,税收贡献目标超200亿 新闻
29
Jan2024
6552
机器人也能“长”出手臂?石头P10 Pro斩获2023驱动中国颠覆性技术创新大奖 新闻
15
Jan2024
988
“新物种”来了!美的COLMO双洗站斩获2023驱动中国洗涤品类突破性创新大奖 新闻
15
Jan2024
650
2023驱动中国卓越清洁品类大奖揭晓,云鲸智能洗地机S1 Max斩获行业殊荣 新闻
15
Jan2024
926
石头扫地机器人后续将支持苹果家庭 新品接入Matter协议加速互联互通 新闻
10
Jan2024
600
石头智能洗地机 A20 Pro评测:机器平躺清洁,床底灰尘无处藏身了 新闻
03
Jan2024
576
双十一过后 清洁家电追觅、添可成投诉重灾区 新闻
22
Dec2023
1124
提振市场信心!格力电器凌晨罕见发布最新业绩预告    新闻
21
Dec2023
1416
扫地机器人避障技术发展史:曾经横冲直撞的“智障”怎么变聪明了? 新闻
21
Nov2023
581
苹果用 Apple Watch追踪哮喘来减少患者就诊次数,这会是下一个方向吗? 新闻
10
Nov2023
1215
江苏发布25款扫地机器人产品质量安全抽检结果,石头科技顺利通过国家标准检测 新闻
08
Nov2023
368
双11超强实惠来袭!石头H1 Neo开启精致洗烘护体验,真丝也能在家洗了 新闻
24
Oct2023
479
公共洗衣机用来洗内裤引发争议,专业级石头M1关注用户私护健康 新闻
23
Oct2023
938
石头分子筛迷你洗烘一体机 M1评测:mini产品也有专业表现,从此告别手洗内衣 新闻
28
Sep2023
735
石头科技9周年:技术创新引领清洁行业变革,给用户生活做加减法 新闻
14
Sep2023
496
石头H1 Neo评测:分子筛低温烘干,羊毛、真丝面料也能在家洗了 新闻
05
Sep2023
27315
创新基因驱动行业发展!云鲸智能入选2023清洁电器产业白皮书 新闻
05
Sep2023
469
石头分子筛洗烘一体机H1 Neo发布 带来洗烘护俱佳的全能体验 新闻
05
Sep2023
15276
高端低温洗烘新选择!石头分子筛洗烘一体机H1 Neo即将发布:9月5日见 新闻
04
Sep2023
22199
石头自清洁扫拖机器人P10 Pro发布,动态机械臂边拖、热水洗布清洁新巅峰 新闻
29
Aug2023
341
云鲸J4评测:清洁再突破,你想要的松弛感有TA就够了! 评测
28
Aug2023
1399
60°热水复洗拖布!石头P10 Pro即将强势登场:这又是一次全新突破 新闻
24
Aug2023
695
长手臂的机器人你想过吗?石头科技给出新答案 新闻
17
Aug2023
1043
扫地机器人如何承包家庭地面卫生清洁?石头G20告诉你答案 新闻
03
Aug2023
488
石头智能洗地机 A10 UltraE评测:全能清洁,家庭打扫卫生有TA就够了! 新闻
03
Jul2023
633
印度市场环境之殇 中国家电企业能否承受得起 新闻
30
Jun2023
2817
寻寻觅觅,彩电厂商能否“智”取未来? 新闻
30
Jun2023
1521
各执一词谁有理?微波炉股权纠纷中的暗流 新闻
19
Jun2023
3797
收购未果反手举报上市公司?格兰仕子公司出手的背后:打响微波炉大战 新闻
15
Jun2023
4311
云鲸智能洗地机S1评测:清洁强劲,你家电视柜底下的灰尘再也“藏”不住了 评测
14
Jun2023
1719
集成灶,卷向多元,走向AI 新闻
12
Jun2023
1010
极米、坚果“扯头花”,便宜了“小弟们”? 新闻
07
Jun2023
2102
家电行业:如何看待大宗原材料价格回落 新闻
06
Jun2023
2141
坚果高管炮轰极米,撕开了投影市场最残酷的真相   新闻
31
May2023
576
618洗衣机到底要怎么选?石头H1:行业第三种烘干技术,衣服烘完直接穿 新闻
30
May2023
403
苏宁&海尔冷媒变流空调全国推广月启动,掀起空调行业第3次技术革命 新闻
25
May2023
1349