Проблема целостности данных Elasticsearch с MariaDB - PullRequest
0 голосов
/ 28 января 2020

Я настроил 2 идентичных сервера ELK для синхронизации c Таблица MariaDB (восстановлена ​​из дампа sql, так что это неактивная таблица, нет активной операции вставки) в моей тестовой среде.

Эта таблица MariaDB состоит из из 15 359 086 строк.

Однако я заметил несоответствие количества при синхронизации данных с Elasticsearch с использованием Logsta sh.

С 1-го сервера ELK я получил эту сумму с помощью API подсчета

{
    "count": 15936359,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    }
}

и со 2-го сервера ELK

{
    "count": 14934148,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    }
}

Что вызывает это несоответствие при синхронизации? Ни один из ELK не вернул правильное значение из источника, и оба стека дают различное количество, даже если установка идентична

Я использую этот API подсчета от Почтальона

GET http://localhost:9200/index/_count
{
    "query" : {
        "term" : { "type" : "column in DB" }
    }
}

1 Ответ

2 голосов
/ 29 января 2020

Слишком длинный для комментария:

Когда дело доходит до вычисления количества столбцов в таблице InnoDB, значения часто являются оценкой или снимком, но не точным количеством строк.

Например, если эти значения были получены из SHOW TABLE STATUS LIKE 'table_name', вы можете получить неверное количество строк.

Чтобы убедиться, что заполнение данных файлом дампа выполнено успешно, возможно, было бы использовать объяснение для каждой таблицы, которая была создана и заполнена путем выполнения файла дампа:

EXPLAIN SELECT COUNT(indexed_colum) FROM your_table.

Если вы предпочитаете SELECT COUNT(*) from your_table и таблица не использует индекс, рассмотрите возможность go выпейте кофе, прежде чем ждать результата.

Проверьте результат и сравните его, если он совпадает с номером на другом экземпляре сервера.

...