Существует почти слишком много способов упомянуть.Я бы выбрал вариант, который вы считаете самым простым.
Вы можете использовать;
- файл для записи того, что сделано (и что должно быть сделано)
- постоянная очередь в JMS (которая поддерживает несколько процессов, даже на разных компьютерах)
- встроенная или удаленная база данных.
Подход, который я восторгаюсь, заключается в использовании файлов, отображаемых в память.Приятной особенностью является то, что информация не теряется, если приложение умирает или уничтожается (при условии, что ОС не падает), что означает, что вам не нужно сбрасывать его или беспокоиться о потере данных, если этого не происходит.
Это работает, потому что данные частично управляются ОС, что означает, что она использует небольшую кучу (даже для ТБ данных), а ОС занимается загрузкой и сбросом на диск, делая их намного быстрее (и делая размеры намного больше, чем ваши основныепамять практическая).
Кстати: этот подход работает даже с kill -9
, поскольку ОС сбрасывает данные на диск.Чтобы проверить это, я использую Unsafe.getByte(0)
, который вызывает сбой приложения с ошибкой SEG сразу после внесения изменений (как в следующей инструкции машинного кода), и все еще записывает изменения на диск.
Это не будет работатьесли ты тянешь власть, но ты должен быть очень быстрым.Вы можете использовать файлы, отображенные в памяти, для принудительного переноса данных на диск, прежде чем продолжить, но я не знаю, как вы можете проверить, действительно ли это работает.;)
У меня есть библиотека, которая может упростить использование файлов с отображением в памяти
https://github.com/peter-lawrey/Java-Chronicle
Это не долго для чтения, и вы можете использовать его какпример.