假设您可以读取CSV文件中的一堆数据,其中包含一些彼此相关的表。使用JDK提供的标准Java集合的Java对象结构最适合表示关系数据库,以期为类似于大多数常见数据库查询的请求提供服务,包括标准选择,以及count(*),select distinct() ,分组和其他最常见的查询。数据量相对较小,因此如果我们将所有内容保存在内存中,就不会出现内存问题。
只是想强调一点,这不是关于SQL解析或使用内存中SQL数据库的问题。这是Java中最有效的后端关系数据库表示,当您事先不了解所有特定查询时。
答案 0 :(得分:2)
如果您的问题是“SQLite在数据库中使用哪些数据结构,在内部使用?”答案远非简单,而且通常依赖于实现。毕竟,不同数据库的一个主要卖点是他们如何选择构建数据。
对于SQLite,online documentation提供了有关其内部工作的大量细节。像H2这样的其他数据库同样在其文档中提供了实现说明,但通常使用的数据结构是特定于用途和自定义的。
在理论上讲,许多数据库实现indexes为B+ Trees(在许多其他结构中),但这既不是要求,也不一定是“正确”的方式。他们使用的数据结构是多年的反复试验,基准测试和努力工作的结果。
回应你的评论:
假设你只有一个CSV文件,只有一个表,甚至不值得去SQLlite和H2,它们都可以放在内存中,因此数据量不是很大。将此表表示为java对象的最佳方法是什么,预测您通常会向数据库表提供的查询,但不知道您需要如何查询它?
我会使用SQLite或H2。两者都可以运行in-memory,并允许您针对其数据运行任意SQL查询。如果您知道要查询的内容,可以将CSV解析为更具特色的数据结构,但如果您不知道如何查询它,则无法创建更高效的数据结构比现有的数据库工具。数据库是专门针对“我不知道我将针对此数据运行哪些查询”的用例而设计的。