2013-10-12 4 views
-1

У меня есть система, написанная в java, которая до сих пор не требовала сохранения данных ранее. Теперь у нас есть новое требование, которое, как представляется, требует постоянных данных, но лишь небольшая сумма в редких случаях.лучший способ надежного сохранения * маленький * количество данных?

Я пытаюсь найти идеальный метод для сохранения этих данных с удачным (не до 100%, если это 99,9%) эффективным методом, чтобы мы не потеряли данные.

Очевидная идея - это БД, но для столь небольших данных добавление зависимости в БД кажется чрезмерным. Следующей идеей является запись в файл, но как обрабатывать недостающие разрешения для записи в файл или поврежденный файл или проблемы с datarace/staleness? Является ли простой/очевидный подход к сохранению файла достаточным или может вызвать проблемы в реальном мире?

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

+0

Ваш вопрос очень мнение, основанное и вы уезжаете много места для спекуляций на ваш вопрос: Насколько важны данные? Есть ли риск, что не будет достаточно разрешений? Как бы вы хотели справиться с проблемами с повреждением данных? (Мы действительно не можем решить для вас, это не наш проект). –

+0

На стороне примечания, как вы просите «классы, которые помогут с этим», я могу очень порекомендовать библиотеку Джексона. Это даст вам любую POJO, которую вы хотели бы добавить в строку JSON. Тогда вам решать, где хранить эту строку. Конечно, если вы боитесь ручной обработки данных, вы можете рассмотреть возможность шифрования данных JSON с помощью AES-128. –

ответ

1

Если вы хотите сохранить/перенести объекты, взгляните на класс ObjectOutputStream. Itd - хороший и быстрый способ сериализации/сохранения данных из объекта.

Но обратите внимание: каждый объект u хочет «сохранить», необходимо реализовать интерфейс «Serializeable», который будет использоваться с ObjectOutputStream.

Вот хороший Tut: http://www.tutorialspoint.com/java/java_serialization.htm А вот документ из оракула: http://docs.oracle.com/javase/1.4.2/docs/api/java/io/ObjectOutputStream.html

0

Если это простая информация о значении ключа, файла свойств может быть достаточно.

Properties prop = new Properties(); 
prop.setProperty("key", "value"); 
//to save it: 
prop.store(new FileOutputStream("filename.properties"), null); 
//to load it: 
prop.load(new FileInputStream("filename.properties")); 

Это, безусловно, достаточно просто.

1

Если данные, которые необходимо сохранить, являются логическим флагом, то вы можете создать или удалить файл с известным именем в качестве булевого флага.

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

Если вы используете Java 7 в системе с символическими ссылками, вы можете создать символическую ссылку с данными, которые будут сохраняться как цель символической ссылки. Создание символической ссылки также является атомарной операцией, и создать несимметричную ссылку, которая указывает на несуществующий файл, не является ошибкой.

Если вы решили хранить данные сохраняемости обычным способом, как и содержимое файла, обычным способом выписывать файл выглядит следующим образом:

  1. Откройте новый файл для записи. Создайте файл в правильном каталоге, но используя временное имя, которое будет игнорироваться вашим приложением.
  2. Введите ваши данные в файл, а затем закройте его. Поймать любые ошибки в этой точке и не продолжать, если операции записи или закрытия не удались.
  3. Переименуйте файл, чтобы иметь правильное имя.

Этот процесс дает вам уверенность в том, что файл сохранности будет храниться только под его правильным именем, если его содержимое будет полным и правильным. Если вы замените старый файл персистентности на новый, оставьте его на месте до шага 3. Операция переименования будет атомарно (за одну операцию) заменить старый файл на новый.

Смежные вопросы