写点什么

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

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

关注

评论

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

C4D2023取消永久许可?Maya推出精简版?你不能错过的7个CG软件资讯...

Renderbus瑞云渲染农场

CG Renderbus瑞云渲染 渲染软件更新

从事数字化转型的你,搞清楚这些数据类基础理念了吗

雨果

数据中台 数据仓库 数据湖

CSS中px、rem与em的区别

木偶

CSS 前端 10月月更

容器和单机容器编排入门与实战

poseidom

,docker Docker 镜像

科兴未来:产业创新和人才服务为一体化的双创体系

科兴未来News

#双创赛事# #双招双引# #人才政策# #创业大赛#

Python高阶语法---函数

木偶

Python 函数 10月月更

堆排序详解(含对时间复杂度的分析)

lovevivi

c 数据结构 10月月更

1024@程序员:图灵社区福利来了,请本人签收

图灵社区

程序员节

使用Java实现BMI指数测试

魏铁锤

10月月更

谈谈电商系统中的商品模块设计

乌龟哥哥

10月月更

MySQL 中文分词原理

乌龟哥哥

10月月更

数据湖(九):Iceberg特点详述和数据类型

Lansonli

数据湖 10月月更

Nginx多方面调优策略

乌龟哥哥

10月月更

Centos7对外开放端口 | 运维 | Linux

Appleex

Linux Centos 7 运维、

Java之面向对象

魏铁锤

10月月更

极客时间运维进阶训练营第一周作业

chenmin

Jib构建镜像问题从定位到深入分析

程序员欣宸

Docker 10月月更 Jib

【C++】选择排序​

游坦之

10月月更

规律跑步,让生活更有掌控感

BY林子

跑步 掌控

“程”风破浪的开发者|Web3用合约让利润分配更公平

石云升

区块链 Web3.0 10月月更 “程”风破浪的开发者

阿里也没想到14年后“互联网寒冬”这个词还能火

雨果

“程”风破浪的开发者 | 踉踉跄跄的Java之路

游坦之

Java 学习方法 “程”风破浪的开发者

JavaScript基础知识-JS数据类型

木偶

JavaScript 前端 10月月更

决胜 AI 金融新赛道!Python Quants 创始人分享宝贵 AI 算法交易经验

图灵社区

人工智能

Go 语言入门很简单:Go 使用 Redis

宇宙之一粟

redis Go 语言 10月月更

【一Go到底】第二十四天---时间和日期函数

指剑

Go golang 10月月更

测试覆盖率治不好你的精神内耗

光毅

测试 测试覆盖率

类型转化问题

魏铁锤

10月月更

SpringCloud-06 Zuul学习笔记

游坦之

10月月更

Gartner发布2023年十大战略技术趋势播

雨果

Gartner

JNI中实现类似C++回调的方法(1)

中国好公民st

c++ jni 10月月更

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