0

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

要求是:

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

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

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

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

问候,

翁德雷

4

2 回答 2

1

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

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

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

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

数据操作如下:

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

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

于 2009-11-08T04:39:59.130 回答
0

这个网站不是真正的头脑风暴,或者帮助你设计应用程序。

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

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

于 2009-11-08T04:20:54.943 回答