Amazon Neptune

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 15:11, 30 января 2019.
Amazon Neptune
AmazonNeptune.jpg
Разработчики: Amazon
Выпущена: 29 November 2017 года; 21 months ago (2017-11-29)
Постоянный выпуск: v1.0.1.0.200264.0 / 12 December 2018 года; 8 months ago (2018-12-12)
Операционная система: Кросс-платформенное программное обеспечение
Локализация: Английский
Тип ПО: графовая СУБД
Веб-сайт aws.amazon.com/ru/neptune/

Amazon Neptune – это быстрый, надежный, полностью управляемый сервис графовой базы данных, который упрощает создание и запуск приложений, работающих с наборами тесно связанных данных[Источник 1]. Он используется в качестве веб-служб Amazon. Первый тестовый выпуск состоялся 29 ноября 2017 года[Источник 2].

Возможности Amazon Neptune

Amazon Neptune поддерживает популярные свойства графовых моделей и модели W3C и RDF, а также соответствующие им языки запросов Apache TinkerPop Gremlin и SPARQL, что позволяет легко создавать запросы, эффективно перемещаться по высокосвязанным наборам данных. Neptune лежит в основе таких примеров использования графов, как сервисы рекомендаций, системы выявления мошенничества, графы знаний, разработка лекарственных препаратов и сетевая безопасность[Источник 3]. 12 декабря 2018 года было объявлено, что Amazon Neptune входит в сферу применения программ соответствия стандартам безопасности данных в индустрии платежных карт, ISO 9001, ISO 27001, ISO 27017 и ISO 27018[Источник 4].

Преимущества Amazon Neptune

Поддержка Open Graph Library

Amazon Neptune поддерживает Open Graph Library для Gremlin]] и SPARQL и обеспечивает высокую производительность для каждой из этих графовых моделей и их языков запросов. Этот сервис позволяет выбрать модель Property Graph и ее язык запросов с открытым исходным кодом Apache TinkerPop Gremlin или модель RDF стандарта W3C и ее стандартный язык запросов SPARQL[Источник 5].

Высокая производительность и масштабируемость

Amazon Neptune оптимизирована для обработки запросов графов. Neptune поддерживает до 15 реплик чтения с низкой задержкой в трех зонах доступности для масштабирования ресурсов чтения и выполнения более ста тысяч запросов графов в секунду. По мере изменения потребностей можно легко масштабировать развертывание базы данных в нужном направлении, используя типы инстансов разных размеров.

Высокая доступность и надежность

Amazon Neptune обладает высокой доступностью, надежностью и совместимостью с принципом ACID (атомарность, непротиворечивость, изолированность, долговечность). Сервис Neptune предназначен обеспечивать доступность на уровне более 99,99 %. В нем используется отказоустойчивое самовосстанавливающееся хранилище, созданное для облака, которое поддерживает шесть реплик данных пользователя в трех зонах доступности. Neptune непрерывно выполняет резервное копирование данных в Amazon S3 и незаметно восстанавливается при сбоях в работе физического хранилища. Для обеспечения высокой доступности восстановление инстанса обычно занимает менее 30 секунд.

Высокая безопасность

Amazon Neptune обеспечивает множество уровней безопасности для базы данных, включая сетевую изоляцию с помощью Amazon VPC, поддержку аутентификации IAM для доступа к адресам, клиентские подключения с шифрованием HTTPS, а также шифрование данных при хранении с помощью ключей, создаваемых и управляемых через AWS Key Management Service (KMS). В зашифрованном инстансе Neptune шифруются данные базового хранилища, а также автоматически создаваемые резервные копии, снимки состояния и реплики, находящиеся в том же кластере.

Полное управление

С Amazon Neptune автоматически и непрерывно выполняет мониторинг базы данных и делает резервные копии в Amazon S3, что обеспечивает точное восстановление на заданный момент времени. Производительность базы данных можно контролировать с помощью Amazon CloudWatch.

