Java嵌入式DB,不需要JDBC

时间:2010-09-13 20:59:52

标签: java database embedded-database

我有以下要求:

  1. 在磁盘上保留用户列表以供将来加载。每个用户可能有3或4个属性。典型的是数十到数百个用户,必须支持数千个用户(不需要支持10,000个以上)。
  2. 在磁盘上保留记录列表以供将来加载。每条记录可能有十几个属性。通常会有0到10个记录,但必须支持低千位记录的数量(以处理由于例如网络关闭而未在一段时间内处理记录的情况)。
  3. 用户通常被编写为批处理,然后定期搜索以查找具有给定属性的用户(例如,通过提供的密码对用户进行身份验证)。

    记录间歇性地写入并间歇性地读取(后者通过定期任务处理并在删除记录之前传输它们)。

    我面临以下限制:

    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 MB RAM,具体取决于设备),如果可行的话,最好将它们存储在磁盘而不是内存中。
    3. 我们对设备的访问权限有限,我们的应用程序被放置在自己的沙箱中,使得完整的数据库安装变得不可行。我们的沙盒中有磁盘访问权限。
    4. 只有一个应用程序需要访问此信息并且可以同步访问,这意味着线程安全/并发访问不一定是必需的。
    5. 我们有一个类似于我正在开发的应用程序但是对于使用专有文本格式的用户名(例如散列分隔)和ObjectOutputStream用于记录的不同设备。

      我看到当前实施的缺点:

      • 整个文件作为一个整体进行读取或写入,这意味着必须经常读取文件或者必须保留数据的内存中副本,并且只有在更改时才将其写回磁盘。当使用后一种选择作为当前应用程序时,它意味着内存使用量可以根据数据的大小无限增长。
      • 目前的两种格式都是专有的,前者容易出现不良数据(当用户名中有哈希值时会发生什么?)而后者不是人类可读的(或可通过常用工具查询)。

      这似乎是一种简单的基于文件的嵌入式数据库是理想的情况,例如derbysqlite。然而,从我的研究到目前为止,似乎大多数选项都涉及JDBC驱动程序,我没有这些驱动程序(java.sql。*未在此设备上实现)。

      有人知道现有项目是否合适?

3 个答案:

答案 0 :(得分:3)

您可以查看JDBM,它是纯java中非常简单的键值存储。如果需要查找其他属性,则可能必须为反向索引创建一些附加表。

它相对较旧,所以很有可能它会支持pre-java2平台。

答案 1 :(得分:1)

答案 2 :(得分:1)

你试过db4o吗?它是一个嵌入式对象数据库。它在java 1.1上运行,不需要jdbc。