2

我对 Java 编程很陌生,正在编写我的第一个桌面应用程序,这个应用程序需要一个独特的 isbn 并首先检查它是否已经准备好保存在本地数据库中,如果是,那么它只是从本地数据库中读取,如果不是它从 isbndb.com 请求数据并将其输入数据库,本地数据库是 XML 格式。现在我想知道的是,以下两种方法中的哪一种在检查条目是否已准备就绪时会产生最少的开销。

方法 1.) 文件存在。

在创建所述数据库条目时,应用程序将为每个名为 isbn number.xml(即 3846504937540.xml)的 isbn 编号创建一个单独的文件,并且在检查时将使用 file exists 方法检查是否存在使用用户提供的 isbn 的条目.

方法 2.) SAX XML 解析器。

所有条目都将输入到单个大型 XML 文件中,并且在检查现有条目时,将使用 SAX XML 解析器来解析文件,然后将根据 XML DB 中的条目检查用户提供的 isbn 是否匹配。

注意:随着时间的推移,生成的条目可能会达到数千个。

任何信息将不胜感激。

4

5 回答 5

1

我认为您的任何一种方法都不是那么好。我强烈建议使用 DBMS 来存储数据。如果您的系统上没有 DBMS,或者如果您想要一个可以在没有安装 DBMS 的系统上运行的应用程序,请查看使用SQLite。您可以使用David Crawshaw的 SQLiteJDBC 从 Java 中使用它。

就你的两种方法而言,第一种会产生大量的文件混乱,更不用说维护和一致性问题了。一旦您拥有大量条目,第二种方法会很慢,因为您基本上必须为每个查询读取(平均)一半的数据库。使用 DBMS,您可以通过为需要快速查找的信息定义索引来避免这种情况。DBMS 将自动维护索引。

于 2012-01-20T17:21:03.883 回答
0

我不太喜欢依赖文件系统来完成该任务的想法:我不知道您的应用程序有多重要,但是这些 xml 文件可能会发生很多事情:) 另外,如果文件夹变得非常非常大,您需要考虑将这些文件拆分为一些分层文件夹结构,以获得良好的性能。

另一方面,如果您需要经常更新,我不明白为什么要使用 xml 文件作为数据库。

我将使用关系数据库,并在表中为每个条目添加一条新记录,并在 isbn_number 列上添加一个索引。

如果您有数千条记录,那么您很可能会使用sqlite,如果您需要它,您可以用更强大的非嵌入式数据库替换它,无需(或很少:) )代码修改。

于 2012-01-20T17:21:24.540 回答
0

扩展您的 db 表,使其不仅包括 XML 字符串,还包括 ISBN 号。
然后根据 ISBN 列选择 XML 列。

查询:Java 转义,"select XMLString from cacheTable where isbn='"+ isbn +"'"

一种不同的方法可能是使用像Hibernate这样的ORM。 在 ORM 中,不是将整个 XML 文档保存在一个列中,而是为每个元素和属性使用不同的列,甚至可以将文档拆分到多个表中,以实现更简单的长期设计。

于 2012-01-20T17:23:05.957 回答
0

我认为您最好使用 DBMS 而不是您的 2 种方法。

于 2012-01-20T17:26:48.443 回答
0

如果您只希望检查存在的开销最少,那么选项 1 可能就是您想要的,因为它是直接查找。每次解析 XML 进行检查都需要您在最坏的情况下遍历整个 XML 文件。尽管您可以使用选项 2 进行缓存,但这比选项 1 更复杂。

但是,使用选项 1,您需要注意在一个目录下可以存储多少文件是有限制的,因此您可能必须按多层存储 XML 文件(例如 /xmldb/38/46/3846504937540.xml )。

也就是说,从长远来看,这两种选择都不是存储数据的好方法,随着数据的增长,您会发现它们变得非常受限制且难以管理。

人们已经推荐使用 DBMS,我同意。最重要的是,我建议您将 MongoDB 等基于文档的数据库作为您的数据库。

于 2012-01-20T17:27:48.877 回答