Компромиссы между торговыми приложениями: базы данных и низкая задержка - PullRequest
1 голос
/ 02 сентября 2011

Базы данных требуются почти для каждого бизнес-приложения для хранения данных и транзакций, выполняемых с этими данными.Транзакции обычно занимают время порядка миллисекунд.В то же время в приложении для торговли единственное, что совсем не приемлемо, - это «задержка».Итак, каковы компромиссы, сделанные в таких приложениях, которые требуют верхнего предела задержки?

Например, сделка была размещена клиентом, она должна пройти несколько проверок, которые хранятся вбаза данных, требующая выборки из БД.Затем сделка должна быть передана OMS / ORS или бирже.И на каждом уровне потребуется хранить какие-либо данные о транзакциях в базе данных.Как сохранить баланс между сохранением транзакций и малой задержкой?

Ответы [ 2 ]

2 голосов
/ 02 сентября 2011

Две вещи:

  • Кэширование: кэшируйте правила в вашем приложении, чтобы вам не приходилось обращаться к базе данных для каждой сделки
  • Потоки: введите код, который хранитданные транзакции в базе данных в другой поток.Таким образом, вы можете немедленно направить сделку на биржу и сохранить данные в базе данных параллельно с этим.
0 голосов
/ 10 октября 2012

В наши дни люди используют систему транзакций в памяти, поэтому вы сокращаете сетевую задержку, которую вы получаете по базе данных.

Вот некоторые вещи, которые вы можете рассмотреть для низкой задержки

  • Чтобы достичь низкой задержки в Java, вы должны взять под контроль GC в Java, есть много способов сделать это длянапример, предварительно распределить объекты (т. е. использовать шаблон проектирования «на вес»), использовать примитивные объекты - trove очень хорош для этого, вся структура данных основана на примитиве, повторно использовать экземпляр объекта, например, для создания общесистемного словаря для сокращения создания новых объектов, очень хороший вариантпри чтении данных из потока / сокета / db

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

- Использование вычислений в памяти.Память дешева, вы можете иметь в памяти терабайт данных.

- Использовать механическое сочувствие - См. Lmax disruptor, отличные рамки

...