我正在用Java编写一个程序,该程序跟踪有关棒球卡的数据。我正在尝试决定如何持久存储数据。我一直倾向于将数据存储在XML文件中,但是我不熟悉XML API。 (我已经阅读了一些在线教程,并开始尝试使用javax.xml
层次结构中的类。)
该软件必须具有主要的用例:用户将能够添加卡并搜索卡。
当用户添加卡时,我想立即将数据提交到持久性存储中。标准API是否允许我以随机访问的方式插入数据(甚至可以追加数据)。
当用户搜索纸牌时(例如,按玩家的名字),我想从存储器中加载列表,而不必加载整个文件。
我最大的担心是,我需要存储大量唯一卡(大约数千张,可能更多)的数据。程序打开时,我不想在内存中存储所有卡的列表。我没有进行任何测试,但是我相信我可以轻松地达到内存限制。
XML可能不是最佳解决方案。但是,我想使其安装尽可能简单,所以我试图避免使用JDBC或任何第三方库的成熟数据库。
因此,我想我想问的是我是否朝着正确的方向前进,如果是,我可以在哪里找到更多以自己想要的方式使用XML的知识。如果没有,是否有人对我可以用来完成此任务的其他类型的存储提出建议?
最佳答案
虽然我当然不会阻止XML的使用,但是在您的上下文中确实存在一些缺点。
“标准API是否允许我以随机访问的方式插入数据”
是的,在内存中。但是,您将必须将整个模型保存回文件。
“当用户搜索纸牌时(例如,按玩家的名字),我想从存储中加载列表,而不必加载整个文件”
除非您期望多个用户正在读取/写入文件,否则我可能会在加载时将整个文件/模型拉到内存中,并保持在该位置,直到您要保存为止(进行定期写入背景仍然是一个好主意)
程序打开时,我不想在内存中存储所有卡的列表。我没有进行任何测试,但我相信我可以轻松应对内存限制
这将是我的关注。但是,您可以使用SAX解析器将文件读入自定义模型。这将减少内存开销(因为DOM解析器对内存可能有点贪婪)
“但是,我想使其安装尽可能简单,所以我试图避免使用JDBC建立完整的数据库”
我会在这方面做更多研究。我(个人)经常使用H2和HSQLDB来存储大量数据。这些是小型的个人数据库系统,不需要任何其他安装(链接到程序的Jar文件)或特殊的服务器/服务。
它们使在整个数据存储区中进行复杂的搜索变得非常容易,否则您将需要创建自己的搜索。
如果要使用XML,我可能会做三件事之一
1-如果您要在内存中维护XML文档,我会熟悉XPath
(simple tutorial和Java's API)进行搜索。
2-我将使用对象创建数据的“模型”以表示各个节点,并使用SAX读取数据。写作可能会有些棘手。
3-使用简单的SQL DB(和对象模型)-它只会简化整个过程(IMHO)
额外
好像我还没有对你倾倒;)
如果您真的想使用XML(同样,我不会阻止您),您可以考虑看看XML数据库样式的解决方案
Apache Xindice(显然已退休)
或者您可以看看其他人的想法
Use XML as database in Java
Java: XML into a Database, whats the simplest way?
例如 ;)
关于java - 在Java中插入并搜索大量数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11875054/