Solandra取代我们的Lucene + RDBMS?

时间:2011-08-16 00:35:45

标签: lucene solr nosql cassandra solandra

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

  • Id BIGINT
  • Domain 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,因此我们知道哪些域需要重新计算。我们需要某种批处理系统,这样我们就可以“检查”域名并对其进行计算,而无需重复工作。

  3. 我离开这里了吗?在这种情况下,我们是否正确将我们的表映射到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 {
            ...
        }
    }
    

1 个答案:

答案 0 :(得分:2)

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

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

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

其余的听起来不错。