OrientDB Retry Patern Exception - PullRequest
       11

OrientDB Retry Patern Exception

0 голосов
/ 29 июня 2018

У меня есть база данных OrientDB с около 300 миллионами записей класса «А расширяет V». Каждая запись имеет свойство 'x' (LONG), для которого я построил индекс (NOTUNIQUE).

Я сейчас пытаюсь получить доступ к записям, где 'x> 0' из моего кода C #:

SELECT * FROM A WHERE x > 0

Поскольку это было слишком много для жестко заданного времени ожидания сокета .NET-бинарного соединителя (30 секунд), я попытался использовать разбиение на страницы для ограничения набора результатов, а также времени запроса:

SELECT * FROM A WHERE @rid > <skip> AND x > 0 LIMIT 10000

Я не мог придумать правильный способ получения для следующей итерации (мне понадобится @rid последней найденной записи, получая только @rids совпадений) и снова столкнулся с ошибкой тайм-аута ( первый запрос занял около 4 секунд, второй - 5 секунд, третий - 6 секунд, быстро увеличиваясь до 30 секунд, что приводит к превышению времени ожидания. Вероятно, это связано с тем, что мой код был случайно разработан для сканирования первой последовательности не попаданий, а затем не смог увеличить пропуск:

using (var db = new ODatabase("localhost", 2424, "testgraph", ODatabaseType.Graph, "root", "<some password>"))
{
    var skip = new ORID();
    var limit = 20000;
    var records = db.Command($"SELECT * FROM A WHERE @rid > {skip} AND x > 0 LIMIT {limit}").ToList();
    while (records.Count > 0)
    {
        // problem is here
        skip = new ORID(records.Last().ORID);
        foreach (var record in records)
        {
            // do awesome stuff
        }
        records = db.Command($"SELECT * FROM A WHERE @rid > {skip} AND x > 0 LIMIT {limit}").ToList();
    }
}

Есть ли способ извлечения записей с x> 0, позволяющий избежать этой проблемы с тайм-аутом, кроме увеличения энергопотребления процессора и ускорения его хранения?

Заранее спасибо!

...