Итак, ваша настоящая проблема в том, как быстро сопоставить транзакции с потенциальными правилами.Вы можете сделать это с помощью инвертированного индекса, который сообщает, какие правила соответствуют определенным значениям атрибутов.Например, предположим, у вас есть эти три правила:
Rule 1: if Country = "USA" and State = "FL"
S1 gets 100%
Rule 2: if Country = "USA" and (State = "CO" or ZIP = 78640)
S2 gets 60%
S3 gets 40%
Rule 3: if Country = "UK"
S3 gets 70%
S2 gets 30%
Теперь вы обрабатываете свои правила и создаете выходные данные следующим образом:
Country,USA,Rule1
State,FL,Rule1
Country,USA,Rule2
State,CO,Rule2
ZIP,78640,Rule2
Country,UK,Rule3
Затем вы обрабатываете эти выходные данные (или можетесделайте это, пока вы обрабатываете правила) и создайте три таблицы.Одна отображает значения страны в правила, одна отображает значения состояния в правила, а другая отображает значения ZIP в правила.В итоге вы получите что-то вроде:
Countries:
USA, {Rule1, Rule2}
UK, {Rule3}
States:
FL, {Rule1}
CO, {Rule2}
"*", {Rule3}
ZIP:
78640, {Rule2}
"*", {Rule1, Rule3}
Значение "*" - это "все равно", которое будет соответствовать всем правилам, в которых не указано это поле.То, требуется ли это, зависит от того, как вы структурировали свои правила.
Приведенные выше индексы создаются при каждом изменении ваших правил.С 4000 правилами это не должно занимать какое-то время вообще, а размер списка не должен быть очень большим.
Теперь, учитывая транзакцию со значением Country "USA", вы можете посмотреть втаблица Стран, чтобы найти все правила, которые упоминают эту страну.Назовите этот список Country_Rules
.Сделайте то же самое для штатов и почтовых индексов.
Затем вы можете сделать пересечение списка.То есть создайте еще один список с именем Country_And_State_Rules
, который содержит только те правила, которые существуют в списках Country_Rules
и State_Rules
.Обычно это будет небольшой набор возможных правил.Затем вы можете просмотреть их один за другим, тестируя страну, штат и почтовый индекс, как требуется.
То, что вы создаете, - это, по сути, поисковая система для правил.Это должно позволить вам очень быстро сузить кандидатов от 4000 до нескольких человек.
Есть несколько проблем, которые вам придется решить.Наличие условной логики («ИЛИ») немного усложняет ситуацию, но это неразрешимо.Кроме того, вы должны определить, как справиться с неоднозначностью (что, если два правила совпадают?).Или, если никакие правила не соответствуют конкретной стране и штату, необходимо выполнить резервное копирование и проверить правила, которые соответствуют только стране ... или соответствуют только штату.Вот тут и появляется «все равно».
Если ваши правила достаточно однозначны, то в подавляющем большинстве случаев вы сможете выбрать соответствующее правило очень быстро.В некоторых случаях вам придется искать множество различных правил для некоторых транзакций.Но эти случаи должны быть довольно редкими.Если они частые, то вам нужно пересмотреть свой набор правил.
Как только вы узнаете, какое правило применяется к конкретной транзакции, вы можете легко узнать, какой продавец получает, сколькохранится с правилами.