Расширенные руководства по вводу / выводу файлов Java? Советы? Совет?

#java #database #file #frameworks #io

#java #База данных #файл #фреймворки #io

Вопрос:

Прямо сейчас я работаю над проектом, в котором будет использоваться ввод / вывод файлов Java, выходящий за рамки простой документации и руководств «записать эту строку в файл», которые я нахожу в сети. По сути, этот проект предоставит механизм базы данных, аналогичный популярным базам данных «NoSQL», которые в наши дни набирают много прессы. Однако я не могу найти тонну документации, предоставляющей подробную информацию о том, какие API использовать, как их использовать и т.д. Я также искал какие-либо общепринятые шаблоны проектирования для ввода / вывода файлов Java, но безуспешно.

Если бы мне пришлось перечислить пару требований, я бы сказал:

  • Поддержка псевдотранзакций (не является жестким требованием, поскольку это может быть реализовано выше в стеке API)
  • Возможность записи данных произвольной длины в структуру, которая может быть прочитана позже
  • Индексирование
  • Возможность эффективного удаления объекта из «базы данных»
  • Быстрый поиск
  • Возможен многопоточный доступ (несколько потоков чтения, скорее всего, одна запись)

Кто-нибудь может указать мне на какие-либо руководства, документацию, шаблоны проектирования и т.д., Которые могут быть полезны? Существуют ли какие-либо фреймворки с открытым исходным кодом, которые вращаются вокруг ввода / вывода файлов Java? Я знаю множество фреймворков, которые предоставляют оболочки вокруг NIO для целей сетевого ввода / вывода, но ничего, связанного с файлами.

Спасибо за любую помощь, которую вы можете предоставить!

Ответ №1:

Взгляните на транзакцию Apache Commons. Он поддерживает транзакционный доступ к файлам, выполняя работу во временных файлах и фиксируя работу, перемещая их в фактические файлы.

Вас также может заинтересовать проект XADisk, хотя я не просматривал его исходные тексты.

Что касается поиска, проекты Apache Solr и Lucene могли бы помочь.

Комментарии:

1. Спасибо! Я никогда не слышал о XADisk, но это выглядит интригующе. Я знал о транзакции Apache Commons, поэтому меня не слишком беспокоило, как будет реализована поддержка транзакций.

2. Похоже, что сначала нужно будет встроить поддержку транзакций. Поиск и другие возможности могут быть встроены поверх API или внутри API, в зависимости от того, хотите ли вы, чтобы такие операции также были транзакционными. Другими словами, если вам нужно избежать проблем с грязным чтением, неповторяемым чтением и фантомным чтением, вам придется убедиться, что поиск и другие операции, связанные с чтением, также должны выполняться в контексте транзакции. Понимание того, как работает JTA, имеет большое значение при разработке транзакционного API.