Процесс работы Amazon Neptune

Социальные сети

Рисунок 1 – Социальные сети

Amazon Neptune может быстро и легко обрабатывать большие наборы пользовательских профилей и взаимосвязей для создания приложений для социальных сетей. Neptune позволяет выполнять высокоинтерактивные запросы по графам с высокой производительностью для добавления в приложения функций социальных сетей. Например, при добавлении канала социальных сетей в свое приложение можно использовать Neptune для предоставления результатов пользователям с учетом приоритета: сначала будут отображаться последние обновления данных членов их семей, затем друзей, чьи обновления им понравились, а затем друзей, которые живут недалеко от них, как представлено на рисунке 1.








Сервисы рекомендаций

Amazon Neptune позволяет хранить информационные взаимосвязи, например интересы клиентов, данные о друзьях и историю покупок, в виде графов и быстро выполнять запросы к ним для предоставления точных индивидуальных рекомендаций. С помощью Neptune можно использовать высокодоступную графовую базу данных, чтобы рекомендовать пользователям продукты, на основании того, какие продукты приобретали другие пользователи, которые интересуются тем же видом спорта или которые имеют аналогичную историю покупок(см. рисунок 2).

Рисунок 2 – Сервисы рекомендаций
Рисунок 3 – Выявление мошенничества

Выявление мошенничества

С Amazon Neptune можно использовать взаимосвязи для обработки финансовых операций и операций, связанных с покупками, в режиме реального времени, что позволяет легко обнаруживать схемы мошенничества. Neptune предоставляет полностью управляемый сервис для выполнения быстрых запросов к графу, которые позволяют определить, что потенциальный покупатель использует тот же адрес электронной почты и кредитную карту, которые уже использовались в известном случае мошенничества. При создании приложения для обнаружения мошенничества при розничной торговле Neptune позволяет создать запросы к графам для простого обнаружения определенных шаблонов отношений, например, когда несколько человек связаны с одним персональным адресом электронной почты или когда несколько человек используют один IP-адрес, но проживают по разным физическим адресам(см. рисунок 3).







Графы знаний

Amazon Neptune позволяет создавать приложения графа знаний. Граф знаний позволяет хранить информацию в виде модели графа и использовать запросы к графу для простой навигации пользователей по наборам сложносвязанных данных. Neptune поддерживает API с открытым исходным кодом и открытым стандартом, позволяющие быстро использовать существующие информационные ресурсы для построения графов знаний и размещения их на полностью управляемом сервисе. С помощью графа знаний можно добавить актуальную информацию в каталоги продуктов, создать сложные модели правил регулирования и выполнять запросы к ним или формировать общую информацию(см. рисунок 4).

Рисунок 4 – Графы знаний
Рисунок 5 – Медико-биологические разработки


Медико-биологические разработки

Amazon Neptune помогает создавать приложения, которые хранят данные медико-биологических разработок и обеспечивают навигацию по ним, а также легко обрабатывают конфиденциальные данные с помощью шифрования при хранении данных. Можно моделировать химические соединения в виде графа и запрашивать шаблоны из молекулярных структур. Кроме того, Neptune позволяет обобщить информацию для решения проблем в области здравоохранения и медико-биологических разработок. Neptune можно использовать для создания и хранения данных в различных системах, а также для сортировки исследовательских публикаций по темам в целях быстрого поиска релевантной информации(см. рисунок 5).




Рисунок 6 – Работа сети/ИТ-операции



Работа сети/ИТ-операции

Можно использовать Amazon Neptune для хранения графа сети и отправки запросов к графу для получения ответа на определенные вопросы, например о том, на каком количестве узлов работает определенное приложение. Neptune может хранить и обрабатывать миллиарды событий для управления и обеспечения безопасности сети. При обнаружении аномального события можно использовать Neptune, чтобы быстро определить его возможное влияние на сеть, запросив шаблон графа с помощью атрибутов этого события. При обнаружении вредоносного файла на хосте Neptune может помочь найти соединения между хостами, с помощью которых распространяется вредоносный файл, что позволяет найти исходный хост, на который он был загружен(см. рисунок 6).









