遇到一Android点歌项目,歌单信息是txt文件。原本的项目第一次打开时將TXT文件解析存储到数据库db文件中,然后通过sql查询,后来发现了问题,让我修改。(说明:数据有37万条,而且数据在不断增加。)
已做的优化:
1.已经加了索引和分页的查询优化。
2.纯sql查询,不存在数据库框架做的额外开销。
3.只查询需要的字段。
4.使用异步查询。
需求:
1.文字查询还是有点延迟,大概1秒左右,需要优化。
2.最重要的问题来了,拼音查询,自定义键盘,随着拼音键盘的点击,不能点的拼音按键变灰。(拼音键盘变灰处)
第一个问题解决不了老板勉强可以接受,但是第二个问题有点严重。因为要想知道哪些拼音按键变灰,要查询全部的数据啊!那么分页就不能用了,这使得查询时间大大增加。输入第一个拼音,要3秒左右,键盘才能作出反应,第二个拼音之后会好一点,但是但是也不理想。
针对问题2,最终想到了两个办法:
1.將歌单表按歌名首字母a-z分表存储,如果还是慢,还可以再分aa-az...za-zz。但是后来发现即使速度快了26倍,还是有点慢,就算是再分aa-az...za-zz,也频繁切换查询表,或表链接太多也容易出问题,而且也不能解决问题1,所以放弃了。
2.因为内存IO比外存IO要快很多,所以起动APP时可以將歌单信息全部查询存储在list集合里面,每次查询直接遍历集合即可。
这样果然快很多,即使查询全部数据最高也只用300ms左右,同时解决了两个需求。但新问题又来了,list存储数据过大,导致内存使用过多,这样不仅仅让APP容易被杀,而且出现卡顿问题。于是我將开启另外一个进程存储和查询list,虽然问题看似解决了,但是感觉心里不踏实。
问题:针对点歌拼音键盘变灰处理还有什么解决方案吗?或者list存储数据过多导致内存占用过大,有什么解决办法吗?