IMDB(在内存数据库中)与Java集合

时间:2012-06-15 06:23:36

标签: database performance collections in-memory-database

我的问题是:有没有办法用java.util.collections(ArrayList / HashMap / 3rd party LIB等)实现数据库类功能(在内存数据库中提供)...让我加入一点描述性。

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

  1. 根据每个属性按升序/降序排序。 (例如,按SQL操作命令)

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

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

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

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

2 个答案:

答案 0 :(得分:1)

当然,只要你没有

,你就可以完成数据库在内存中所做的部分工作
  • 想要实施复杂的查询

  • 寻找大数据集的表现:复杂的指数(包括维护)并不是一件容易的事情

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

您似乎使用java(“ArrayList”),请查看Collections.sort()。只要您的比较功能很快,就可以快速对小集合进行排序。

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

答案 1 :(得分:1)

HSQLDBH2纯Java SQL数据库都可以完全在内存中运行(尽管它们不是原生的,但速度非常快。)

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

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

我没有看到真正需要使用已命名的内存中连接,因为如果需要在不同的线程中使用它,并且上述所有三个数据库都是线程安全的,则可以重用相同的连接对象。 / p>

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

相关问题