2

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

领域

  • 标识 BIGINT
  • 域 NVARCHAR
  • IsTracked BIT

SeoScore

  • 标识 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 {
        ...
    }
}
4

1 回答 1

2

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

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

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

其余的听起来不错。

于 2011-08-17T01:09:42.323 回答