概述
Chronicle Engine 是一个数据虚拟化层。它抽象出访问、操作和订阅各种数据源的复杂性,这样数据的用户就不需要知道数据实际存储的方式或位置。这意味着这些数据可以在系统之间迁移或以更高效但对开发人员来说使用起来过于复杂的方式存储。
基本接口是 Concurrent Map 和一个简单的 Pub/Sub。将这些与过滤器和转换等流结合使用,您可以访问文件、内存数据缓存、LDAP、SQL 数据库、键值 NoSQL 数据库和低延迟持久存储。
我们正在研究的是使用 NFS 作为访问方式以及我们的 Java 和 C# 客户端以自然方式访问数据。这样 Windows、Unix 或 MacOSX 上的任何程序都可以使用它。这看起来怎么样?
通过 NFS 访问
Chronicle Engine 中的数据存储按层次结构组织为树,而不是目录结构。键值存储的键就像目录中的文件,值是文件的内容。这转化为虚拟文件系统。
在 Java 中,访问服务器或远程客户端上的地图。
Map<String, String> map = acquireMap("/group/data", String.class, String.class);
map.put("key-1", "Hello World");
map.put("key-2", "G-Day All");
然而,通过 NFS 挂载,我们可以从任何程序访问相同的映射,甚至是 shell。
Map<String, String> map = acquireMap("/group/data", String.class, String.class);
map.put("key-1", "Hello World");
map.put("key-2", "G-Day All");
要获取一个值,这在 Java 中非常简单
Map<String, String> map = acquireMap("/group/data", String.class, String.class);
map.put("key-1", "Hello World");
map.put("key-2", "G-Day All");
通过 NFS 也很简单
Map<String, String> map = acquireMap("/group/data", String.class, String.class);
map.put("key-1", "Hello World");
map.put("key-2", "G-Day All");
更复杂的功能呢?
拥有我们自己的 NFS 服务器的一个优点是我们可以添加可以执行功能的虚拟文件,前提是它们遵循一般文件访问合同。
在 Java 中,我们可以应用查询来实时获取所有 20 岁以上的人。如果添加了一个条目,它会被打印出来。
Map<String, String> map = acquireMap("/group/data", String.class, String.class);
map.put("key-1", "Hello World");
map.put("key-2", "G-Day All");
那么这如何在 NFS 上转换呢?
Map<String, String> map = acquireMap("/group/data", String.class, String.class);
map.put("key-1", "Hello World");
map.put("key-2", "G-Day All");
这将为您提供所有当前名称,但会提供任何新名称。
选择你的格式。
通过拥有虚拟文件,您可以以不同的格式请求它们。假设底层数据对象是 RDBMS 数据库中的一行。您可能希望采用 CSV 格式,但也可能希望采用 XML 或 JSON 格式。
Map<String, String> map = acquireMap("/group/data", String.class, String.class);
map.put("key-1", "Hello World");
map.put("key-2", "G-Day All");
通过添加可识别的文件扩展名,文件可以以所需的格式显示。
更新记录可以像写入文件一样简单。
与使用普通 NFS 文件系统相比有哪些优势?
主要优点是可扩展性。编年史引擎支持;
- 一张地图(目录)中有数十亿个条目
- LAN 和 WAN 数据复制。
- 实时更新变化。
- 查询支持。
- 数据压缩
- 流量整形。
- 谁在什么时候改变了什么的可审计性。
我们还计划支持数据分发,并支持更多的后端数据存储。
反馈
你会用这样的系统做什么?你会撒谎看到哪些特征?
您可以在这里或 Chronicle 论坛 上发表评论
我期待听到您的想法。