java 数据库 内存_数据库 – 内存中的Java DB

这是HSQL网站中提到的缓存表FAQ.

•HSQLDB是否将所有数据存储在内存中.内存不会因此而耗尽吗?

•仅在您需要时将所有数据存储在内存中.默认情况下,CREATE TABLE会生成内存表,因为这是较小表的最佳类型.对于较大的表,请使用CREATE CACHED TABLE并调整缓存大小以满足您的内存使用要求(最小为8MB).请参阅“指南”的“系统管理和部署问题”一章. HSQLDB没有简单的规则和强加,因为只使用几个设置就可以实现最大的灵活性. HSQLDB的一种流行用途是用于OLAP,ETL和数据挖掘应用程序,其中巨大的Java内存分配用于在内存中保存数百万行数据.

我认为缓存表已经足够强大,可以满足您的需求.

缓存表和内存表之间的比较

MEMORY表和CACHED表通常用于数据存储.两者的区别如下:

当数据库启动并存储在内存中时,将从* .script文件中读取所有MEMORY表的数据.相反,在访问表之前,不会将高速缓存表的数据读入内存.此外,只有每个CACHED表的部分数据保存在内存中,从而允许表中包含的数据多于可以保存在内存中的数据.

当数据库以正常方式关闭时,MEMORY表的所有数据都会写入磁盘.相比之下,已更改的CACHED表中的数据在操作期间和关闭时被写出.

所有CACHED表的数据高速缓存的大小和容量都是可配置的.这使得可以允许CACHED表中的所有数据缓存在内存中.在这种情况下,访问速度很好,但比MEMORY表稍慢.

对于普通应用程序,建议将MEMORY表用于少量数据,而将CACHED表用于大型数据集.对于速度至关重要并且可用大量可用内存的特殊应用程序,MEMORY表也可用于大型表.

似乎H2和Derby(JavaDB)还不支持此功能.如果不是事实,请纠正我.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮您解答。下面是一个简单的Java数据库连接池的示例代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class ConnectionPool { private static final String DB_DRIVER = "com.mysql.cj.jdbc.Driver"; private static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase"; private static final String DB_USERNAME = "root"; private static final String DB_PASSWORD = "password"; private static final int MAX_CONNECTIONS = 10; private List<Connection> connectionPool; private List<Connection> usedConnections = new ArrayList<>(); private static ConnectionPool instance = new ConnectionPool(); private ConnectionPool() { connectionPool = new ArrayList<>(); try { Class.forName(DB_DRIVER); } catch (ClassNotFoundException e) { e.printStackTrace(); } } private Connection createConnection() throws SQLException { Connection connection = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD); return connection; } public static ConnectionPool getInstance() { return instance; } public synchronized Connection getConnection() throws SQLException { if (connectionPool.isEmpty()) { return createConnection(); } else { Connection connection = connectionPool.remove(connectionPool.size() - 1); usedConnections.add(connection); return connection; } } public synchronized void releaseConnection(Connection connection) { connectionPool.add(connection); usedConnections.remove(connection); } public int getSize() { return connectionPool.size() + usedConnections.size(); } public void closeAllConnections() throws SQLException { for (Connection connection : connectionPool) { connection.close(); } for (Connection connection : usedConnections) { connection.close(); } connectionPool.clear(); usedConnections.clear(); } } ``` 该示例代码,我们使用了Java的线程安全的List来保存空闲连接和已使用连接。在创建连接时,我们使用了Java的JDBC API来获取数据库连接。在获取连接时,我们首先检查连接池是否有空闲连接。如果没有,则创建新连接。如果有,则从连接池获取一个连接。在释放连接时,我们将其添加回连接池。 希望这个示例代码能够帮助您理解如何编写一个简单的Java数据库连接池。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值