Сравнение Amazon Neptune и Neo4j

Сравнение Amazon Neptune и Neo4j представлено ниже[Источник 6].

Name Amazon Neptune Neo4j
Описание Быстрая и надежная графовая база данных, созданная для облачного управления Графическая база данных с открытым исходным кодом
Модель основной базы данных Graph DBMS, RDF Graph DBMS
Веб-сайт aws.amazon.com/­neptune neo4j.com
Техническая документация aws.amazon.com/neptune/developer-resources/ neo4j.com/docs/
Разработчики Amazon Neo4j, Inc.
Дата выпуска 2017 2007
Лицензия коммерческий продукт open source продукт
Язык реализации Java, Scala
Серверная операционная система hosted Linux, OS X, Solaris, Windows
Поддержка XML нет
Вторичная индексация нет да
SQL нет нет
API и другие методы доступа RDF 1.1; SPARQL 1.1; TinkerPop Gremlin 3.3 Cypher query language; Java API; Neo4j-OGM info; RESTful HTTP API; Spring Data Neo4j; TinkerPop 3
Поддерживаемые языки программирования C#, Go, Java, JavaScript, PHP, Python, Ruby, Scala Clojure, Go, Haskell, Java, JavaScript, Perl, PHP, Python, Ruby, Scala
Метод разделения нет нет
Метод репликации да да
MapReduce нет нет
Концепция транзакций ACID ACID
Параллелизм да да
Надежность да да
Концепция пользователей Права доступа в соответствии с AWS Identity and Access Management (IAM) Права доступа в соответствии LDAP, Active Directory, Kerberos стандартами

Установка и запуск

Подробная установка и запуск описаны в документации на сайте производителя.[Источник 7]

Пример подключения к БД Neptune, используя Java.

1. Сначала необходимо установит Apache Maven на EC2 инстанс. Введите следующее, чтобы добавить репозиторий с пакетом Maven:

sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

Введите следующее, чтобы установить номер версии для пакетов:

sudo sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo

Затем используйте yum для установки Maven:

sudo yum install -y apache-maven

2. Для библиотек Gremlin требуется Java 8. Введите следующее, чтобы установить Java 8 на свой EC2 инстанс:

sudo yum install java-1.8.0-devel

3. Введите следующее, чтобы установить Java 8 в качестве среды выполнения по умолчанию для вашего EC2 инстанса:

sudo /usr/sbin/alternatives --config java

При появлении запроса выберите Java 8. 4. Введите следующее, чтобы установить Java 8 в качестве компилятора по умолчанию для вашего EC2 инстанса:

sudo /usr/sbin/alternatives --config java

При появлении запроса выберите Java 8. 5. Создайте новую директорию с имененм gremlinjava:

mkdir gremlinjava
cd gremlinjava

6. В директории gremlinjava создайте файл pom.xml, а затем откройте его в текстовом редакторе:

nano pom.xml

7. Скопируйте следующее в файл pom.xml и сохраните его:

<console>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.amazonaws</groupId>
  <artifactId>GremlinExample</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>GremlinExample</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
       <groupId>org.apache.tinkerpop</groupId>
       <artifactId>gremlin-driver</artifactId>
       <version>3.3.2</version>
    </dependency>
  </dependencies>
  <build>
     <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.0.2</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.3</version>
            <configuration>
                <mainClass>com.amazonaws.App</mainClass>
                <complianceLevel>1.8</complianceLevel>
            </configuration>
        </plugin>
    </plugins>
  </build>
</project>
</console>

8. Необходимо загрузить CA сертификат:

wget https://www.amazontrust.com/repository/SFSRootCAG2.pem

