У меня есть торговая таблица с несколькими миллионами строк. Каждая строка представляет версию сделки. Если мне дают новую сделку, я сравниваю ее с последней версией в торговой таблице. Если это изменилось, я добавляю новую версию, иначе я ничего не делаю. Чтобы сравнить 2 сделки, я прочитал версию из таблицы торгов в свое приложение.
Это не работает, когда мне дают 10 тысяч новых сделок. Даже пакетные операции чтения позволяют одновременно прочитать 1000 сделок и сравнить их. Весь процесс может занять несколько минут. Все время проведено в БД.
Я пытаюсь найти способ сравнить, возможно, новые сделки с теми, что указаны в таблице сделок, без особого ввода-вывода. До сих пор я придумывал добавление столбца хеш-функции к каждой строке в торговой таблице. Хэш всех торговых полей. Затем, когда мне дают, возможно, новые сделки, я вычисляю их хэш, помещаю значения во временную таблицу, а затем нахожу те, которые отличаются. Это кажется очень хакерским. Есть ли лучший способ сделать это?
Спасибо
-
Немного больше информации
SQL Server 2008
Trade(rowid, tradeid, type, trader, volume, etc..)
- rowid
уникален, tradeid
будет продублирован для разностных версий одной и той же сделки
Таблица содержит около 30 столбцов и не нормализована, поэтому в зависимости от type
некоторые столбцы могут быть null
. Кто-то публикует тысячи сделок в Java-сервлете, который затем должен добавить новую строку для любой сделки, которая изменилась. К сожалению, для того, чтобы сделать это, сервлет Java должен прочитать каждую из тысяч сделок и сравнить их.
Самой новой версией конкретной сделки является просто версия с самым высоким значением rowid.