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

Java object structure most convenient for representing relational database

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

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

如果您的问题是 "What data structures do databases, like SQLite, use internally?",那么答案远非简单,而且一般来说取决于实现。毕竟,不同数据库的一个主要卖点是它们如何选择构建数据。

对于 SQLite,online documentation provides a lot of detail about its inner workings. Other databases like H2 同样在其文档中提供了实施说明,但通常使用的数据结构是特定于使用和自定义的。

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


回复您的评论:

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 解析成一个更特殊用途的数据结构,但如果你不知道你打算如何查询它,你就没有办法创建一个更有效的数据结构比现有的数据库工具。数据库专为 "I don't know what queries I'll be running against this data".

的用例而设计