目前,我们正在使用SQL Server和Lucene的组合来索引有关域名的一些关系数据。我们有一个Domain表,还有大约10个其他各种其他表,用于我们计算和存储域的不同指标的历史记录。例如:
域
SeoScore
我们正在尝试将主要区域文件中的所有域都包含在我们的数据库中,因此我们最终会查看大约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 {
...
}
}
答案 0 :(得分:2)
对于SeoScores,您可能需要考虑使用虚拟核心:
https://github.com/tjake/Solandra/wiki/ManagingCores
这使您可以按域对数据进行分区,这样您就可以拥有SeoScores.domain1并使每个文档代表一个时间戳。
其余的听起来不错。