写点什么

使用 Space4J 进行 Java 的内存持久化

  • 2008-10-03
  • 本文字数:882 字

    阅读完需:约 3 分钟

Space4J 是一个简单的数据库系统,它使你可以在内存中与 Java 集合协同工作。由于内存对数据的随机访问速度要比磁盘快几个数量级,所以 Space4J 为性能关键的“实时”Web 应用和系统提供了更好的可伸缩性。

通过使用 Space4J,如果想从数据库表中取出一个 User,开发者就无需执行 SQL SELECT 语句了,而只需访问一个 users map(java.util.Map),然后调用 users.get(id)。因为所有的数据都保存在 JVM 所管理的内存中,所以就无需额外的数据库应用、socket 连接、JDBC 驱动、SQL 语句或者任何 ORM 工具等。数据就在那儿,在对象中,在 Java maps 中。如果你想修改数据,那么你需要创建一个 Command 对象,然后将其序列化并保存到磁盘上的一个日志文件中。当重启时,上次的 commands 就会从日志文件中被读取进来并被再次使用,然后生成与系统崩溃前一样的数据集。

应用会不时地将所有数据的快照存储到磁盘上以防止日志文件变得过大。Space4J 将所有数据都保存在 Space 对象中。当进行快照时,整个 Space 对象会被序列化并存储到磁盘上。因此当重启时,只有上次快照后的 commands 而不是全部需要重新应用。快照的大小取决于应用。除非使用了 Space4J 集群,否则系统必须进入只读模式才能将快照保存到磁盘上。这方面的一个例子就是处于负载平衡下的 Web 应用,这时每个 Web 服务器都需要有一个 Space4J 节点。

与 Space4J 一起发布的还有一个完善的索引框架,该框架支持 4 种不同的索引类型从而方便以多种方式来搜索数据。它也可用在通常的数据库中以进行离线处理、数据仓库、报表等等。

Space4J 使用了 Java 1.6 的并发数据结构来处理对数据的并发读 / 写访问,因此写只会阻塞写、而读则不会阻塞其他操作,也不会被其他操作阻塞。这意味着一次只能进行一个修改操作,但读操作就可以并发执行而不会抛出 ConcurrentModification 异常!

你可以下载最新版(0.9.1)或者查看源代码仓库

如果你想进一步了解关于将数据访问从磁盘转换到内存中,以得到更好的性能及其他数据访问的话题,请阅读InfoQ 上Steven Robbins 所写的文章——“ RAM 是新的硬盘”。

查看英文原文: Java In-Memory Persistence with Space4J

2008-10-03 23:131059
用户头像

发布了 88 篇内容, 共 270.9 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

openGauss数据库源码解析系列文章——AI技术(2.2)

daydayup

【我和openGauss的故事】openGauss价值特性(一)

daydayup

openGauss数据库源码解析系列文章——AI技术(2.1)

daydayup

3DCAT实时云渲染助力VR虚拟现实迈向成熟

3DCAT实时渲染

实时渲染云 VR虚拟现实

企业全面预算管理的生存指南:建立成功的FP&A团队

智达方通

全面预算管理 企业全面预算管理 财务规划与分析 财务数据

三连冠!天翼云蝉联中国专属云服务市场第一

天翼云开发者社区

云计算 云服务

openGauss内核分析(五):统计信息与行数估计(一)

daydayup

一文带你全面理解向量数据库

树上有只程序猿

数据库 向量数据库

PoseiSwap 即将开启质押,利好刺激下 POSE通证短时涨超 30%

股市老人

DTCC2022 | openGauss打造企业级开源数据库,服务行业核心系统

daydayup

openGauss亮相TDBC 2023可信数据库发展大会,解读openGauss最新版本特性

daydayup

HPC云化部署的优势和挑战

天翼云开发者社区

云计算 高性能计算

【我和openGauss的故事】openGauss价值特性 (二)

daydayup

腾讯云 CODING × K+ 峰会再次携手开启软件行业新风向

CODING DevOps

想学Python高级编程?这个技巧你不能错过!

程序员晚枫

Python 高级编程

听说 Spring Bean 的创建还有一条捷径?

江南一点雨

spring

Go 语言 select 都能做什么?

AlwaysBeta

Go golang 面试 select

如何进行高效的代码审查

小万哥

程序员 程序人生 后端 软件开发 代码审查

腾讯云 CODING 成为首批 TISC 企业级平台工程综合能力要求标准贡献单位

CODING DevOps

浅析嵌入式GUI框架-LVGL

小巫debug日记

嵌入式开发 LVGL FrameBuffer

openGauss内核分析(五):统计信息与行数估计(一)

daydayup

openGauss正式推出资源池化架构,全新升级社区工具DataKit

daydayup

全球掀复现「室温常压超导体」热潮,中国队已肝十几小时,韩国团队却内讧了

Openlab_cosmoplat

人工智能

2023网络与边缘产业高层峰会拉开帷幕,英特尔联合生态伙伴以创新技术破局数智化转型挑战

E科讯

大数据通用组件故障处理

天翼云开发者社区

大数据

怎样缓存时序数据更合理? 解密DBMind在时序数据缓存上的代码实践 openGauss

daydayup

用于提取数据的三个开源NLP工具

互联网工科生

nlp NLP 大模型

使用Space4J进行Java的内存持久化_Java_Dio Synodinos_InfoQ精选文章