我正在用Java编写一个跟踪棒球卡数据的程序。我试图决定如何持久存储数据。我一直倾向于将数据存储在XML文件中,但我不熟悉XML API。 (我已经阅读了一些在线教程,并开始尝试javax.xml
层次结构中的类。)
软件必须包含主要用例:用户可以添加卡片并搜索卡片。
当用户添加卡时,我想立即将数据提交到持久存储。标准API是否允许我以随机访问方式插入数据(甚至附加可能没问题)。
当用户搜索卡片时(例如,通过播放器的名称),我想从存储器加载一个列表,而不必加载整个文件。
我最担心的是我需要存储大量独特卡片的数据(数千个,可能更多)。程序打开时,我不想在内存中存储所有卡的列表。我没有进行任何测试,但我相信我很容易遇到内存限制。
XML可能不是最佳解决方案。但是,我想让它尽可能简单安装,所以我试图避免使用JDBC或任何第三方库的完整数据库。
所以我想我在问我是否正朝着正确的方向前进,如果是这样的话,我在哪里可以了解更多关于以我想要的方式使用XML的知识。如果没有,是否有人建议我可以用什么其他类型的存储来完成这项任务?
答案 0 :(得分:3)
虽然我当然不会阻止使用XML,但它确实会在你的上下文中有一些缺点。
“标准API是否允许我以随机访问方式插入数据”
是的,在记忆中。您必须将整个模型保存回文件。
“当用户搜索卡片时(例如,通过玩家的名字),我想从存储中加载一个列表,而不必加载整个文件”
除非您期望多个用户读取/写入文件,否则我可能会在加载时将整个文件/模型拉入内存并保留在那里直到您想要保存(执行定期写入后,背景仍然是好主意)
我不想在程序打开时将所有卡的列表存储在内存中。我没有运行任何测试,但我相信我可以轻松地达到内存限制
那将是我关注的问题。但是,您可以使用SAX解析器将文件读入自定义模型。这会减少内存开销(因为DOM解析器可能对内存有点贪心)
“但是,我想让它尽可能简单安装,所以我试图避免使用JDBC的完整数据库”
我会在这方面做更多的研究。我(个人)经常使用H2和HSQLDB来存储大量数据。这些小型个人数据库系统不需要任何额外安装(链接到程序的Jar文件)或特殊服务器/服务。
它们使您可以非常轻松地在数据存储区中构建复杂的搜索,否则您需要自己创建。
如果你要使用XML,我可能会做三件事之一
1 - 如果你要在内存中维护XML文档,我会熟悉XPath (simple tutorial& Java's API)进行搜索。
2 - 我使用Objects创建数据的“模型”来表示各个节点,使用SAX读取它。写作可能有点棘手。
3 - 使用简单的SQL DB(和对象模型) - 它只是整个过程(恕我直言)
其他强>
好像我没有足够倾倒你;)
如果您真的想要XML(并且我不会劝阻您),您可以考虑查看XML数据库样式解决方案
Apache Xindice(显然已退休)
或者你可以看看其他人的想法
例如;)