JAVA: файл существует против поиска большой xml db

Я новичок в программировании на Java и пишу свое первое настольное приложение, это приложение принимает уникальный isbn и сначала проверяет, все ли готово к хранению в локальной БД, если это так, то оно просто читает из локальной БД, если не он запрашивает данные с isbndb.com и вводит их в БД, локальная БД в формате XML. Теперь мне интересно, какой из следующих двух методов создаст наименьшие накладные расходы при проверке, существует ли готовая запись.

Способ 1.) Файл существует.

При создании указанной записи в БД приложение создаст отдельный файл для каждого номера isbn с именем isbn number.xml (т. е. 3846504937540.xml), а при проверке будет использовать метод существования файла, чтобы проверить, существует ли готовая запись с использованием предоставленного пользователем isbn. .

Метод 2.) Парсер SAX XML.

Все записи будут введены в один большой файл XML, и при проверке существующих записей синтаксический анализатор XML SAX будет использоваться для анализа файла, а затем предоставленный пользователем isbn будет проверяться на совпадение с данными в базе данных XML.

Примечание. Со временем число результирующих записей может исчисляться тысячами.

Любая информация будет глубоко цениться.


person Courtenay Rogers    schedule 20.01.2012    source источник
comment
Вы не можете использовать БД, и где пункт для проверки существования записи?   -  person designerrr    schedule 20.01.2012


Ответы (5)


Я не думаю, что любой из ваших методов так хорош. Я настоятельно рекомендую использовать СУБД для хранения данных. Если у вас нет СУБД в системе или вы хотите, чтобы приложение могло работать в системах без установленной СУБД, рассмотрите использование SQLite. Вы можете использовать его из Java с SQLiteJDBC Дэвида Кроушоу.

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

person Ted Hopp    schedule 20.01.2012
comment
Спасибо всем за ваши быстрые ответы, я изначально хотел обойтись без использования системы БД, но теперь я убежден в обратном и, вероятно, буду использовать встроенную БД, возможно, JavaDB (Derby). - person Courtenay Rogers; 20.01.2012
comment
@CourtenayRogers JavaDB/Derby — хороший продукт. SQLite опубликовал подробное сравнение между SQLite и Derby, которое может представлять интерес. - person Ted Hopp; 20.01.2012

Мне не очень нравится идея полагаться на файловую систему для этой задачи: я не знаю, насколько критично ваше приложение, но с этими xml-файлами может случиться многое :) плюс, если папка станет очень-очень большой , вам нужно будет подумать о разделении этих файлов на некоторую иерархическую структуру папок, чтобы иметь достойную производительность.

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

Я бы использовал реляционную базу данных и добавил новую запись в таблицу для каждой записи с индексом в столбце isbn_number.

Если вы находитесь в тысячах записей, вы вполне можете использовать sqlite, и вы можете заменить его более мощная невстроенная БД, если она вам когда-нибудь понадобится, без (или с небольшой :)) модификации кода.

person Savino Sguera    schedule 20.01.2012

Я думаю, вам лучше использовать СУБД вместо ваших двух методов.

person Ali Hashemi    schedule 20.01.2012

Если вам нужны наименьшие накладные расходы только для проверки существования, то вариант 1, вероятно, вам нужен, так как это прямой поиск. Анализ XML каждый раз для проверки требует, чтобы вы в худшем случае проходили через весь файл XML. Хотя вы можете выполнить кэширование с помощью варианта 2, но это сложнее, чем вариант 1.

Однако с вариантом 1 вам нужно помнить, что существует ограничение на количество файлов, которые вы можете хранить в каталоге, поэтому вам, вероятно, придется хранить файлы XML в несколько слоев (например, /xmldb/38/46/3846504937540.xml). ).

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

Люди уже рекомендовали использовать СУБД, и я согласен. Кроме того, я бы посоветовал вам изучить базу данных на основе документов, такую ​​​​как MongoDB, в качестве вашей базы данных.

person Alvin    schedule 20.01.2012

Расширьте таблицу базы данных, чтобы включить не только строку XML, но и номер ISBN.
Затем вы выбираете столбец XML на основе столбца ISBN.

Запрос: Java сбежал, "select XMLString from cacheTable where isbn='"+ isbn +"'"

Другой подход может заключаться в использовании ORM, например Hibernate.
В ORM вместо сохранения всего XML-документа в одном столбце вы используете разные столбцы для каждого элемента. и атрибут, и вы даже можете разделить свой документ на несколько таблиц для более простого долгосрочного дизайна.

person Farmor    schedule 20.01.2012