关于分布式查询方案的讨论
2007-03-27 22:25
405 查看
【关于分布式查询方案的讨论】
1、通过服务端缓存结果实现搜索
客户端C1向服务器发出【查询请求(key,GUID,IP,PORT)】,服务端S1把这个【请求(key,guid,ip,port)】插入到【查询请求队列(key,GUID,IP,PORT,inserttime)】里,然后“线程a”扫描【查询请求队列】,然后从【用户在线列表(IP,PORT)】里随机选出十个人把这个【请求(key,guid)】发送给他们.然后这些人查询自己本地的lucene索引,然后把前5个【查询结果(title,shortdesc,path,createdate,modifydate,guid)】发送给服务器,服务器里的“线程b”收到查询结果后,先放入【查询结果缓存(用hashtable来做,key是guid,value是一个inerttime和ilits组成的结构,list里的item和查询结果的结构一样)】,如果一个guid的结果数目已经有50个或者从now减去inerttime大于【结果超时时间(可配置)】,就从【查询请求队列】里通过这个guid找到当初请求人的IP和port,把这个结果发给查询请求者,同时通过guid删除【查询请求队列】和【查询结果缓存】里的相关数据。"线程c"扫描【查询请求队列】通过now和inerttime比较,删除超时的查询请求。
缺点:
随机选择的这10个人也许都没有这个key的结果
服务器缓存结果的压力很大
所有的客户端和服务端要保持一个TCP长连接,或者UDP模仿的可靠连接,比较浪费资源
补充:
服务端和客户端通讯可用socket也可以用remoting。
客户端发出查询后可能会等好长时间,所以要做成异步模式,等查询结果出拉之后以提示的方式报告给用户。
2、进行P2P搜索
客户端先从服务器的在线列表里随机获取10个在线人员的IP和端口,通过服务器辅助进行UDP打洞,然后给这10个客户端发起查询请求,返回的结果缓存在本地队列达到50条或者超时之后,显示出来。
缺点:有的路由设备的NAT类型不支持UDP穿透,所以有时候这个方法会不灵
补充:关于UDP打洞的原理网上有好多介绍
1、通过服务端缓存结果实现搜索
客户端C1向服务器发出【查询请求(key,GUID,IP,PORT)】,服务端S1把这个【请求(key,guid,ip,port)】插入到【查询请求队列(key,GUID,IP,PORT,inserttime)】里,然后“线程a”扫描【查询请求队列】,然后从【用户在线列表(IP,PORT)】里随机选出十个人把这个【请求(key,guid)】发送给他们.然后这些人查询自己本地的lucene索引,然后把前5个【查询结果(title,shortdesc,path,createdate,modifydate,guid)】发送给服务器,服务器里的“线程b”收到查询结果后,先放入【查询结果缓存(用hashtable来做,key是guid,value是一个inerttime和ilits组成的结构,list里的item和查询结果的结构一样)】,如果一个guid的结果数目已经有50个或者从now减去inerttime大于【结果超时时间(可配置)】,就从【查询请求队列】里通过这个guid找到当初请求人的IP和port,把这个结果发给查询请求者,同时通过guid删除【查询请求队列】和【查询结果缓存】里的相关数据。"线程c"扫描【查询请求队列】通过now和inerttime比较,删除超时的查询请求。
缺点:
随机选择的这10个人也许都没有这个key的结果
服务器缓存结果的压力很大
所有的客户端和服务端要保持一个TCP长连接,或者UDP模仿的可靠连接,比较浪费资源
补充:
服务端和客户端通讯可用socket也可以用remoting。
客户端发出查询后可能会等好长时间,所以要做成异步模式,等查询结果出拉之后以提示的方式报告给用户。
2、进行P2P搜索
客户端先从服务器的在线列表里随机获取10个在线人员的IP和端口,通过服务器辅助进行UDP打洞,然后给这10个客户端发起查询请求,返回的结果缓存在本地队列达到50条或者超时之后,显示出来。
缺点:有的路由设备的NAT类型不支持UDP穿透,所以有时候这个方法会不灵
补充:关于UDP打洞的原理网上有好多介绍
相关文章推荐
- 关于条件查询的参数condition的最佳方案
- 分布式环境下的数据一致性问题的方案讨论
- 关于动态实现自定义查询条件的方案
- 关于Kafka监控方案的讨论
- Rails与数据库查询到关于datetime的记录不一致引发的讨论
- 基于云上分布式NoSQL的海量气象数据存储和查询方案
- 公开分布式高性能查询的源代码和部署方案(三)
- 公开分布式高性能查询的源代码和部署方案.(二)
- 关于封装Dll为Web Service技术方案的讨论
- 关于使用hbase进行多维度条件实时查询的方案调研。
- 公开分布式高性能查询的源代码和部署方案.(二)
- 公开分布式高性能查询的源代码和部署方案(三)
- 分布式环境下的数据一致性问题的方案讨论
- 基于云上分布式NoSQL的海量气象数据存储和查询方案
- 关于MySql entity framework 6 执行like查询问题解决方案
- 关于利用SMTP和POP协议来实现分布式查询【暂放首页】
- 关于简单改进ibatis的默认分页机制提高查询效率方案
- 关于查询oracle in >1000 的讨论
- 公开分布式高性能查询的源代码和部署方案(一)
- 关于游戏服务器中缓存的设计方案的讨论