【问题标题】:Solandra to replace our Lucene + RDBMS?Solandra 取代我们的 Lucene + RDBMS?
【发布时间】:2011-10-27 16:39:21
【问题描述】:

目前我们正在使用 SQL Server 和 Lucene 的组合来索引一些关于域名的关系数据。我们有一个域表,还有大约 10 个其他各种表,用于记录我们计算和存储的有关域的不同指标的历史记录。例如:

  • Id BIGINT
  • 域 NVARCHAR
  • IsTracked BIT

SeoScore

  • Id BIGINT
  • DomainId BIGINT
  • 分数 INT
  • 时间戳DATETIME

我们正在尝试将主要区域文件中的所有域包含在我们的数据库中,因此我们最终会查看大约 6 亿条记录,这似乎在 SQL Server 中进行扩展有点麻烦。鉴于我们依赖 Lucene 来执行一些非常高级的查询,Solandra 似乎是一个不错的选择。我很难不考虑用关系数据库术语来考虑我们的数据。

SeoScore 表将映射一对多域(我们每次计算分数时对应一条记录)。我认为,在 Solandra 术语中,实现这一目标的最佳方法是使用两个索引,一个用于 Domain,一个用于 SeoScore。

以下是我们需要实现的查询场景:

  1. 每个域的最新指标的“当前快照”(因此是给定域的最新 SeoScore。我假设我们会首先找到所需的域记录,然后运行进一步查询以获取每个指标的最新快照。

  2. 自 x 日期时间以来未检查 SeoScores 且 IsTracked=1 的域,因此我们将知道哪些需要重新计算。我们在这里需要某种批处理系统,这样我们就可以“检查”域并对其进行计算,而无需重复工作。

我在这里偏离轨道了吗?在这种情况下,我们基本上将表映射到 solandra 中的单独索引是否正确?

更新

这是我在想的一些 JSON 符号:

Domains : { //Index
    domain1.com : { //Document ID
        Middle : "domain1", //Field
        Extension : "com",
        Created : '2011-01-01 01:01:01.000',
        ContainsDashes : false,
        ContainsNumbers : false,
        IsIDNA : false,
    },
    domain2.com {
        ...
    }
}

SeoScores : { //Index
    domain1.com { //Document ID
        '2011-02-01 01:01:01.000' : { 
            SeoScore: 3 
        },
        '2011-01-01 01:01:01.000' : {
            SeoScore: -1
        }
    },
    domain2.com {
        ...
    }
}

【问题讨论】:

  • 只使用弹性搜索。

标签: lucene solr nosql cassandra solandra


【解决方案1】:

对于 SeoScores,您可能需要考虑使用虚拟核心:

https://github.com/tjake/Solandra/wiki/ManagingCores

这使您可以按域对数据进行分区,这样您就可以拥有 SeoScores.domain1 并使每个文档代表一个时间戳。

其余的听起来不错。

【讨论】:

  • 是否可以在 solandra 中跨索引进行搜索?我希望能够对域索引以及域的“最新”seoscore 执行查询。我猜我可能需要非规范化并将最新的 seoscore 与域文档一起存储?
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 2011-09-15
  • 1970-01-01
  • 2018-10-27
相关资源
最近更新 更多