我是Java编程的新手,正在编写我的第一个桌面应用程序,这个应用程序需要一个独特的isbn并首先检查它是否已准备好在本地数据库中保存,如果它只是从本地读取DB,如果不是,它从isbndb.com请求数据并将其输入到DB中,本地数据库是XML格式的。现在我想知道以下两种方法中的哪一种在检查条目是否全部存在时会产生最小的开销。
方法1.)文件存在。
在创建所述数据库条目时,应用程序将为名为isbn number.xml的每个isbn数字(即3846504937540.xml)创建一个单独的文件,并且在检查时将使用文件存在方法来检查是否所有条目都已存在使用用户提供了isbn。
方法2.)SAX XML Parser。
所有条目都将输入到一个大型XML文件中,当检查现有条目时,SAX XML Parser将用于解析文件,然后将根据XML DB中的用户检查用户提供的isbn以进行匹配。
注意: 随着时间的推移,结果条目的数量可以达到数千个。
非常感谢任何信息。
答案 0 :(得分:1)
我不认为你的任何一种方法都那么棒。我强烈建议使用DBMS来存储数据。如果您在系统上没有DBMS,或者您想要一个可以在没有安装DBMS的系统上运行的应用程序,请查看使用SQLite。你可以使用Java和David Crawshaw的SQLiteJDBC来使用它。
就你的两种方法而言,第一种方法会产生大量的文件混乱,更不用说维护和一致性问题了。一旦你有相当数量的条目,第二种方法将会很慢,因为你基本上必须(平均)读取每个查询的一半数据库。使用DBMS,您可以通过定义快速查找所需信息的索引来避免这种情况。 DBMS将自动维护索引。
答案 1 :(得分:0)
我不太喜欢依赖文件系统执行该任务的想法:我不知道你的应用程序有多重要,但是这些xml文件可能会发生很多事情:)另外,如果文件夹得到了非常非常大,您需要考虑将这些文件拆分为某种层次结构文件夹结构,以获得不错的性能。
另一方面,如果您需要经常更新,我不明白为什么使用xml文件作为数据库。
我会使用关系数据库,并在每个条目的表中添加一条新记录,并在isbn_number列上添加索引。
如果你有成千上万的记录,你很可能会选择sqlite,你可以用更强大的非嵌入式数据库替换它,如果你需要它,没有(或很少:))代码修改。
答案 2 :(得分:0)
将db表扩展为不仅包括XML字符串,还包括ISBN号 然后根据ISBN列选择XML列。
查询:Java转义,"select XMLString from cacheTable where isbn='"+ isbn +"'"
另一种方法可能是使用 ORM ,例如 Hibernate 。
在ORM中,不是将整个XML文档保存在一个列中,而是为每个元素和属性使用不同的不同列,甚至可以将文档分割为几个表,以实现更简单的长期设计。
答案 3 :(得分:0)
我认为您最好使用DBMS而不是2种方法。
答案 4 :(得分:0)
如果你想要检查存在的开销最小,那么选项1可能就是你想要的,因为它是直接查找的。每次解析XML以进行检查都要求您在最坏的情况下通过整个XML文件。虽然您可以使用选项2进行缓存,但这比选项1更复杂。
使用选项1,您需要注意在目录下可以存储多少文件的限制,因此您可能必须按多层存储XML文件(例如/ xmldb / 38/46 / 3846504937540.xml)。
尽管如此,从长远来看,您的选择都不是存储数据的好方法,但随着数据的增长,您会发现它们变得非常严格且难以管理。
人们已经建议使用DBMS,我同意。最重要的是,我建议你将MongoDB等基于文档的数据库作为数据库。