Реализуйте вилку POSIX в Java и сохраните копию данных - PullRequest
0 голосов
/ 03 августа 2020
• 1000 снимок периодически, аналогично Redis. Когда данные в памяти собираются сделать снимок, он разветвляет текущий процесс, поэтому текущий процесс может продолжать обслуживать клиентов, а дочерний процесс может делать снимок с копией данных в памяти.

Когда я пытаюсь портируйте эти коды на Java, я обнаружил, что эквивалента POSIX fork() не существует. Runtime.exec() или ProcessBuilder не предлагает копию данных текущего процесса, и копирование данных самостоятельно, очевидно, плохая идея, поскольку это не копирование при записи.

Традиционный способ для достижения параллелизма через поток. Однако для этого требуется синхронизация пар ключ-значение во время моментального снимка, поэтому меня немного беспокоит производительность. Но я не уверен, обоснована ли моя озабоченность по поводу производительности.

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

Есть ли хороший способ реализовать вышеуказанную функцию в Java: снимок одновременно и эффективно для данных в памяти? Любые советы будут оценены!

...