首页 新闻 会员 周边

有一个基础数据表,有上万条数据,需要在客户端做autocomplete的自动显示,如果快速显示出来呢?

0
悬赏园豆:10 [已解决问题] 解决于 2015-07-02 09:11

首先,我知道要把数据读到缓存中,现在的问题是:

1、这么多数据,在网站启动的时候读出来也需要好长时间,

2、当数据更新时更新缓存,企不是又要读一次这么多的数据?如果在更新缓存期间,刚好有人在使用,那怎么办?

3、缓存数据能不能只局部更新呢?

请做过的朋友指点一下,谢谢!!!

小徐的博客的主页 小徐的博客 | 初学一级 | 园豆:15
提问于:2014-10-29 09:51
< >
分享
最佳答案
0

但是如果在前端做autocomplete自动显示的话,肯定要需要查找所有数据,所以数据肯定要放在缓存中

谁告诉你这个结论的,拉出去砍了。

1、通常AutoComplete都是有限定,就算符合条件的有300个,也只显示最前面的10个之类。

2、上万条数据,放在数据库里面,加条件查询,再加上Top 10(SQL)或者Take(10) (LINQ)

对于数据库来说,不过是几MS的事,你的系统是12306还是京东商城?如果不是的话,你可以试试看直接查询数据库,

并不是多么可怕的事。

3、如果你的并发连接达到10万个以上,或者其他原因造成确实需要利用缓存进行优化,其实你就不会在这儿问问题了。

我最怕的就是这种编程不超过5年,被网上那些唯性能论的文章带坏的码农了。

收获园豆:10
爱编程的大叔 | 高人七级 |园豆:30839 | 2014-10-29 10:11

先谢谢你的回复:)

AutoComplete要显示的数据确实是有限,但是用户每输一个字就查询一次数据库,但是数据库的基础数据又有上万条,这样查询保证不了AutoComplete的即时显示的效果吧?

如果把这些数据放到缓存中,那么像这样的数据缓存更新是怎么处理的?当更新缓存时,如果有人查询企不是很慢?

小徐的博客 | 园豆:15 (初学一级) | 2014-10-29 10:15

@小徐的博客: 

这样查询保证不了AutoComplete的即时显示的效果吧?

这个人也拉出去砍了。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-10-29 10:16

@爱编程的大叔: 都砍了谁来做事啊:)

用户每输一个字符就直接从数据库中查?

小徐的博客 | 园豆:15 (初学一级) | 2014-10-29 10:18

@小徐的博客: 这么说吧,

不管是WINFORM还是WEB开发,如果数据提供服务器是在远程(IIS/或是SQL Server)

网络传输的时间都远远大于数据库查询的时间。(就你的需求而言)

可能是 200MS+10MS(这个10MS你变成1MS没有任何意义)

只有当你的数据库服务器已经忙到不可开交的时候,缓存才有意义。

 

可能不好听,但你目前的知识水平,尽量别道听途说。(有可能的情况下自己测试一下)

 

关于缓存的事,你最好再找下相关的文章,仔细看看,理解一下,

你对缓存的概念还有一些误区。

但对于你目前的场景来说,不需要缓存的。(你别告诉我并发有几万,这不科学,

你是老板的亲戚也不能这样瞎搞)

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-10-29 10:20

@爱编程的大叔: 好的,我试试这样直接查询的效果,谢谢

小徐的博客 | 园豆:15 (初学一级) | 2014-10-29 10:23

@小徐的博客: 我曾经也写过关于缓存的东西,只不过是吧data放到本地而已,而数据的结构,取data的算法都远没有集成好的oracle、sql server等系统做的好。直接调用数据库是完全可以满足你的需求的。听 @爱编程的大叔 的话没错,你想想,他都是大叔了,哈哈。

CaiYongji | 园豆:1267 (小虾三级) | 2014-10-29 10:40
其他回答(6)
0

不至于一个页面显示上万条吧,没意义啊,眼睛都看花了

(1)分页查询显示

(2)导出的话,上万条不多

风醉 | 园豆:1197 (小虾三级) | 2014-10-29 09:54

是的,但是如果在前端做autocomplete自动显示的话,肯定要需要查找所有数据,所以数据肯定要放在缓存中,现在最大的问题是缓存更新怎么做呢?

支持(0) 反对(0) 小徐的博客 | 园豆:15 (初学一级) | 2014-10-29 09:56

@小徐的博客:不晓得,对前端处理这种没做过

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2014-10-29 09:58
0

你是要 AutoComplete 自动显示出上万条数据吗?

Launcher | 园豆:45045 (高人七级) | 2014-10-29 09:55

当然不是了,但是为了即时显示相关数据,肯定不能从数据库里查,那样autocomplete显示的数据半天都出不来。

支持(0) 反对(0) 小徐的博客 | 园豆:15 (初学一级) | 2014-10-29 09:58
0

我曾经也写过关于缓存的东西,只不过是吧data放到本地而已,而数据的结构,取data的算法都远没有集成好的oracle、sql server等系统做的好。直接调用数据库是完全可以满足你的需求的。听 @爱编程的大叔 的话没错,你想想,他都是大叔了,哈哈。

CaiYongji | 园豆:1267 (小虾三级) | 2014-10-29 10:42
0

 @爱编程的大叔 说的是数据库数据庞大时候一些处理的技术,不过对于一百万行以内数据表不建议学他那种超牛x的技术。

o(∩_∩)o 哈哈  开玩笑,学到一定程度,也许你就明白 大叔 在说啥了。

 

 

我想你要问的应该是我下面的回答,本地预加载技术,以及本地数据和服务器数据同步校验的方法:

现在很多手机客户端软件大都是选择预加载缓存的技术,

假设我的手机客户端每页只能显示100条,那么我在第一次请求的时候,分两次请求前200的数据,当前100请求完成的时候,就将数据展现出来,后台继续请求101~200的数据,放入缓存;

又如当前我切换到第4页,首先我应该检查一下本地缓存是否有第4页的数据(301~400),如果有,直接展现,如果没有,请求301~400数据,然后展现,同时后台检查是否有第5页数据,如果没有,后台加载到缓存。

 

当然为了数据同步可以为每一个分组数据定义一个guid   当网络数据层的guid发生变更时,本地使用任何页的数据都要拿本地当前页的guid到服务器去校验下。

牧师/preacher | 园豆:500 (菜鸟二级) | 2014-10-29 14:31
0

如果你的基础表不时时变化的话,直接将那几w数据读到datatable里,然后用autocomplete属性。对性能没啥影响。

+小马哥++ | 园豆:906 (小虾三级) | 2014-10-30 13:42

偶尔会有变化,所以变化的时候就需要更新缓存了,这么多的数据,更新缓存有没有好的建议?

支持(0) 反对(0) 小徐的博客 | 园豆:15 (初学一级) | 2014-10-30 14:21
0

不能这样的.至多查20条.

forhells | 园豆:724 (小虾三级) | 2014-10-31 01:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册