【问题标题】:Realtime Web Search (in .Net)实时网页搜索(在 .Net 中)
【发布时间】:2010-12-14 07:11:02
【问题描述】:

你们将如何在 .Net 平台上创建“实时”搜索引擎。近乎实时的网络搜索现在非常流行,我希望你们能帮助我集思广益。我最终可能会尝试制作一些原型,但大多数情况下它只是一种“心理训练”。

要求是:

  1. .NET 平台、IIS、MS SQL 服务器或 Lucene.Net(文件系统)
  2. 要索引的输入数据只是关键字加上一些元信息 - 无需进一步处理
  3. 数据按关键字分组并按关键字出现次数排序
  4. 不保留任何历史数据(超过某个固定时间的数据将被丢弃或移至其他数据存储区)

对这个主题了解不多,这是我迄今为止想出的:

数据通过网络服务提供给系统。由于数据已经是关键字的形式,因此不进行进一步的处理。 WS 将数据保存到 db。选择查询以固定的时间间隔执行以返回数据(例如:我们查询过去一小时的传入数据并每秒执行一次查询)。分组和排序在内存中执行以卸载 sql server。 db 中的旧数据每隔几分钟就会被丢弃一次。 我不确定如果不断添加许多新行,sql server 将如何处理。 然后显示分组和排序的数据。

我相信你们对这种事情有更多的经验和更好的想法。

问候,

翁德瑞

【问题讨论】:

  • 您能举出一些您认为可能相似的网站示例吗?
  • 我想到的网站是search.twitter.com。我想要实现的功能是那里的“热门话题”。

标签: .net sql-server search lucene.net real-time


【解决方案1】:

根据您对系统的描述,基本数据库架构可能如下所示:

关键字 - id(主键) - 关键字(唯一)

输入 - id(主键) - 数据(文本)

输入关键字 - id(主键) - input_id(外键) -keyword_id(外键) - count(整数;id为keyword_id的关键字出现在id为input_id的输入中的次数) - expiration_date(时间戳;每隔一段时间,所有已过期的条目都需要删除)

数据操作如下:

  1. 写入:无论何时执行输入操作,您的数据库引擎都必须处理写入所有三个表的写入操作。
  2. 读取:无论何时执行搜索操作,您的数据库引擎都需要处理所有三个表的读取操作
  3. 删除:您需要定期删除 input_keyword 中的条目,如果需要,还需要删除关键字表。

在高流量系统上,您的数据库会经常受到攻击。由于您实际上只是为了方便在这些表中执行 SELECT 操作而使用数据库,并且由于数据非常短暂,因此您最好使用内存数据结构来替换“关键字”和“ input_keyword”表来消除对磁盘的命中。这可能需要更复杂的应用程序代码,但在繁忙的系统上可能值得。

【讨论】:

    【解决方案2】:

    本网站并非真正用于集思广益或帮助您设计应用程序。

    您可能想在http://answers.onstartups.com/ 上发布此内容,看看对此想法有什么要求和建议,看看实时网络搜索是否有任何商业意义。

    但是,您需要确定如何才能比 Google 更快。

    【讨论】:

    • 感谢您的意见,但我认为您稍微误解了我的问题。我不是在问它是否有任何商业意义,或者我如何才能击败谷歌。鉴于上述要求,我只是想问一下,实施此类系统的最佳方式是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2011-01-06
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多