2010-09-13 4 views
3

У меня есть следующие требования:Java встроенный DB, который не требует JDBC

  1. Ведение списка пользователей на диске для будущей загрузки. У каждого пользователя может быть 3 или 4 свойства. Типично от десятков до сотен пользователей, тысячи пользователей должны поддерживаться (поддержка более чем 10000 не требуется).
  2. Ведение списка записей на диске для будущей загрузки. У каждой записи, вероятно, есть дюжина свойств. Как правило, от 0 до 10 записей, но количество записей в тысячах должно поддерживаться (для обработки случая, когда записи не обрабатываются в течение определенного периода времени из-за того, что сеть не работает).

Пользователи обычно записываются как партия, а затем периодически просматривают, чтобы найти один с заданным свойством (например, для аутентификации пользователя через предоставленный пароль).

Записи записываются с перерывами и читаются с перерывами (последнее - периодической задачей, которая обрабатывает и передает их перед удалением записи).

я лицо следующих ограничений:

  1. Это встроенное устройство, которое поддерживает только подмножество 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
  2. Устройства имеют довольно скромные ресурсы (например, ~ 20 МБ ОЗУ в зависимости от устройства), что делает желательным хранить их на диске, а не в памяти, если это возможно.
  3. У нас ограниченный доступ к устройству, при этом наше приложение помещается в его собственную песочницу, что делает полномасштабную установку базы данных неосуществимой. У нас есть доступ к диску в нашей песочнице.
  4. Только одно приложение нуждается в доступе к этой информации, и доступ может быть синхронизирован, что означает необходимость обеспечения безопасности потоков/одновременного доступа.

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

Недостатков я вижу в текущую реализацию:

  • Весь файл для чтения или записи в целом, а это означает, что либо файлы должны быть прочитаны часто или копию в памяти данных должны сохраняться и записываться только на диск при его изменении. При выборе последнего выбора в качестве текущего приложения это означает, что использование памяти может расти неограниченно на основе размера данных.
  • Оба текущих формата являются собственностью, прежние подвержены плохим данным (что происходит, когда имя пользователя имеет хэш в нем?), И последние не читаются человеком (или доступны для обычного инструмента).

Это похоже на случай, когда простая встроенная база данных на основе файлов будет идеальной, например. derby или sqlite. Однако из моих исследований до сих пор большинство вариантов включают драйверы JDBC, которых у меня нет (java.sql. * Не реализовано на этом устройстве).

Знает ли кто-нибудь о существующем проекте, который бы хорошо подходил?

ответ

2

Возможно, вы посмотрите на JDBM, который является довольно простым хранилищем ключей в чистом java. Если вам нужно искать другие атрибуты, вам может потребоваться создать дополнительные таблицы для обратных индексов.

Относительно старый, поэтому, возможно, он будет поддерживать платформу pre-java2.

+0

Это выглядит очень многообещающе - спасибо. Я принимаю это, пока не найду причину, по которой это не сработает, или что-то лучше. –

+0

К сожалению, я получаю исключение NullPointerException всякий раз, когда я использую методы (get | set) NamedObject в среде устройства (например, при запуске примера FruitBasket). Он работает отлично на JDK на моей машине. Я немного искал в исходном коде, но ничего очевидного не выскочил на меня. Я думаю, что сейчас собираюсь сдаться и сохранить все в памяти. Я оставляю этот ответ выбранным, поскольку это самое близкое к тому, что я хотел, что я нашел. –

1

Вы пробовали db4o? Это встроенная база данных объектов. Он работает на java 1.1 и не требует jdbc.

+0

Спасибо. Я думаю, что я собираюсь начать с JDBM, так как это бесплатно (GPL для нас не вариант), но это выглядит разумно. –

Смежные вопросы