2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

使用 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:131079
用户头像

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

关注

评论

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

shell之变量详解,让你秒懂!

Albert Edison

Linux centos 运维 shell脚本编程 8月月更

为什么数字钱包需要引入小程序生态

Speedoooo

小程序 第三方支付 小程序容器 移动钱包

在“企业通讯录”的盲区,融云的边界与分寸

融云 RongCloud

企业 IM im开发

README_Albumentations

G_Meteor

上海一科技公司刷单被罚22万,揭露网络刷单灰色产业链

石头IT视角

开源一夏 | 对于Angular表达式以及重要指令的研究心得【前端实战Angular框架】

恒山其若陋兮

开源 8月月更

跨端技术方案选什么好?

Geek_99967b

跨端

FileZilla搭建FTP服务器图解教程

天使不哭

#开源 8月月更

重要的不是成为海贼王,而是像路飞一样去冒险

沃德

大型分布式存储方案MinIO介绍,看完你就懂了!

天使不哭

存储 MINO #开源 8月月更

“稚晖君”为2022昇腾AI创新大赛打call 期待广大开发者加入

极客天地

2022 首期线下 Workshop!面向应用开发者们的数据应用体验日来了 | TiDB Workshop Day

TiDB 社区干货传送门

Java技术:SpringBoot实现邮件发送功能

天使不哭

Java email #开源 8月月更

带着昇腾去旅行:一日看尽金陵城里的AI胜景

脑极体

图解VirtualBox安装CentOS 7

万猫学社

Centos 7 virtualbox

10个 Istio 流量管理 最常用的例子,你知道几个?

万猫学社

云原生 istio envoy Istio流量管理

阿里云架构师金云龙:基于云XR平台的视觉计算应用部署

阿里云弹性计算

视觉计算 计算巢 云XR平台 GPU实例

每日一R「02」所有权与 Move 语义

Samson

签约计划第三季 8月月更 ​Rust

开源一夏 | Mysql开启ssl加密协议及Java客户端配置操作指南

六月的雨在InfoQ

MySQL 开源 SSL证书 SSL 连接 8月月更

“车家互联”新态势,小程序实现物联网多场景互通

Speedoooo

小程序 智能家居 小程序容器 电动车

小程序+自定义插件的关键性

Geek_99967b

小程序

开发者必备:一文快速熟记【数据库系统】和【软件开发模型】常用知识点

小阿杰

软件开发流程 软件开发原则 数据库系统 签约计划第三季

2022Nginx实战教程,由浅入深

LoneWalker、

nginx

操作系统:SSH协议知识介绍

天使不哭

Linux SSH #开源 8月月更

视频是主动学习吗?

FunTester

ebook下载 | 《 企业高管IT战略指南——企业为何要落地DevOps》

York

云计算 DevOps 云原生 数字化转型 降本增效

5个 Istio 访问外部服务流量控制最常用的例子,你知道几个?

万猫学社

云原生 istio envoy Istio流量管理

SpringMVC(三、JDBCTemplate)

开源 springmvc 8月月更

十步以内,用小程序快速生成App!

Geek_99967b

小程序

分享 6 个 Vue3 开发必备的 VSCode 插件

Geek_z9ygea

vue.js 前端 vscode vuejs

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