NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

2018年世界杯德国竟然输给韩国?终于找到原因了!

Jackpop

分析23个赛季NBA数据,我发现10条难以置信的信息!

Jackpop

什么是元宇宙?为何要关注它?

CECBC

清华元宇宙深度报告!理论框架产业真相一文看懂

CECBC

EF Core如何处理多对多关系

喵叔

11月日更

Windows 11再出杀手锏....

Jackpop

Flutter设置App的应用名字和应用logo图标的方法

坚果

flutter 11月日更

Java 项目中使用 Resilience4j 框架实现客户端 API 调用的限速/节流机制

码语者

Java 限速 节流 Resilience4j RateLimit

在线文本行固定长度填充工具

入门小站

工具

《深入理解JVM虚拟机》读书笔记:第一章

Joseph295

“2021ISIG中国产业智能大会低代码峰会”即将开幕,钉钉宜搭叶周全受邀出席

一只大光圈

阿里巴巴 互联网 钉钉 低代码 钉钉宜搭

一个对标VSCode的IDE---Fleet

IT蜗壳-Tango

11月日更

华为,告别大陆军时代

脑极体

CWE 4.6 和 OWASP TOP10(2021)

Tom(⊙o⊙)

【高并发】由InterruptedException异常引发的思考

冰河

Java 并发编程 多线程 高并发 异步编程

被Chrome坑惨了!

Jackpop

使用 ABAP 代码提交 SAP CRM Survey 调查问卷

Jerry Wang

CRM SAP abap 11月日更 问卷模型

[Pulsar] 消息生命历程(三)——客户端发送消息

Zike Yang

Apache Pulsar 11月日更

模块四作业:设计千万级学生系统的试卷存储方案

Geek_99eefd

模块四 「架构实战营」

App 端自动化的最佳方案,完全解放双手!

星安果

Python 自动化 爬虫

这次不怕撕坏了,区块链电子公告来了

CECBC

【死磕Java并发】-----J.U.C之AQS:同步状态的获取与释放

chenssy

11月日更 死磕 Java 死磕 Java 并发

Golang Gin 框架之分组路由(五)

liuzhen007

11月日更

23 K8S之Secret资源配置

穿过生命散发芬芳

k8s 11月日更

🏆【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起探索一下DefaultMQPullConsumer的实现原理及源码分析

洛神灬殇

阿里巴巴 RocketMQ 消息队列 11月日更 Apache RocketMQ

Spring Bean生命周期你除了会背八股文面试,真的会用了吗?

热爱java的分享家

Java spring 程序人生 编程语言 经验分享

华为顶级安全专家分享出来这份‘典藏版’Linux开发实战笔记

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

linux之strings命令

入门小站

Linux

Prometheus Exporter (八)kube-state-metrics

耳东@Erdong

Kubernetes Prometheus exporter 11月日更 kube-state-metrics

分布式系统的架构演进过程(一)

卢卡多多

分布式, 11月日更

2021RSAC -- 网络韧性

Tom(⊙o⊙)

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