Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA:文件存在与搜索大型xml数据库_Java_Xml_Database Design_Xml Parsing_File Exists - Fatal编程技术网

JAVA:文件存在与搜索大型xml数据库

JAVA:文件存在与搜索大型xml数据库,java,xml,database-design,xml-parsing,file-exists,Java,Xml,Database Design,Xml Parsing,File Exists,我对Java编程非常陌生,正在编写我的第一个桌面应用程序,这个应用程序需要一个唯一的isbn,首先检查它是否在本地数据库中准备就绪,如果是,那么它只是从本地数据库读取数据,如果不是,它从isbndb.com请求数据并将其输入数据库。本地数据库是XML格式的。现在我想知道的是,在检查条目all ready是否存在时,以下两种方法中哪一种会产生最小的开销 方法1.)文件存在 在创建所述DB条目时,应用程序将为每个名为isbn number.xml(即3846504937540.xml)的isbn编号

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

方法1.)文件存在

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

方法2.)SAXXML解析器

所有条目都将输入到单个大型XML文件中,当检查现有条目时,SAX XML解析器将用于解析该文件,然后用户提供的isbn将与XML数据库中的isbn进行匹配检查

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


如果您能提供任何信息,我们将不胜感激。

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


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

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

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

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


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

扩展数据库表,不仅包括XML字符串,还包括ISBN号。
然后根据ISBN列选择XML列

查询:Java转义,
“从缓存表中选择XMLString,其中isbn=”“+isbn+””

另一种方法是使用ORMHibernate

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

我认为最好使用DBMS,而不是使用两种方法。

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

但是,对于选项1,您需要注意,目录下可以存储的文件数量是有限制的,因此您可能必须按多层存储XML文件(例如/xmldb/38/46/3846504937540.XML)

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


人们已经建议使用DBMS,我也同意。除此之外,我建议您将基于文档的数据库(如MongoDB)作为您的数据库。

您不能使用db和where子句来检查记录是否存在?感谢大家的快速回复,我最初不想使用db系统,但我现在确信不是这样,可能会使用嵌入式数据库JavaDB(Derby)。@cotternayrogers-JavaDB/Derby是一个不错的产品。SQLite发布了一个可能感兴趣的详细信息。