写点什么

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

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

关注

评论

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

K8S学习指南(2)-docker的基本使用

俞兆鹏

一款便捷操作移动设备的PC工具

iofomo

android 开发工具 测试工具 PC ios 开发

K8S学习指南(1)-docker的安装

俞兆鹏

K8S学习指南(3)-minikube的安装

俞兆鹏

TuGraph Analytics作业监控面板:运行时组件上的高效分析工具

TuGraphAnalytics

分布式 监控 图计算

通过聚道云软件连接器实现金蝶软件与客如云软件的无缝对接

聚道云软件连接器

案例分享

5G-A,一根蓄满能量的弹簧

脑极体

5G

龙蜥操作系统上玩转铜锁密码库

OpenAnolis小助手

阿里云 操作系统 国密 龙蜥社区 铜锁

感恩有你|一起见证 OpenTiny 这5个锦鲤时刻

OpenTiny社区

开源 前端 低代码 组件库

征程万里,行则将至|博睿数据2023年度盘点

博睿数据

软件测试/测试开发/全日制|pytest用例执行顺序,这篇文章就够了

霍格沃兹测试开发学社

软件测试/测试开发/全日制|Pytest参数化神器,pytest.mark.parametrize()使用

霍格沃兹测试开发学社

恭喜 Databend 上榜 2023 开源创新榜「优秀开源项目 」

Databend

【Redis深度专题】「核心技术提升」从源码角度探究Redis服务的内存使用、清理以及逐出等底层实现原理

码界西柚

redis 底层原理 清理缓存 原理机制 功能实现 2024年第二篇文章

C 语言指针完全指南:创建、解除引用、指针与数组关系解析

小万哥

程序人生 编程语言 软件工程 C/C++ 后端开发

物联网与低代码: 连接人与数字世界的无限可能

不在线第一只蜗牛

低代码 物联网

演讲实录|博睿数据副总裁杨雪松:可观测性建设之路(上)

博睿数据

软件测试/测试开发/全日制|Pytest都有哪些命名规则?

霍格沃兹测试开发学社

一图回顾 Apache IoTDB 的 2023!

Apache IoTDB

Scrum敏捷研发管理流程及示例

顿顿顿

Scrum 敏捷开发 Scrum Master 敏捷项目管理 敏捷研发管理工具

聚道云软件连接器助力某动漫行业公司实现财务自动化

聚道云软件连接器

案例分享

【Redis技术专区】「原理分析」探讨Redis6.0为何需要启用多线程

码界西柚

redis 多线程 原理分析 并发机制 2024年第一篇文章

避免重复扣款:分布式支付系统的幂等性原理与实践

幂等性 支付系统设计与实现 全局幂等 防止重复扣款

ClkLog开源可视化埋点系统助你实现数据驱动运营!

ClkLog

数字藏品如何赋能线下实体?以 BOOMSHAKE 潮流夜店为例

Footprint Analytics

NFT 数字藏品

MegEngine 11-12 双月报:新版本发布,开发者福利课程,MegEngine 使用技巧,精彩不容错过!

MegEngineBot

深度学习 开源 框架 寒武纪

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