2009-11-08 34 views
0

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

的要求是:

  1. .NET平台,IIS,MS SQL服务器或Lucene.Net(文件系统)
  2. 输入数据进行索引仅仅是关键字加上一些元数据信息 - 没有进一步的处理所需
  3. 数据由关键词分组并通过关键字的出现次数进行排序
  4. 没有历史数据保持(数据比某一时间固定量被丢弃或移动到其他一些数据存储旧的)

不知道太多关于主题,这是我想出迄今:

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

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

问候,

的Ondrej

+0

你能举出你认为可能类似的网站的例子吗? – 2009-11-08 05:09:07

+0

我想到的网站是http://search.twitter.com/。我试图实现的功能是“趋势主题”。 – 2009-11-08 13:58:50

回答

1

从您的系统的描述,一个最基本的数据库模式可能类似于如下:

关键字 - ID(主键) - 关键字(唯一的)

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

input_keyword - ID(主键) - input_id(外键) - keyword_id(外键) - count(integer;次数关键字ID为keyword_id出现在id为input_id输入) - 到期日期(时间戳;定期,已过期需要的所有条目被删除)

数据业务将是如下:

  1. 写入:无论何时执行输入操作,数据库引擎都必须处理写入所有三个表的写入操作。
  2. 阅读次数:每次执行搜索操作,数据库引擎将需要在所有三个表
  3. 删除处理读操作:每隔一段时间,你将需要删除的条目input_keyword,如果需要的话,关键词表。

在高度被贩运的系统上,您的数据库将会被频繁地击中。由于您真的只是使用数据库来方便跨这些表执行SELECT操作,并且由于数据的寿命非常短暂,所以最好使用内存数据结构来替换“关键字”和“ input_keyword“表来消除对磁盘的命中。这可能需要更复杂的应用程序代码,但在繁忙的系统上可能值得。

0

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

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

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

+0

我很欣赏你的意见,但我认为你稍微误解了我的问题。我不是问是否有任何商业意识,或者我可以怎样打败谷歌。根据上面的要求,我只是问,实施这种系统的最佳方式是什么。 – 2009-11-08 14:00:52