【问题标题】:Java object structure most convenient for representing relational database [closed]Java对象结构最方便表示关系数据库[关闭]
【发布时间】:2015-04-06 23:32:45
【问题描述】:

假设您可以读取 CSV 文件中的一堆数据,其中包含一些相互关联的表。什么 Java 对象结构,它使用 JDK 提供的标准 Java 集合最适合表示关系数据库,以预期为类似于大多数常见数据库查询的请求提供服务,包括标准选择,以及 count(*),select distinct() 、分组依据和其他最常见的查询。数据量相对较小,因此如果我们将所有内容都保存在内存中,则不会出现内存问题。

只是想强调一下,这不是关于 SQL 解析或使用内存 SQL 数据库的问题。当您预先不知道所有特定查询时,这几乎是 Java 中最有效的后端关系数据库表示。

【问题讨论】:

  • 我认为表示关系数据的最有效方式是在关系数据库中。为什么不将您的 CSV 解析为 SQLite 并进行查询?
  • 嗯,这更像是一个理论问题,只是感兴趣,他们是如何做到的,在 SQLite 内部说?
  • 关系数据库怎么样?
  • 您可能想要编辑您的问题以更清楚地表明它是理论上的(在这种情况下,CS Theory 可能会更好地回答);因为您似乎在寻求有关如何实现关系数据存储的建议,这基本上不可能简明扼要地回答。
  • dimo414 - 非常感谢您的有趣回复。你是对的,我没有合理地提出这个问题。这不完全是理论上的问题。假设你只有一个 CSV 文件,只有一个表,甚至 SQLlite 和 H2 都不值得,它们都可以放在内存中,所以数据量并不大。将此表表示为 java 对象的最佳方法是什么?预测您通常会向数据库表显示的查询,但不知道您需要如何查询它?

标签: java database oop relational


【解决方案1】:

如果您的问题是“数据库(如 SQLite)在内部使用哪些数据结构?” 答案远非简单,而且通常取决于实现。毕竟,不同数据库的一个主要卖点是他们选择如何构建数据。

对于 SQLite,online documentation 提供了很多关于其内部工作的细节。 H2 等其他数据库在其文档中类似地提供了实现说明,但通常使用的数据结构是特定于用途和自定义的。

从理论上讲,许多数据库将indexes 实现为B+ Trees(在许多其他结构中),但这既不是要求也不一定是“正确”的方法。他们使用的数据结构是多年试错、基准测试和辛勤工作的结果。


回应您的评论:

假设你只有一个 CSV 文件,只有一个表,甚至 SQLlite 和 H2 都不值得,它们都可以放在内存中,所以数据量并不大。将此表表示为 java 对象的最佳方法是什么?预测您通常会向数据库表显示的查询,但不知道您需要如何查询它?

我会使用 SQLite 或 H2。两者都可以运行in-memory,并允许您对其数据运行任意 SQL 查询。如果您知道您打算查询什么,您可以将您的 CSV 解析为一个更专用的数据结构,但如果您不知道您打算如何查询它,那么您就无法希望创建一个更有效的数据结构比现有的数据库工具。数据库是专门为“我不知道我将针对这些数据运行什么查询”的用例而设计的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 2016-11-13
    • 1970-01-01
    • 2013-09-13
    相关资源
    最近更新 更多