最方便表示关系数据库的Java对象结构

标签 java database oop relational

<分区>

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

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

最佳答案

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

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

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


回应您的评论:

Let's say you just have one CSV file, just one table, and it is not worth even going to SQLlite and H2 and it all can be fit within memory, so amount of data is not that big. What is the best way to represent this table as java object, anticipating queries you'll normally present to database table, but not knowing exactly upfront how you would need to query it?

我会使用 SQLite 或 H2。两者都可以运行 in-memory ,并让您对他们的数据运行任意 SQL 查询。如果你知道你打算查询什么,你可以将你的 CSV 解析成一个更特殊用途的数据结构,但如果你不知道你打算如何查询它,你就没有办法创建一个更有效的数据结构比现有的数据库工具。数据库专为“我不知道我将针对这些数据运行什么查询”的用例而设计。

关于最方便表示关系数据库的Java对象结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29481345/

相关文章:

java - 安卓:版本选择

sql - 在 Informix DB 中选择硬编码值

android - 在 2 个 android 应用程序之间共享 SQLite 数据库?

oop - 将模型与其表示分离的面向对象的方法

java - 如何将基于注释的语法转换为原生 AspectJ 语法

java - OffsetDateTime.toString() 当秒和纳秒为 0 时删除它们

c++ - 在子类之外实现函数导致未知错误

oop - 聚合、组合和依赖之间有什么区别?

java - JDBC SQL 数据库被锁定?

ruby-on-rails - 设计题: Aliases for a Location model (Rails)