обзор
Chronicle Engine — это уровень виртуализации данных. Он абстрагируется от сложности доступа, манипулирования и подписки на различные источники данных, так что пользователю этих данных не нужно знать, как и где эти данные фактически хранятся. Это означает, что эти данные могут быть перенесены между системами или сохранены более эффективным, но сложным для использования разработчиком способом.
Основными интерфейсами являются Concurrent Map и простой Pub / Sub. Используя их в сочетании с такими потоками, как фильтры и преобразования, вы можете получить доступ к файлам, в кэшах данных памяти, LDAP, базах данных SQL, базах данных NoSQL с ключом-значением и постоянных хранилищах с низкой задержкой.
Мы исследуем использование NFS в качестве средства доступа, а также нашего клиента на Java и C # для естественного доступа к данным. Таким образом, любая программа в Windows, Unix или MacOSX может использовать его. Как это может выглядеть?
Доступ через NFS.
Хранилища данных в Chronicle Engine организованы иерархически в виде дерева, а не в виде структуры каталогов. Ключи хранилища значений ключей похожи на файлы в каталоге, а значения — на содержимое файла. Это переводит на виртуальную файловую систему.
В Java для доступа к карте на сервере или удаленном клиенте.
1
2
3
4
|
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 мы можем получить доступ к одной и той же карте из любой программы, даже из оболочки.
1
2
3
|
~ $ cd /group/data /group/data $ echo Hello World > key- 1 /group/data $ echo G-Day All > key- 2 |
Чтобы получить значение, это действительно просто в Java:
1
|
String value = map.get( "key-1" ); |
А через NFS это тоже просто:
1
2
|
/group/data $ cat key- 1 Hello World |
А как насчет более сложных функций?
Преимущество наличия собственного NFS-сервера состоит в том, что мы можем добавлять виртуальные файлы, которые могут выполнять функции, если они соответствуют общему договору о доступе к файлам.
В Java мы можем применить запрос, чтобы получить в реальном времени всех людей старше 20 лет. Если запись добавлена, она печатается, как это происходит.
1
2
3
4
|
map.entrySet().query() .filter(e -> e.getValue().age > 20 ) .map(e -> e.getKey()) .subscribe(System.out::println);; |
Так как это можно перевести на NFS?
1
2
3
|
/group/data $ tail -9999f '.(select key where age > 20)' Bob Brown Cate Class |
Это даст вам все текущие имена, но любые новые имена, как они происходят.
Выбор вашего формата.
Имея виртуальные файлы, вы можете запросить их в другом формате. Скажем, базовый объект данных — это строка в базе данных RDBMS. Возможно, вы захотите это в формате CSV, но вы можете захотеть это в XML или JSON.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
/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 Engine через NFS от нашего партнера JCG Питера Лоури из блога Vanilla Java . |