写点什么

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

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

关注

评论

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

mdraid、mdadm 与 Linux 软件 RAID 终极指南

Sergey Platonov

raid storage xiRAID MDraid

铭芯科技共享轮椅租赁系统

微擎应用市场

YashanDB RLIKE_FILTER函数

YashanDB

数据库

华为开发者空间部署FastGPT,构建知识库智能体

华为云开发者联盟

华为云ModelArts AI+ FastGPT DeepSeek v3 华为开发者空间

“子弹弹夹”装弹和出弹的抽象原理实战:掌握栈的原理与实战

电子尖叫食人鱼

JavaScript 数据结构 算法

解析vLLM架构及源码系列-整体架构

Jason黄

vLLM vLLM优化 vLLM源码

Aloudata 入选 IDC “Data Flow Agent 代表厂商”和 DAC “数据资产运营商 TOP10”

Aloudata

agent 指标平台 noetl ChatBI

从一起知名线上故障,谈配置灰度发布的重要性

阿里巴巴云原生

阿里云 云原生 nacos

寻医问药小程序系统

微擎应用市场

新鲜出炉|指标平台「实践案例研究报告」等你来领~

Aloudata

数据分析 ETL 指标平台

北大张牧涵团队依托昇腾突破推理效率瓶颈 大模型推理百万tokens 成本仅 1 元

极客天地

Playwright 自动化测试 | 测试框架集成​​Page Object 模式

测试人

软件测试

PandasAI连接LLM进行智能数据分析

不在线第一只蜗牛

数据分析

YashanDB ROW_NUMBER函数

YashanDB

数据库

7 月 29 日晚,一场发布会,重新定义什么叫“数据在说话”

TDengine

tdengine 时序数据库

YashanDB ROUND函数

YashanDB

数据库

MySQL有哪些“饮鸩止渴”提高性能的方法?

量贩潮汐·WholesaleTide

MySQL 数据库

什么是低代码(Low-Code)?2025低代码核心架构技术解析与应用展望

优秀

低代码 低代码开发

基于Amazon Translate的深度学习教材自动翻译系统

qife122

机器翻译 Amazon Translate

阿里云正式开源 LoongSuite:打造 AI 时代的高性能低成本可观测采集套件

阿里巴巴云原生

阿里云 开源 云原生 可观测

寻疗智慧 IOT 数字健康服务平台

微擎应用市场

YashanDB RIGHT函数

YashanDB

数据库

亚马逊机器人如何应对交通拥堵

qife122

机器人技术 多智能体系统

Vibe Coding 时代的开源社区开发新体验

老纪的技术唠嗑局

AI+ OceanBase 开源 cursor MCP

Go 原理之 GMP 并发调度模型

秃头小帅oi

告别堡垒机时代!某电力公司如何用CloudQuery解决2000+数据库的安全困局?

BinTools图尔兹

基于vLLM与AWS Trainium的冷启动推荐优化

qife122

推荐系统 vLLM

GPUStack v0.7重磅更新:macOS与Windows安装包、昇腾MindIE多机推理、模型使用计量与寒武纪MLU支持

GPUStack

人工智能 AI 大模型 LLM

荣耀应用市场《2025上半年应用合规治理报告》丨开发加油站

荣耀开发者服务平台

应用中心 治理规范 荣耀开发者服务平台 荣耀应用市场

YashanDB ROWIDTOCHAR函数

YashanDB

数据库

阶跃星辰端到端语音模型 Step-Audio 2:深度思考+音色切换;11Labs 对话式 AI 增加 WebRTC支持丨日报

RTE开发者社区

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