Мнение о хранении данных - PullRequest
1 голос
/ 04 марта 2011

У меня есть предстоящий проект, в котором его ядро ​​будет хранить отображение между двумя целыми числами. (1234 в столбце A соответствует 4567 в столбце B). Есть примерно 1000 отображений. Поиск сопоставлений будет выполняться каждый раз, когда пользователь нажимает на определенную ссылку на сайте.

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

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

Системная архитектура: tomcat + apache + mysql. Код будет работать в Tomcat.

EDIT: Отображения являются статическими, мне не нужно их менять. Похоже, что XML-файл в hashmap - это путь.

Ответы [ 3 ]

4 голосов
/ 04 марта 2011

Я бы использовал файл свойств или файл XML, загрузил бы его в память (как HashMap<Integer, Integer>) при запуске, а затем просто использовал бы из хэш-карты.

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

2 голосов
/ 04 марта 2011

Я согласен, что реляционная база данных кажется немного излишней. Вы можете посмотреть на базу данных NoSQL. MongoDB - мой личный фаворит, но их там много. Сделайте поиск по NoSQL databases.

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

0 голосов
/ 04 марта 2011

Вы можете попробовать использовать базу данных в памяти, такую ​​как H2 или HSQLDB .Объем памяти, вероятно, будет больше, чем с хэш-картой и файлом в памяти, но, с другой стороны, вы можете использовать SQL для запросов и обновлений, и вам не нужно беспокоиться о параллельном доступе.

...