概述
“数据库是一个智能文件系统”
- 匿名的
“你的数据库/应用程序是一个文件系统”
--编年史软件。
为什么将您的应用程序挂载为文件系统?
使用文件系统的主要好处是;
- 它可以为您提供另一种访问适用于任何语言的数据的方式。
- 有很多现有的工具可以处理文件。
- 这是一种熟悉的数据排列方式。
什么是编年史引擎?
Chronicle Engine 允许您设置订阅并在事情发生变化时得到通知,例如新地图或条目被添加/删除或更改。这些订阅也是通过命名空间定义的。您可以将命名空间想象成一个文件路径,其中文件位于目录中。该目录位于另一个目录中。通常,您可以通过 Java 编程接口访问编年史地图。在 chronicle-engine 中你可以这样说
Map<String, String> map = tree1.acquireMap(“/root/data/mymap", String.class, String.class)
此命令在名为 /root/data/ 的虚拟目录中创建一个 Map<String, String>
由于这是一个虚拟目录,如果您查看文件系统,您将看不到该目录。对于某些类别的问题,仅能够通过 Java 访问地图是可以接受的。然而,如果映射包含,例如您的系统配置信息,有时希望(当然具有适当的访问权限)能够挂载这个虚拟文件系统,就好像它是一个真正的文件系统一样。因此,我们现在为 Chronicle Engine 提供了 NFS 支持,因为它是 NFS,它允许您在虚拟文件系统中导航,就好像它是一个真正的文件系统一样。您可以像编辑文件一样编辑和修改地图的条目。条目显示为文件,地图是这些文件的目录。其他用户,例如,使用 Java 的用户将看到条目已更改,就像您通过 Java 界面更改它一样。注册更改的订阅者仍会收到通知。
这看起来像什么?
Chronicle Engine 有一个启用了 NFS 的演示 。配置文件在 YAML 中。 engine.yaml 配置 NFS 的部分是:
Map<String, String> map = tree1.acquireMap(“/root/data/mymap", String.class, String.class)
配置文件其实就是builder的反序列化。这意味着任何组件都可以被替换,甚至是文件格式本身,而无需更改调用代码。
如果启用调试,您可以看到对虚拟文件系统进行的每个 NFS 调用。
如何安装应用程序?
Chronicle Engine 是一组分层的数据结构。您可以将其视为数据存储目录。这些可以通过我们的 Java 或 C# 客户端远程访问,但也可以作为 NFS 文件系统访问。
演示引擎配置为具有用于配置的 etc 目录、用于通用信息的数据目录和用于 FTSE 和 NYSE 股票价格的 stocks 目录。
键值存储的键显示为文件名,值转换为文本。就股票而言,它实际上是一个普通的 Java 对象,但是将其转换为 YAML 格式是一种读者可以反序列化的方式。
这些数据结构是只读的,但让我们看看一些可变的。
这一切看起来都很简单,直到您认为您正在更改 Java 进程中的键值存储。这些是您可以通过客户端订阅并实时获取更新的更改。
在这种情况下,它只是包装了一个 ConcurrentHashMap,但它可以是一个 ChronicleMap、一个 LDAP 服务或 JDBC 连接的数据库。
您可以通过 JMX 执行此类操作,但这不是管理数据的自然方式。
演示代码
代码在 GitHub 上可用 。 Engine 的下一个版本将在 2015 年 9 月之前提供此功能。
结论
将您的应用程序作为文件系统访问可以是一种简单自然的方式来可视化您的应用程序正在做什么并对其进行更改。虽然在某些情况下它可能过于强大,但您可以使用访问控制来限制谁可以看到什么,就像您可以限制对文件系统的访问一样。