Mysql 用于前瞻性(非回顾性)搜索的数据库解决方案

Mysql 用于前瞻性(非回顾性)搜索的数据库解决方案,mysql,sql,database,search,nosql,Mysql,Sql,Database,Search,Nosql,假设我们需要创建一个系统,该系统使用大量实时文档数据流,并在这些文档可用时将这些文档与一组用户定义的搜索查询进行匹配。这是一项前瞻性的搜索服务,而不是回顾性的搜索服务。什么是合适的持久性解决方案 假设用户希望看到与他们的查询相匹配的文档的实时提要(比如Google Alerts),并且提要必须为每个文档显示特定的元数据。让我们假设比赛的寿命是无限的;i、 例如,系统将允许用户从创建特定查询时起查看查询的所有匹配项。因此,流中每个文档的元数据,以及文档与匹配该文档的用户查询之间的关联,都必须持久化

假设我们需要创建一个系统,该系统使用大量实时文档数据流,并在这些文档可用时将这些文档与一组用户定义的搜索查询进行匹配。这是一项前瞻性的搜索服务,而不是回顾性的搜索服务。什么是合适的持久性解决方案

假设用户希望看到与他们的查询相匹配的文档的实时提要(比如Google Alerts),并且提要必须为每个文档显示特定的元数据。让我们假设比赛的寿命是无限的;i、 例如,系统将允许用户从创建特定查询时起查看查询的所有匹配项。因此,流中每个文档的元数据,以及文档与匹配该文档的用户查询之间的关联,都必须持久化到数据库中

让我们加入另一个要求,即用户希望能够对某些元数据进行刻面:例如,用户希望只查看元数据字段“result type”等于“blog”的特定查询的匹配文档,并希望计算blog匹配的数量

以下是一些假设数字:

  • 每天数据流中有200000个新文档

    -每个文档的元数据都被持久化

  • 1000个用户,每个用户大约有5个搜索查询:总共约5000个用户搜索查询

    -这些查询是简单的布尔查询

    -当每个新文档进入时,将对所有5000个查询进行处理,以查看哪些查询是匹配的

  • 每个提要(每个用户查询对应一个提要)每分钟都会刷新一次。换句话说,对于每个提要,每分钟都会对数据库执行一次查询,查找最新的匹配页面

  • 向用户显示提要的速度至关重要。可扩展性和高可用性也是必不可少的

    用户和查询之间的关系是关系型的,查询和匹配文档之间的关系也是关系型的,但文档元数据本身只是键值对。因此,我最初的想法是将关系数据保存在关系数据库(如MySQL)中,将元数据保存在NoSQL数据库中,但是在NoSQL数据库中能否实现刻面需求?此外,构建提要需要调用两个单独的数据存储,这增加了复杂性。或者把所有东西都塞进MySQL,但这需要大量的连接和计数。如果我们将所有数据作为键值对存储在其他类型的数据存储中,那么我们将如何进行面处理?对于匹配多个搜索查询的文档,将有大量冗余元数据


    什么样的数据库适合此场景?我知道诸如和Yahoo之类的工具可以用来构建这样一个系统的总体架构,但考虑到数据存储、容量和查询/面处理的要求,我想把重点放在数据库上。

    首先,我不同意Ben的观点。每天有20万条新记录,而一天有86400秒,所以我们说的是每秒三条记录。这并非惊天动地,但对于新数据来说,这是一个值得尊敬的片段

    第二,我认为这是人们面临的一个现实问题。我不会说这个论坛不适合这个话题

    我认为这个问题的答案与所支持的用户查询的复杂性和类型有很大关系。例如,如果查询由一组二进制谓词组成,那么您可以从文档数据中提取特定的规则,然后很容易地应用这些规则。另一方面,如果查询包含对文档文本的复杂评分,那么您可能需要为每个用户查询提供一个反向索引和评分算法

    我使用这样一个系统的方法是将查询解析为可以从每个文档确定的单个数据元素(我可以称之为“查询签名”,因为结果将包含满足查询所需的所有字段)。每次加载文档时都会创建这个“查询签名”,然后可以使用它来满足查询

    添加新查询需要处理所有文档以分配新值。考虑到数据量,这可能需要更多的批处理任务


    SQL是否合适取决于需要从数据中提取的功能。这又取决于用户查询的性质。SQL可能已经足够了。另一方面,您可能需要更复杂的工具,尤其是在查询中使用文本挖掘概念的情况下。

    考虑到这一点,这听起来像是一项事件处理任务,而不是常规的数据处理操作,因此可能值得研究系统,而不是在常规数据库上构建所有内容,使用在传入数据流入系统时对其进行查询的系统。有一些商业系统可以达到速度和高可用性标准,但我还没有研究可用的OSS选项(幸运的是,人们已经这样做了)。

    看看弹性搜索。它有一个percolator功能,可以根据已注册的查询匹配文档。

    首先,我认为这与SO无关。“购物清单”的问题没有明确的答案,所以我投票决定结束。第二,虽然每天有20万张新唱片听起来好像很多,但事实并非如此。十年7.3亿美元,你只需要存储元数据。另外,20万人成为“新人”的可能性有多大。。。如果它们不是你所需要的全部,那就是有效的重复数据消除。我并没有说这个话题不适合这个问答网站,只是说问题是。你的回答包含9个条件陈述,这表明这个问题过于复杂