обзор
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.
- в режиме реального времени обновления изменений.
- поддержка запросов.
- Сжатие данных
- формирование трафика.
- возможность проверки того, кто что изменил, когда.
Мы также планируем поддерживать распространение данных и поддерживать больше внутренних хранилищ данных.
Обратная связь
Для чего бы вы использовали такую систему? Какие черты ты бы соврал, чтобы увидеть?
Вы можете оставить комментарий здесь или на форуме Хроники
Я с нетерпением жду ваших мыслей.