Я храню данные для ранжирования пользователей в документах XML - по одной строке на пользователя - в качестве атрибутов используются ключ из 36 символов, оценка, ранг и имя пользователя.
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE Ranks [<!ELEMENT Rank ANY ><!ATTLIST Rank id ID #IMPLIED>]>
<Ranks>
..<Rank id="<userKey>" score="36.0" name="John Doe" rank=15></Rank>..
</Ranks>
Существует несколько таких документов, которые анализируются по запросу с использованием синтаксического анализатора DOM и хранятся в памяти до обновления файла. Это происходит изнутри HttpServlet, который поддерживает виджет. Каждый раз, когда виджет загружается, он вызывает сервлет с запросом get, который затем запрашивает один из документов. Запросы к документам требуют следующих операций:
- Посмотрите вверх - найти конкретный идентификатор
- Итерация по каждому элементу Rank и получение атрибута id
В моей тестовой среде количество пользователей
Мне не хватает идей для реализации, которая балансирует производительность и использование памяти. Хотя DOM хорош для операций поиска, он может подавиться из-за большого размера. Я не знаю много о StAX, но из того, что я прочитал, кажется, что это может решить проблему с памятью, но может действительно замедлить запросы, так как мне придется эффективно перебирать документ, чтобы найти интересующий элемент ( правильный?).
Вопросы:
- Можно ли использовать StAX для множественных операций поиска (например, getElementById) над большими документами достаточно быстро, чтобы обработать запрос HttpRequest?
- Какой максимальный размер файла может обрабатывать анализатор DOM?
- Можно ли оценить, сколько памяти на пользователя будет использовано для документа XML с вышеуказанной структурой?
Спасибо
Редактировать: мне не разрешено использовать базы данных.
Редактировать: Было бы лучше / аккуратнее использовать вместо этого пользовательский отформатированный файл и использовать регулярные выражения для поиска в файле требуемой записи?