Соландра, чтобы заменить нашу Lucene + RDBMS? - PullRequest
2 голосов
/ 16 августа 2011

В настоящее время мы используем комбинацию SQL Server и Lucene для индексации некоторых реляционных данных о доменных именах.У нас есть таблица доменов и около 10 других различных таблиц для историй различных показателей, которые мы рассчитываем и храним для доменов.Например:

Домен

  • Идентификатор BIGINT
  • Домен NVARCHAR
  • IsTracked BIT

SeoScore

  • Идентификатор BIGINT
  • DomainId BIGINT
  • Счет INT
  • Метка времени DATETIME

Мы пытаемся включить все домены из файлов основных зон в нашу базу данных, поэтому в конечном итоге мы просматриваем около 600 миллионов записей, что в SQL Server будет немного трудоемким для масштабирования.Учитывая нашу уверенность в том, что Lucene будет выполнять довольно сложные запросы, Solandra, похоже, вполне подойдет.Мне трудно не думать о наших данных в терминах реляционных баз данных.

Таблица SeoScore будет отображать один домен на несколько доменов (по одной записи на каждый раз, когда мы рассчитывали счет).Я думаю, что с точки зрения Solandra, лучший способ достичь этого - использовать два индекса, один для домена и один для SeoScore.

Вот сценарии запросов, которые нам нужно выполнить:

  1. «Текущий моментальный снимок» последних показателей для каждого домена (поэтому последний SeoScore для данного домена. Я предполагаю, что сначала мы найдем нужные записи домена, а затем запустим дополнительные запросы, чтобы получитьпоследний снимок каждой метрики в отдельности.

  2. Домены с SeoScores, которые не проверялись с момента x datetime, и имеющие IsTracked = 1, поэтому мы знали бы, какие из них необходимо пересчитать.здесь нужна какая-то система пакетирования, чтобы мы могли «проверять» домены и выполнять вычисления на них без дублирования усилий.

Я не в курсе? Будем ли мы правы в основном при картированиинаши таблицы для разделения индексов в Solandra в этом случае?

ОБНОВЛЕНИЕ

Вот некоторые JSON-записи того, что яnking:

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 Ответ

2 голосов
/ 17 августа 2011

Для SeoScores вы можете рассмотреть возможность использования виртуальных ядер:

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

Это позволяет разделить данные по доменам, чтобы вы могли иметь SeoScores.domain1 и сделать каждый документ представляющим одну временную метку.

Остальное звучит нормально.

...