Повышение долговечности структур данных в памяти - PullRequest
9 голосов
/ 03 октября 2008

Какие популярные методы вы можете использовать, чтобы повысить долговечность своих структур данных в памяти (т. Е.), Если в процессе происходит сбой, вы можете сохранить все ранее выполненные операции с этой структурой данных? 1003 * Если моя структура данных включает в себя только список кортежей, то я просто храню их в базе данных SQL, и это дает мне долговечность бесплатно. Но что, если моей структурой данных был график или дерево?

Единственное, о чем я мог подумать, - это явно записать все операции на диск (журнал только для добавления) и в случае сбоя воспроизвести журнал, чтобы сохранить предыдущее состояние. Если журнал становится слишком большим, тогда будет этап уплотнения. Я предполагаю, что это то, что движок базы данных делает внутренне для долговечности (контрольная точка, как этот процесс называется)?

Кстати, обратите внимание, что это не тот сценарий, когда весь набор данных не помещается в памяти.

Ответы [ 6 ]

4 голосов
/ 03 октября 2008

Возможно, вы захотите попробовать механизм распространенности объектов . Для .NET вы можете попробовать Bamboo.Prevalence , который является портом аналогичного механизма, называемого Prevayler для Java.

1 голос
/ 26 октября 2011

Я внедрил технологию «Mrjb» в продуктах двух компаний, что в принципе и соответствует вашему вопросу: база данных «Memory Resident Journal Backed», структура данных в памяти, где каждое изменение записывается на диск, как это происходит. И это прекрасно работает для нас!

http://www.edval.biz/memory-resident-programming-object-databases

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

0 голосов
/ 03 октября 2008

Любой ответ на ваш вопрос повлечет за собой что-то вроде того, что делает система баз данных ACID. Поэтому я бы сказал, что вам лучше всего использовать СУБД для хранения состояния вашего приложения и обновлять его, когда у вас есть транзакция (приложения), которая не должна быть потеряна.

0 голосов
/ 03 октября 2008

Да, вы бы хотели сериализовать данные в некоторый формат - xml, двоичный, что угодно. В зависимости от языка программирования это может быть встроено для вас. Java имеет ObjectStreams , .NET имеет XmlSerializer , а также BinaryFormatter .

0 голосов
/ 03 октября 2008

Вы можете придумать какой-нибудь способ сериализации вашей структуры, будь то с XML, YAML, JSON и т. Д. Затем вы можете либо сохранить это в БД, либо, возможно, поместить одну большую попытку / ловушку вокруг основной точки выполнения в программа. Затем, если произойдет какое-либо необработанное исключение, которое вызовет сбой программы, вы можете сериализовать ваши данные, а также записать в журнал любые сообщения об ошибках, следы стека и т. Д.

0 голосов
/ 03 октября 2008

Слово, которое вы ищете, это "сериализация".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...