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