У меня есть механизм организации очередей в C на Unix. Он принимает транзакции XML. Некоторые транзакции содержат записи для хранения. Другие транзакции запрашивают эти транзакции. Транзакции хранятся в файле, который является домашней очередью. Сначала во-первых, очень просто. Область заголовка в начале файла, отслеживает следующую позицию для чтения и следующую позицию для записи. Мы используем блокировку файлов, но не семафоры, так как поиск выполняется из удаленных систем. И есть только одна программа, которая обращается к очередям. Он в С. Работал нормально годами.
Теперь мы должны расширить систему. Транзакции будут содержать дополнительный тег XML. Мы должны выборочно получать на основе значений этого тега. Мы идем от простой очереди к приоритетной очереди. В теге может быть много разных значений. Скажите AX, BX, CX, FL и TS. Транзакции добавляются в очередь в порядке поступления. Нам нужно иметь возможность получать их либо в порядке их получения, либо извлекать следующую транзакцию, где тегом является FL. Или тс. Или (CS или FL). Или не AX.
Как лучше всего это сделать?
Простое и быстрое - вот что нам нужно. На ум приходит несколько вариантов:
- Используйте что-то вроде Berkely DB, чтобы превратить очередь в своего рода базу данных.
- Нажмите на базу данных PostgreSQL, создайте таблицу, которую можно использовать в качестве приоритетной очереди.
- Найдите библиотеку C, которая будет делать то, что мы хотим.
- Создать собственную очередь приоритетов на диске.
У нас есть некоторые ограничения. Время идет, и это нужно сделать за несколько недель. С для быстрой вставки в систему. Может быть, Python, если мы сможем достаточно быстро танцевать, чтобы преобразовать всю другую бизнес-логику в программе, которая обращается к очереди. Предпочитаю не использовать PostgreSQL, так как у нас нет контроля над системой баз данных, а администратор баз данных имеет неприятные привычки в отношении того, что он считает «своим», и мы не можем гарантировать надежность безотказной работы, даже если это критическая система. Политика, да !! DBA также сказал, что использование таблицы PostgreSQL не является эффективным способом сделать это. Мы предпочитаем что-то локализованное, чтобы мы могли контролировать это. Должен быть молниеносным, чтобы обрабатывать много транзакций в минуту.
Я открыт для любых предложений, даже отдаленных. Чем больше предложений, тем лучше.