2

我的问题是:有什么方法可以使用 java.util.collections(ArrayList/HashMap/3rd 方 LIB 等)实现数据库类型的功能(内存数据库提供)让我稍微描述一下。

我有具有不同 25 个属性的模型类帐户,我可以将 5000 个帐户的数据存储在 ArrayList 上。同样的方式,我可以通过创建表 t_Account 来保存内存数据库中的数据。现在我想实现一些基本操作,如下所述

  1. 根据每个属性按升序/降序排序。(例如 SQL 的 Order By 操作)

  2. 根据每个属性的不同过滤条件过滤掉特定的模型帐户?(在 SQL 中对表应用 WHERE/AND 条件)

  3. 根据特定属性搜索特定帐户?(在 SQL 中对表应用 LIKE 操作)

总之我的主要目的是用Java实现内存数据库相关的功能,应该和内存数据库操作一样好?

提前感谢您的宝贵时间和建议...

4

2 回答 2

1

当然,只要您不这样做,您就可以执行数据库在内存中执行的部分操作

  • 想要实现复杂的查询

  • 在大数据集上寻找性能:复杂的索引(包括它们的维​​护)不是一件容易的事

但是 5000 条记录是一个非常小的集合,因此您可以使用自定义函数和索引在内存中轻松管理它们。排序、过滤、搜索可以在任何语言的小集合上轻松实现。

你似乎使用 java ("ArrayList"),看看Collections.sort()。只要您的比较函数很快,对小集合进行排序就很快。

另一方面,使用像 sqlite 这样的小型数据库也很容易。如果您不确定是否可以从 java 解决方案开始,如果分析显示您无法足够有效地处理内存数据库以满足您的需要,则可以稍后集成外部工具。如果它很容易放入 RAM 并且您不必保留数据,请尝试在内存中进行。使用数据库的第一个原因是持久性。相反,如果您必须在程序的启动停止(或崩溃)之间保留记录,请使用数据库。

于 2012-06-15T06:27:34.950 回答
1

HSQLDBH2纯 Java SQL DB都可以完全在内存中运行(尽管它们不是本机的,但它们的速度相当快)。

连接字符串、HSQLDB: jdbc:hsqldb:mem:、H2: jdbc:h2:mem:。您可以在它们之后添加一个标识符,以创建支持同一 VM 中的多个连接的内存数据库。

原生嵌入式 SQL DB SQLite也可以完全在内存中运行,Xerial SQLite驱动程序使用连接字符串jdbc:sqlite::memory:。请注意,SQLite 不允许在之后使用标识符:memory:,如果您在同一个 VM 中打开两个到 的连接:memory,您将获得两个不同的内存数据库。

我认为没有真正需要使用命名的内存连接,因为如果您需要从不同的线程中使用相同的连接对象,并且上述所有三个数据库都是线程安全的,您可以重用相同的连接对象。

Firebird嵌入式数据库不提供内存数据库。

于 2016-07-16T09:08:46.723 回答