Статьи

Доступ к Chronicle Engine через NFS

обзор

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 мы можем получить доступ к одной и той же карте из любой программы, даже из оболочки.

~ $ 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.
  • в режиме реального времени обновления изменений.
  • поддержка запросов.
  • Сжатие данных
  • формирование трафика.
  • возможность проверки того, кто что изменил, когда.

Мы также планируем поддерживать распространение данных и поддерживать больше внутренних хранилищ данных.

Обратная связь

Для чего бы вы использовали такую ​​систему? Какие черты ты бы соврал, чтобы увидеть?

Вы можете оставить комментарий здесь или на  форуме Хроники

Я с нетерпением жду ваших мыслей.