目前我们正在使用 SQL Server 和 Lucene 的组合来索引一些关于域名的关系数据。我们有一个域表,以及大约 10 个其他各种其他表,用于记录我们计算和存储的有关域的不同指标的历史记录。例如:
领域
- 标识 BIGINT
- 域 NVARCHAR
- IsTracked BIT
SeoScore
- 标识 BIGINT
- DomainId BIGINT
- 分数 INT
- 时间戳 DATETIME
我们正在尝试将主要区域文件中的所有域包含在我们的数据库中,因此我们最终会查看大约 6 亿条记录,这似乎在 SQL Server 中进行扩展有点麻烦。鉴于我们依赖 Lucene 来执行一些非常高级的查询,Solandra 似乎是一个不错的选择。我很难不考虑用关系数据库术语来考虑我们的数据。
SeoScore 表将映射一对多域(我们每次计算分数时都有一条记录)。我认为,在 Solandra 方面,实现这一目标的最佳方法是使用两个索引,一个用于 Domain,一个用于 SeoScore。
以下是我们需要实现的查询场景:
每个域的最新指标的“当前快照”(因此是给定域的最新 SeoScore。我假设我们会首先找到我们想要的域记录,然后运行进一步的查询以分别获取每个指标的最新快照.
自 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 {
...
}
}