浏览 4005 次
锁定老帖子 主题:hsqldb Cached Table转变
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-21
虽然,可以通过设置JVM的大小改变JVM所能占有的内存大小。btw:这里需要设置服务器端和客户端。 java 代码
今天仔细查看了HSQLDB的说明文档,原来Memory Table表在数据库初始化的时候会被完全读写到内存当中,假设我的数据库有60M的话,这60M的内存将一下就读入到内存中去,当然就会占用大量的内存资源。等数据库关闭的时候,内存中的数据就会写到.Script文件当中去。当然还不包括对数据库进行的操作所耗费的资源等等,这么一下来,客户端耗费的资源就相当大了。 一个比较好的方法是将这种Memory Table转变为Cached Table。这样的话 “ CACHED 表是在使用CREATE CACHED TABLE 命令的时候生成的。它只有索引或部分数据是驻留在内存中的,所以可以允许生成容量为几百兆的表空间。CACHED 表的另外一个优点,即使它存储了大量的数据,数据库引擎只需花费很短的时间就可以启动。它的不足是在速度上有所降低。如果你的数据集相对小的时候,尽量不要使用CACHED 表。在小容量和大容量表共存的实际应用中,最好对哪些小容量的表使用默认的MEMORY 表。” --摘自HSQLDB用户指南 " If only memory tables (CREATE TABLE or CREATE MEMORY TABLE) are used then the database is limited by the memory. A minimum of about 100 bytes plus the actual data size are required for each row. If you use CREATE CACHED TABLE, then the size of the table is not limited by the memory beyond a certain minimum size. The data and indexes of cached tables are saved to disk. With text tables, indexes are memory resident but the data is cached to disk." --摘自HSQLDB FAQ 也就是说,如果我把其中比较大的Memory Table转换为Cached Table的话,占用的内存资源会相对较少,但是速度是会降低。测试了一下,导出单个项目的数据到HSQLDB数据库中,如果使用Memory的话,需要32s,但是,使用Cached Table的话,需要45s,数据文件有6M。 由于产品马上就要发布了,这个时候修改可能不是很恰当。先评估一下可能的影响吧。
这种统计的需求放到客户端去进行,真是难为客户端了,希望客户端的内存大点:) 真想把统计业务和系统常规业务分开,单独的统计系统来处理这些统计需求,就不会对常规业务系统造成影响了。不知道各位在处理统计需求的时候怎么处理? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |