#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.