Как реализовать постоянную таблицу поиска - PullRequest
1 голос
/ 27 декабря 2010

Мое Java-приложение использует справочную таблицу только для чтения, которая хранится в файле XML. Когда приложение запускается, оно просто читает файл в HashMap. Пока все хорошо, но поскольку таблица растет, мне не нравится загружать в память таблицу всю сразу Хранилища ключей RDBMS и NoSQL кажутся мне излишними. Что бы вы предложили?

1 Ответ

1 голос
/ 27 декабря 2010

Желает, чтобы Java позволяла выделять бесконечное количество кучи в виде файла отображения памяти: -)

Если вы используете Java 5, то используйте Java DB; это ядро ​​базы данных, написанное на Java, основанное на Apache Derby . Если вы знаете SQL, то настройка встроенной базы данных займет всего пару минут. Поскольку вы можете создавать базу данных снова при каждом запуске приложения, вам не нужно беспокоиться о разрешениях, миграции схемы БД, устаревших кешах и т. Д.

Или вы можете использовать базу данных ОО, например, db4o , но многим людям сложно осуществить мысленный переход на использование запросов для перебора внутренних структур данных. Чтобы взять ваш пример: у вас есть огромный HashMap. Вместо использования map.get() вы должны создать запрос с использованием DB4o, а затем выполнить этот запрос на карте, чтобы найти элементы; в противном случае DB4o будет вынужден загрузить всю карту сразу.

Другой альтернативой является создание собственной минимальной системы: считайте данные из файла XML и сохраните их как большой файл с произвольным доступом, а также индекс + кэширование, чтобы вы могли быстро искать элементы. Если все ваши объекты сериализуемы, то вы можете использовать ObjectInputStream для чтения отдельных записей после поиска в нужном месте, используя RandomAccessFile.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...