【关于分布式查询方案的讨论】

onlytiancai 2007-03-27 10:16:58
【关于分布式查询方案的讨论】
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打洞的原理网上有好多介绍
...全文
233 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eri 2007-08-02
  • 打赏
  • 举报
回复
太深奥了……
zgmiao 2007-08-02
  • 打赏
  • 举报
回复
呵呵,兄弟你在做搜索的项目吧
帮顶一下
onlytiancai 2007-03-31
  • 打赏
  • 举报
回复
上去
onlytiancai 2007-03-28
  • 打赏
  • 举报
回复
这么夸张呀,呵呵,没人愿意发言

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