通过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访问编年引擎的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (win下linux)
- 下一篇: 优秀的安卓游戏(优秀的安卓)