9. Создайте подкаталог для исходного кода (src/main/java/com/amazonaws/), введя в командной строке:

mkdir -p src/main/java/com/amazonaws/

10. В каталоге src/main/java/com/amazonaws/ создайте файл с именем App.java, а затем откройте его в текстовом редакторе:

nano src/main/java/com/amazonaws/App.java

11. Скопируйте следующее в файл App.java. Замените your-neptune-endpoint адресом вашего Neptune DB инстанса. Вы НЕ должны включать префикс https:// в метод addContactPoint.

<console>
package com.amazonaws;
import org.apache.tinkerpop.gremlin.driver.Cluster;
import org.apache.tinkerpop.gremlin.driver.Client;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection;
import org.apache.tinkerpop.gremlin.structure.T;

public class App
{
    public static void main( String[] args )
    {
        Cluster.Builder builder = Cluster.build();
        builder.addContactPoint("your-neptune-endpoint");
        builder.port(8182);
        builder.enableSsl(true);
        builder.keyCertChainFile("SFSRootCAG2.pem");

        Cluster cluster = builder.create();

        GraphTraversalSource g = EmptyGraph.instance().traversal().withRemote(DriverRemoteConnection.using(cluster));

        // Add a vertex.
        // Note that a Gremlin terminal step, e.g. next(), is required to make a request to the remote server.
        // The full list of Gremlin terminal steps is at http://tinkerpop.apache.org/docs/current/reference/#terminal-steps
        g.addV("Person").property("Name", "Justin").next();

        // Add a vertex with a user-supplied ID.
        g.addV("Custom Label").property(T.id, "CustomId1").property("name", "Custom id vertex 1").next();
        g.addV("Custom Label").property(T.id, "CustomId2").property("name", "Custom id vertex 2").next();

        g.addE("Edge Label").from(g.V("CustomId1")).to(g.V("CustomId2")).next();

        // This gets the vertices, only.
        GraphTraversal t = g.V().limit(3).valueMap();

        t.forEachRemaining(
            e ->  System.out.println(e)
        );

        cluster.close();
    }
}
</console>

12. Скомпилируйте и запустите, используя команду Maven:

mvn compile exec:java

Источники

  1. The definition of Amazon Neptune // Википедия [2019-2019]. Дата обновления: 20.01.2019. URL: https://en.wikipedia.org/wiki/Amazon_Neptune (дата обращения: 20.01.2019)
  2. Amazon Neptune // Сайт разработчика [2017-2019]. Дата обновления: 29.11.2017. URL: https://aws.amazon.com/about-aws/whats-new/2018/05/amazon-neptune-is-now-generally-available/ (дата обращения: 20.01.2019)
  3. Amazon Neptune // Сайт разработчика [2017-2019]. Дата обновления: 21.11.2017. URL: https://aws.amazon.com/blogs/aws/amazon-neptune-a-fully-managed-graph-database-service/ (дата обращения: 20.01.2019)
  4. Amazon Neptune // Сайт разработчика [2017-2019]. Дата обновления: 12.12.2018. URL: https://aws.amazon.com/about-aws/whats-new/2018/12/amazon-neptune-now-in-scope-for-pci-dss-and-iso-compliance-programs/ (дата обращения: 20.01.2019)
  5. Amazon Neptune // Хранилище GitHub [2017-2019]. Дата обновления: 15.01.2019. URL: https://github.com/aws-samples/amazon-neptune-samples (дата обращения: 20.01.2019)
  6. DB Engines // Сайт разработчика [2010-2019]. Дата обновления: 27.12.2018. URL: https://db-engines.com/en/system/Amazon+Neptune%3BNeo4j (дата обращения: 20.01.2019)
  7. Amazon Neptune // Документация [2017-2019]. Дата обновления: 15.01.2019. URL: https://docs.aws.amazon.com/en_us/neptune/latest/userguide/quickstart.html (дата обращения: 20.01.2019)