JAVA: файл существует для поиска больших xml db - PullRequest
2 голосов
/ 20 января 2012

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

Метод 1.) Файл существует.

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

Метод 2.) SAX XML Parser.

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

Примечание: Результирующие записи со временем могут исчисляться тысячами.

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

Ответы [ 5 ]

1 голос
/ 20 января 2012

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

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

0 голосов
/ 20 января 2012

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

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

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

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

0 голосов
/ 20 января 2012

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

0 голосов
/ 20 января 2012

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

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

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

0 голосов
/ 20 января 2012

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

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

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

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

...