写点什么

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

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

关注

评论

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

iOS 开发没市场了吗?移动开发真的凉了吗? | 【话题讨论】

HelloWorld杰少

话题讨论 iOS Developer

10天拿到字节跳动Java岗位offer,互联网行业“中年”危机

Geek_f90455

Java 程序员 后端

写作业写作业写作业

Nydia

2021Java大厂高频面试题,原理+实战+视频+源码

Geek_f90455

Java 程序员 后端

怎么对数据指标管理

水滴

指标体系 数据指标 8月日更 指标管理

Linux之iostat命令

入门小站

Linux

12年高级工程师的“飞升之路”,面试题+笔记+项目实战

Geek_f90455

Java 程序员 后端

2020-2021华为Java面试真题,统统都会!

Geek_f90455

Java 程序员 后端

架构实战营 - 模块四作业

思梦乐

借助AI模型目标检测打标签工具 :Makesense.ai , 解放双手 ! ! !

码农的后花园

人工智能 深度学习 目标检测 yolo YOLOv5

架构师实战营 模块十总结

代廉洁

架构实战营

SpringBoot 中使用Redis缓存

xcbeyond

redis 8月日更

Git的实战教学 | 从0到1

卢卡多多

git 8月日更

在线分数加减乘除计算器

入门小站

工具

即战力:职场上如鱼得水的一种能力

非著名程序员

个人成长 提升认知 职场成长 8月日更

配置手机测试环境

IT蜗壳-Tango

8月日更

社会心理学-自尊

箭上有毒

读书笔记 8月日更

15分钟的字节跳动视频面试,工作感悟

Geek_f90455

Java 程序员 后端

webstorm之开发工具Vim(一)

Augus

8月日更

3分钟搭建一个网站?腾讯云Serverless开发体验

Zhendong

腾讯云 Serverless 云原生 云开发

Druid 从控制台(Druid console)中删除过滤器和运行查询

HoneyMoose

【设计模式】建造者

Andy阿辉

C# 编程 后端 设计模式 8月日更

02 设计模式之策略模式

陈皮的JavaLib

Java 设计模式 策略模式 8月日更

2020-2021华为Java面试真题,内含福利

Geek_f90455

Java 程序员 后端

2020-2021阿里巴巴Java面试真题解析,详细的Java学习指南

Geek_f90455

Java 程序员 后端

2021Java开发现状分析,给大家安排上!

Geek_f90455

Java 程序员 后端

网络攻防学习笔记 Day93

穿过生命散发芬芳

网络攻防 8月日更

设计电商秒杀系统

好吃不贵

醍醐灌顶学习RTMP,从总体介绍到各个细节

hanaper

音视频

10万字Mysql实战文档,Java面试题汇总

Geek_f90455

Java 程序员 后端

Druid 从控制台(Druid console)中查询字段

HoneyMoose

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