У меня есть следующие требования:
- Ведение списка пользователей на диске для последующей загрузки.У каждого пользователя может быть 3 или 4 свойства.Типично, от десятков до сотен пользователей, должны поддерживаться тысячи пользователей (поддержка более 10 000 пользователей не требуется).
- Сохранение списка записей на диске для последующей загрузки.Каждая запись имеет, вероятно, десяток или около того свойств.Обычно будет от 0 до 10 записей, но количество записей в младших тысячах должно поддерживаться (для обработки случая, когда записи не обрабатываются в течение определенного периода времени, например, из-за сбоя сети).
Пользователи обычно пишутся в виде пакета, а затем периодически ищут, чтобы найти пользователя с заданным свойством (например, для аутентификации пользователя с помощью предоставленного пароля).
Записи записываются с перерывами ичитать с перерывами (последнее выполняется с помощью периодической задачи, которая обрабатывает и передает их перед удалением записи).
У меня возникают следующие ограничения:
- Это встроенное устройство, которое поддерживает толькоподмножество Java 1.1.8 / 1.2.x.Включены следующие пакеты:
- java.lang
- java.io
- java.util
- java.net
- java.lang.reflect
- java.util.zip
- java.math
- java.text
- java.security
- Устройства имеют довольно скромные ресурсы (например, ~ 20 МБ ОЗУ в зависимости от устройства), поэтому желательно хранить их на диске, а не в памяти, если это возможно.
- У нас ограничен доступ к устройству снаше приложение помещается в собственную изолированную программную среду, что делает невозможной установку полноценной базы данных.У нас есть доступ к диску в нашей песочнице.
- Доступ к этой информации требуется только одному приложению, и доступ может быть синхронизирован, что означает, что потокобезопасный / параллельный доступ не обязательно является обязательным.
У нас есть приложение, похожее на то, которое я разрабатываю, но для другого устройства, которое использует собственный текстовый формат для имен пользователей (например, с разделителями хэшей) и ObjectOutputStream для записей.
Недостатки, которые я вижук текущей реализации:
- Весь файл считывается или записывается как единое целое, что означает, что либо файлы должны читаться часто, либо копия данных в памяти должна храниться и только записыватьсявернуться на диск, когда он изменится.При выборе последнего варианта, который используется текущим приложением, это означает, что использование памяти может неограниченно увеличиваться в зависимости от размера данных.
- Оба текущих формата являются проприетарными, первый подвержен ошибочным данным (что происходит, когдаимя пользователя содержит хэш?), а последнее не читается человеком (или не может запрашиваться общедоступным инструментом).
Это похоже на случай, когда простая встроенная база данных на основе файлов будет идеальной,например, дерби или sqlite .Однако из моих исследований до сих пор выясняется, что большинство вариантов включают драйверы JDBC, которых у меня нет (java.sql. * Не реализовано на этом устройстве).
Кто-нибудь знает о существующем проекте?что подойдет?