访问nfs
总览
编年史引擎是数据虚拟化层。 它抽象化了访问,操作和订阅各种数据源的复杂性,因此该数据的用户无需知道实际存储数据的方式或位置。 这意味着该数据可以在系统之间迁移或以更有效的方式存储,但对于开发人员来说使用起来很复杂。
基本界面是并发映射和简单的发布/订阅。 通过将它们与过滤器和转换之类的流结合使用,您可以访问内存数据高速缓存,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)访问相同的映射。
~ $ cd /group/data
/group/data $ echo Hello World > key-1
/group/data $ echo G-Day All > key-2
为了获得价值,这在Java中非常简单:
String value = map.get("key-1");
通过NFS,它也很简单:
/group/data $ cat key-1
Hello World
那更复杂的功能呢?
拥有自己的NFS服务器的一个优点是,我们可以添加虚拟文件,只要它们遵循常规的文件访问合同,就可以执行功能。
在Java中,我们可以应用查询来实时获取20岁以上的所有人。 如果添加了条目,则会在出现时立即打印。
map.entrySet().query().filter(e -> e.getValue().age > 20).map(e -> e.getKey()).subscribe(System.out::println);;
那么如何在NFS上转换呢?
/group/data $ tail -9999f '.(select key where age > 20)'
Bob Brown
Cate Class
这将为您提供所有当前名称,但会出现任何新名称。
选择格式。
通过拥有虚拟文件,您可以要求使用其他格式。 假设基础数据对象是RDBMS数据库中的一行。 您可能需要CSV格式,但是可能需要XML或JSON。
/group/users $ ls
peter-lawrey
/group/users $ cat peter-lawrey.csv
Peter,Lawrey,UK,1001
/group/users $ cat peter-lawrey.xml
<user id="1001"><first>Peter</first><last>Lawrey</last><country>UK</country>
</user>
/group/users $ cat peter-lawrey.json{"user": { "id": "1001", "first": "Peter", "last": "Lawrey", "country": "UK" }}
通过添加可识别的文件扩展名,文件可以以所需的格式显示。
更新记录就像写入文件一样简单。
与使用普通的NFS文件系统相比,有什么优势?
主要优点是可扩展性。 编年史引擎支持;
- 一张地图(目录)中的数十亿个条目
- LAN和WAN数据复制。
- 实时更新更改。
- 查询支持。
- 资料压缩
- 流量整形。
- 可审核性是谁何时更改了什么。
我们计划也支持数据分发,并支持更多的后端数据存储。
反馈
您将使用这种系统做什么? 您会撒谎看到哪些功能? 您可以在此处或在Chronicle论坛上发表评论。 我期待听到您的想法。
翻译自: https://www.javacodegeeks.com/2015/08/accessing-chronicle-engine-via-nfs.html
访问nfs