Трудно сказать, какое решение лучше всего подходит для вас из того, что я могу прочитать до сих пор. Я бы попытался разделить проблему дальше и попытаться заняться различными аспектами отдельно.
Насколько я понимаю, цель состоит в том, чтобы объединить воедино совпадающие записи, которые представляют одну и ту же вещь в разных источниках:
- записи поступают из ряда источников:
- это логически те же данные, но отформатированные по-разному;
- Существуют правила, позволяющие определить, представляют ли записи одну и ту же сущность:
- коллекция правил статична;
Итак, логика, вероятно, выглядит примерно так:
- прочитать запись;
- попытаться найти существующие подходящие записи;
- если найдена соответствующая запись:
- обновить его новыми данными;
- в противном случае сохранить запись для последующего сопоставления;
- повторить;
Для меня это выглядит очень высоким уровнем, и, вероятно, не существует единственного «правильного» решения на этом уровне детализации.
Я бы, вероятно, попытался бы подойти к этому, сначала поняв это более подробно (возможно, вы уже делаете), несколько мыслей:
- каковы свойства данных?
- есть шаблоны? Например. когда одна система публикует что-то, ожидаете ли вы чего-то другого от других систем?
- каковы требования в целом?
- задержка, согласованность, доступность и т. Д .;
- как данные читаются из источников?
- могут ли все системы публиковать записи партиями в файлах, отправлять их в PubSub, нужно ли вашему решению их опрашивать и т. Д.?
- Можно ли читать данные параллельно или это один поток?
- тогда главный вопрос о том, как вы можете эффективно сопоставить запись в целом, вероятно, будет выглядеть по-разному при разных предположениях и требованиях. Например, я бы подумал о:
- можете ли вы разместить все данные в памяти;
- Ваши правила динамичны. Они вообще меняются, что происходит, когда они делают;
- можете ли вы разбить данные на категории, которые можно хранить отдельно и эффективно сопоставлять, например, если вы знаете, что можете попытаться сопоставить некоторые вещи по полю id, другие - по хешу и т. д .;
- вам нужно сопоставить все исторические / существующие данные?
- можете ли вы использовать логику быстрого исключения, чтобы не выполнять дорогостоящие проверки?
- каков выход решения? Каковы требования к выходу?