我们现在的软件的数据量比较庞大,大概 200-300 万的节奏,用户希望可以将我们的数据以图表的方式,用 select 语句查询到的数据大概有 1w 以上,如果显示在图表上的话,会很慢,影响用户体验。请问如何优化呢? 其实,编程不仅仅是实现功能,内部的优化才是真正体现功力的地方,以前的编程过于注重业务逻辑,而忽视性能优化,这的确是个错误啊!
1
swcat 2018-09-06 19:45:38 +08:00 via Android
缓存,定时更新
|
2
fangchang 2018-09-06 19:48:57 +08:00
materialize
|
3
lovelybear OP @fangchang C# WPF 的
|
4
lovelybear OP @swcat 嗯,具体如何操作呢?比如写个类定时更新,然后缓存进内存或者是文件?
|
5
swcat 2018-09-06 20:34:47 +08:00 via Android
function getData()
{ if (cache.hasExpired() ) { cache.update() } return cache.data } hasExpired 方法就是你的更新策略, 如果写少读多,可以设置为最后更新时间 不确定就弄成定时更新 |
6
swcat 2018-09-06 20:35:38 +08:00 via Android
写进文件还是内存看情况啊
|
7
lihongjie0209 2018-09-06 20:48:13 +08:00
图表是什么数据? 报表: 统计性的 或者是地图: 展示型的
对于统计型 如果数据是只读的, 那么你可以提前计算好, 存哪里无所谓, 然后展示给用户看 如果数据是可写的, 那么就需要你动态计算了, 也就是你提到的会卡 以上两种方法的混合解决方案: 首先定时计算, 但是这个数据可能是不准确的, 因为数据还可写, 在每次更新数据的时候重新计算一遍, 最佳退化到只读的情况, 最差退化到可写的情况. 对于展示型的数据: 展示粒度没必须要那么细, 一万条数据 1000 条展示个大概, 放大的时候再加载嘛 |
8
liprais 2018-09-06 20:56:20 +08:00 via Android
预先计算,近似估计
|
9
mingyun 2018-09-06 22:45:38 +08:00
clickhouse 了解下 300 亿数据查询几秒
|
10
lovelybear OP @lihongjie0209 就是 chart 控件
|
11
owenliang 2018-09-07 09:10:34 +08:00 via Android
elasticsearch 间隔取样
|
12
Eoston 2018-09-07 09:23:10 +08:00
数据采样
|
13
lovelybear OP |
14
Eoston 2018-09-13 09:43:29 +08:00 1
@lovelybear 对这一万条数据每隔 10 条取一条,然后综合返回给前端~~数据量特别大的时候,可以用多线程对拿到的数据分组,每组里面隔一定的数据取出来
|
15
lovelybear OP @Eoston 多谢,问题已经解决了,隔 50 取一条
|