本人最近做了一个订餐网,客户让用地图标注来获取两地之间的距离,当餐厅和客户都标注了经度和纬度以后,页面加载的时候会用js算出两地之间的距离。但是这个距离的远近不等
    现在这样客户不喜欢,客户让改成可以根据距离的远近来排序的,这个问题我想了很久都没想出怎么弄,因为这个设计到的所有数据都不是固定的,都有可能在随时改变,包括顾客标注的经纬度,还有餐厅标注的经纬度,顾客数量,餐厅数量都是不等的,  
  
     现在还涉及到分页的问题,也就是说,必须一次读取出来数据库里所有的餐厅标注的经纬度,然后和我登陆的这个会员号的经纬度算出距离,然后在排序,显示出来。
  
    但是这样我遇到一个问题,这样的话如果会员每登录一次,都要去数据库里去一次所有的数据,如果餐厅数量过多的话,我怕数据库扛不住死掉。  我随后想到了内存表,就是每个会员登录以后,都去数据库拿出数据然后计算距离,最后存在内存里,要是这样的如果并发量高的话,立马就会把服务器整死,所以这条路也是死的。
     最后我没招了,我就想到给每个会员写一个txt文档,就是会员在登录以后会先去找个txt文档,这个txt文档就是当前排好序的餐厅, 如果没有这个txt则去数据库读数据,计算距离,然后写txt文档,当第二次进来以后,在先找txt文档, 找到以后先判断创建或修改时间是否大于1天(这个1天是我弄的一个小缓存),如果大于1天的话,则去数据库读取数据,否则直接读txt文档然后输出,但是这样的话会涉及到分页和后期数据量过大的话都会有问题。
   我的思路暂时就这么多了,在想不出什么好的解决办法让了。不知道各位大神有没有什么好的思路或者解决办法,可以让餐厅分页,还可以排序,最后别影响网站打开速度。
 
    办法不论是js  还是代码的 都希望大师给点思路。
所以我求助下大师这个怎么解决,或我上面说的办法有没有什么可以解决的。谢谢大家了
写的有点乱,希望大神帮忙解决下问题.... 
  
  

解决方案 »

  1.   

    首先个人觉得这个是业务上的问题。1.既然考虑到性能,干嘛要把所有数据都取出来.完全可以做成只取<1公里的数据.然后再排序.大于1公里的不考虑.然后再详细列表 在具体列出. 把数据分散开展示给用户. csdn 在这方面就很淫荡.淘宝卖家平台订单数据,也是如此!2.数据取出来后,cache 住.不要每次都跑数据库取。那样开销大,是必然的!3.分页可以优化,比如用临时表,适当建立索引.
      

  2.   


    呵呵,需求分析分出误区来了吧,客户就几千块的预算,你非要整个GIS+路径分析,需不需要考虑堵车问题?
    最简单的方法就是给用户加个输入项:距离/往返时间估计,由用户自己决定就结了吧。用户的大脑一闪念的计算能力比ES9000算一天的可能都强。
      

  3.   

    使用RTree之类的数据结果缓存所有的经纬度(如果不想自己写RTree,有开源库的)
    两点之间距离这些东西可以用.NET自带的SqlGeography计算