java - 在Java中插入和搜索大量数据

标签 java xml

我正在用 Java 编写一个程序,用于跟踪棒球卡的数据。我正在尝试决定如何持久存储数据。我一直倾向于将数据存储在 XML 文件中,但我不熟悉 XML API。 (我已经阅读了一些在线教程并开始尝试 javax.xml 层次结构中的类。)

该软件具有主要用例:用户将能够添加卡片和搜索卡片。

当用户添加卡时,我想立即将数据提交到持久存储。标准 API 是否允许我以随机访问方式插入数据(甚至追加也可以)。

当用户搜索卡牌时(例如,通过玩家的名字),我想从存储中加载列表,而不必加载整个文件。

我最担心的是我需要存储大量独特卡的数据(大约数千张,可能更多)。我不想在程序打开时将所有卡片的列表存储在内存中。我没有运行任何测试,但我相信我很容易遇到内存限制。

XML 可能不是最好的解决方案。然而,我想让它的安装尽可能简单,所以我试图避免使用 JDBC 或任何第三方库的成熟数据库。

所以我想我是在问我是否正在朝着正确的方向前进,如果是的话,我可以在哪里了解有关以我想要的方式使用 XML 的更多信息。如果没有,有人对我可以使用哪些其他类型的存储来完成此任务有建议吗?

最佳答案

虽然我当然不会阻止使用 XML,但它在您的上下文中确实有一些缺点。

“标准 API 是否允许我以随机访问方式插入数据”

是的,在内存中。不过,您必须将整个模型保存回文件。

“当用户搜索卡牌时(例如,通过玩家的名字),我想从存储中加载列表,而不必加载整个文件”

除非您期望多个用户读取/写入文件,否则我可能会在加载时将整个文件/模型拉入内存并将其保留在那里,直到您想要保存(定期写入后台仍然是好主意)

我不想在程序打开时将所有卡片的列表存储在内存中。我还没有运行任何测试,但我相信我很容易遇到内存限制

这将是我关心的问题。但是,您可以使用 SAX 解析器将文件读入自定义模型。这将减少内存开销(因为 DOM 解析器可能对内存有点贪婪)

“但是,我想让安装尽可能简单,所以我试图避免使用 JDBC 的成熟数据库”

我会在这个领域做更多的研究。我(个人)使用H2HSQLDB很多用于存储大量数据。这些是小型个人数据库系统,不需要任何额外的安装(链接到程序的 Jar 文件)或特殊的服务器/服务。

它们使在数据存储中构建复杂的搜索变得非常容易,否则您需要自己创建。

如果您要使用 XML,我可能会做以下三件事之一

1 - 如果您要在内存中维护 XML 文档,我会熟悉 XPath ( simple tutorial & Java's API ) 用于搜索。

2 - 我将使用对象创建数据的“模型”来表示各个节点,并使用 SAX 读取它。写作可能有点棘手。

3 - 使用简单的 SQL DB(和对象模型) - 它将简化整个过程(恕我直言)

附加

好像我对你倾倒的还不够;)

如果您确实想要 XML(我不会阻止您这样做),您可以考虑看看 XML 数据库样式的解决方案

Apache Xindice (显然已经退休了)

或者你可以看看其他人的想法

例如;)

关于java - 在Java中插入和搜索大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11875054/

相关文章:

java - 以编程方式从网页源中提取特定数据

java - 未从 div 获取值

java - Java 中的 ECMA 262/Perl 5 正则表达式支持

javascript - 如何访问外部 javascript 变量并在 xsl 中打印它?

javascript - AJAX 不会 POST 到 URL

java - 带有 aop.xml 的 AspectJ

java - 如何使用 Couchbase 服务器配置 sync_gateway

java - 从不同线程写入 Netty ChannelHandlerContext

Java Web 应用程序国际化 : Where should I store big texts?

php - 使用php domxml读取xml文件时出错?