2010-09-13 65 views
3

我有以下要求:Java的嵌入式数据库,它不需要JDBC

  1. 在磁盘上保持用户的列表,以备将来装载。每个用户可能有3或4个属性。通常有几十到几百个用户,必须支持成千上万的用户(不需要支持10,000以上)。
  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 MB RAM取决于设备),如果可行,最好将它们存储在磁盘上而不是内存中。
  3. 我们对设备的访问权限有限,因为我们的应用程序被放置在其自己的沙箱中,从而使安装的数据库变得不可行。我们的沙箱中有磁盘访问。
  4. 只有一个应用程序需要访问这些信息,并且可以同步访问,这意味着线程安全/并发访问不一定是需求。

我们有一个类似于我正在开发,但对于其使用专有文本格式的用户名(例如哈希分隔)和记录一个ObjectOutputStream不同设备的应用。

我看到当前实现的缺点:

  • 整个文件进行读或写为一个整体,这意味着这两个文件必须被频繁读取或数据在内存中的副本必须保存并且只有当它改变时才写回磁盘。当与当前的应用程序一起使用后者时,它意味着内存使用量可以根据数据的大小无限增长。
  • 这两种当前格式都是专有的,前者容易出现不良数据(当用户名中含有散列时会发生什么?),而后者不是人类可读的(或可由常用工具查询)。

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

是否有人知道一个现有的项目,这将是一个很好的契合?

回答

2

你可能会看看JDBM这是一个非常简单的纯Java键值存储。如果您需要查找其他属性,则可能需要为反向索引创建一些附加表。

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

+0

这看起来很有前途 - 谢谢。我接受它,直到我找到一个它不会工作的原因或更好的事物。 – 2010-09-13 23:40:14

+0

不幸的是,每当我在设备环境中使用(get | set)NamedObject方法(例如,在运行FruitBasket示例时),我都会得到一个NullPointerException异常。它可以在我的机器上的JDK上正常运行。我在源代码中探索了一下,但没有任何明显的跳出来对我。我想我现在要放弃并保存所有内容。我选择离开这个答案,因为它是我发现的最接近我想要的东西。 – 2010-10-04 23:42:26

1

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

+0

谢谢。我想我会从JDBM开始,因为它是免费的(GPL不适合我们),但这看起来也合理。 – 2010-09-14 15:37:47