Graph Engine — различия между версиями

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 00:01, 23 мая 2020.
 
(не показаны 2 промежуточные версии этого же участника)
Строка 11: Строка 11:
 
| website                = {{URL|https://www.graphengine.io/}}
 
| website                = {{URL|https://www.graphengine.io/}}
 
}}
 
}}
'''''Graph Engine (GE)''''' – распределенный, находящийся в памяти, движок для обработки данных, подкрепленный строго-типизированной RAM и общими распределенными вычислениями движка.
+
'''''Graph Engine (GE)''''' – распределенный, находящийся в памяти, движок для обработки данных<ref>{{cite web|url=https://www.microsoft.com/en-us/research/project/graph-engine/|title=Graph Engine|accessdate=May 22, 2020}}</ref>, подкрепленный строго-типизированной [[RAM (Random Access Memory)|RAM]] и общими распределенными вычислениями движка.
 
Распределенное хранилище RAM предоставляет глобальную адресацию по высокопроизводительному хранилищу «ключ-значение» над кластером вычислительных машин. Благодаря хранилищу RAM, GE обеспечивает быстрый произвольный доступ к данным, распределенным в огромном множестве данных.
 
Распределенное хранилище RAM предоставляет глобальную адресацию по высокопроизводительному хранилищу «ключ-значение» над кластером вычислительных машин. Благодаря хранилищу RAM, GE обеспечивает быстрый произвольный доступ к данным, распределенным в огромном множестве данных.
Возможность быстрого изучения данных и распределенных параллельных вычислений делают GE естественной платформой для обработки графов. GE поддерживает как онлайн обработку запросов, так и более производительный оффлайн-анализ миллиарда узлов огромных графов.
+
Возможность быстрого изучения данных и распределенных [[Параллельные вычисления|параллельных вычислений]] делают GE естественной платформой для обработки графов. GE поддерживает как онлайн обработку запросов, так и более производительный оффлайн-анализ миллиарда узлов огромных графов.
  
 
== Актуальность: ==
 
== Актуальность: ==
В настоящее время работа с большим объемом данных имеет большую перспективу развития и уже сейчас широко применяется во всех сферах IT. Однако обработка графов с большим объемом данных сталкивается с проблемами на всех уровнях разработки, начиная от системной архитектуры и заканчивая моделями программирования. Разработанный для облегчения работы с данными GE помогает избежать этих трудностей при обработке данных.
+
В настоящее время [[Big Data|работа с большим объемом данных]] имеет большую перспективу развития и уже сейчас широко применяется во всех сферах IT. Однако обработка графов с большим объемом данных сталкивается с проблемами на всех уровнях разработки, начиная от [[Архитектура компьютера|системной архитектуры]] и заканчивая моделями программирования. Разработанный для облегчения работы с данными GE помогает избежать этих трудностей при обработке данных.
 
GE использует преимущества оперативной памяти для быстродействия доступа к данным и для более производительных вычислений, поддерживает расширения благодаря декларативному языку как для моделирования данных, так и для передачи сообщений. Кроме того, пользователь может сам определить схемы данных и расширить возможности системы, что делает GE незаменимым высокопроизводительным удобным продуктом для обработки большого количества данных.
 
GE использует преимущества оперативной памяти для быстродействия доступа к данным и для более производительных вычислений, поддерживает расширения благодаря декларативному языку как для моделирования данных, так и для передачи сообщений. Кроме того, пользователь может сам определить схемы данных и расширить возможности системы, что делает GE незаменимым высокопроизводительным удобным продуктом для обработки большого количества данных.
  
 
== Возможности GE ==
 
== Возможности GE ==
Выпущенный фирмой Microsoft продукт Graph Engine является легко расширяемой и способной к интеграции программой для обработки больших графов с колоссальным объемом данных. Главными достоинствами данной продукта являются:
+
Выпущенный фирмой Microsoft<ref>{{cite web|url=https://www.microsoft.com/ru-ru|title=Microsoft|accessdate=May 22, 2020}}</ref> продукт Graph Engine является легко расширяемой и способной к интеграции программой для обработки больших графов с колоссальным объемом данных. Главными достоинствами данной продукта являются<ref>{{cite web|url=https://www.graphengine.io/docs/manual/index.html//|title=Graph Engine - Main|accessdate=May 22, 2020}}</ref>:
 
* Использование RAM для быстродействия вычислений и доступа к данным;
 
* Использование RAM для быстродействия вычислений и доступа к данным;
 
* Строго-типизированная модель данных является ключом для компактного размещения данных, быстрого доступа к ним, для прозрачной семантики данных;
 
* Строго-типизированная модель данных является ключом для компактного размещения данных, быстрого доступа к ним, для прозрачной семантики данных;
Строка 29: Строка 29:
 
* Декларативное моделирование данных и сетевое программирование;
 
* Декларативное моделирование данных и сетевое программирование;
 
* Полноценная поддержка IntelliSense;
 
* Полноценная поддержка IntelliSense;
* Поддержка LINQ – аналог Miscrosoft языка запросов SQL;
+
* Поддержка LINQ – аналог Miscrosoft языка запросов [[SQL]];
 
* Разработка, контроль, мониторинг и дебаггинг удаленных приложений.
 
* Разработка, контроль, мониторинг и дебаггинг удаленных приложений.
  
 
== Интеграция с другими продуктами ==
 
== Интеграция с другими продуктами ==
Так как GE является продуктом Microsoft с поддержкой качественных вычислений, GE сделан таким образом, что может легко быть интегрирован со средой разработки Visual Studio и облачной вычислительной платформой Miscrosoft Azure. Данная интеграция позволяет разработчикам использовать GE как на локальных машинах, так и в облаках.
+
Так как GE является продуктом Microsoft с поддержкой качественных вычислений, GE сделан таким образом, что может легко быть интегрирован<ref>{{cite web|url=https://www.graphengine.io//|title=Graph Engine - Main|accessdate=May 22, 2020}}</ref> со [[IDE (Integrated Development Environment)|средой разработки]] Visual Studio и облачной вычислительной платформой Miscrosoft Azure<ref>{{cite web|url=https://azure.microsoft.com/ru-ru/overview/|title=Microsoft Azure|accessdate=May 22, 2020}}</ref>. Данная интеграция позволяет разработчикам использовать GE как на локальных машинах, так и в [[Облачное хранилище данных|облаках]].
Кроме того, Graph Engine достаточно легко интегрируется с другими системными стеками: определенные пользователем API-интерфейсы легко могут быть доступны через RESTful интерфейс. Также, приложение, работающее на GE, доступно для любого подключенного устройства.
+
Кроме того, Graph Engine достаточно легко интегрируется с другими системными стеками: определенные пользователем API-интерфейсы легко могут быть доступны через RESTful<ref>{{cite web|url=https://www.ibm.com/developerworks/ru/library/ws-restfu/|title=RESTful - Основы|accessdate=May 22, 2020}}</ref> интерфейс. Также, приложение, работающее на GE, доступно для любого подключенного устройства.
 +
 
 +
== Пример работы с GE ==
 +
Приведем простейший пример на языке программирования C#, демонстрирующий простоту работы с GE.
 +
 
 +
Создадим структуру для общения между сервером и клиентом:
 +
<syntaxhighlight lang="C#">
 +
struct MyMessage
 +
{
 +
    int sn;
 +
}
 +
</syntaxhighlight>
 +
 
 +
Создадим протоколы запросов к серверу:
 +
<syntaxhighlight lang="C#">
 +
protocol SynPing
 +
{
 +
    Type: Syn;
 +
    Request: MyMessage;
 +
    Response: void;
 +
}
 +
 
 +
protocol SynEchoPing
 +
{
 +
    Type: Syn;
 +
    Request: MyMessage;
 +
    Response: MyMessage;
 +
}
 +
 
 +
protocol AsynPing
 +
{
 +
    Type: Asyn;
 +
    Request: MyMessage;
 +
    Response: void;
 +
}
 +
</syntaxhighlight>
 +
 
 +
Также, создадим структуру для сервера для общения по определенным протоколам:
 +
<syntaxhighlight lang="C#">
 +
server MyServer
 +
{
 +
    protocol SynPing;
 +
    protocol SynEchoPing;
 +
    protocol AsynPing;
 +
}
 +
</syntaxhighlight>
 +
 
 +
Теперь, создав необходимые структуры, мы можем написать следующее приложение:
 +
<syntaxhighlight lang="C#">
 +
using System;
 +
using System.Collections.Generic;
 +
using System.Text;
 +
using Trinity.Data;
 +
using Trinity.Storage;
 +
using Trinity;
 +
using System.Threading;
 +
 
 +
namespace PingTest
 +
{
 +
    class MyServer : MyServerBase
 +
    {
 +
        public override void SynPingHandler(MyMessageReader request)
 +
        {
 +
            Console.WriteLine("Received SynPing, sn={0}", request.sn);
 +
        }
 +
 
 +
        public override void AsynPingHandler(MyMessageReader request)
 +
        {
 +
            Console.WriteLine("Received AsynPing, sn={0}", request.sn);
 +
        }
 +
 
 +
        public override void SynEchoPingHandler(MyMessageReader request,
 +
        MyMessageWriter response)
 +
        {
 +
            Console.WriteLine("Received SynEchoPing, sn={0}", request.sn);
 +
            response.sn = request.sn;
 +
        }
 +
    }
 +
 
 +
    class Program
 +
    {
 +
        static void Main(string[] args)
 +
        {
 +
            var server = new MyServer();
 +
            server.Start(false);
 +
 
 +
            var synReq = new MyMessageWriter(1);
 +
 
 +
            Global.CloudStorage.SynPingToMyServer(0, synReq);
 +
 
 +
            var asynReq = new MyMessageWriter(2);
 +
            Global.CloudStorage.AsynPingToMyServer(0, asynReq);
 +
 
 +
            var synReqRsp = new MyMessageWriter(3);
 +
            Console.WriteLine("response: {0}",
 +
                Global.CloudStorage.SynEchoPingToMyServer(0, synReqRsp).sn);
 +
 
 +
            while (true)
 +
            {
 +
                Thread.Sleep(3000);
 +
            }
 +
 
 +
        }
 +
    }
 +
}
 +
</syntaxhighlight>
 +
 
 +
Так, запустив данную программу, мы получим следующий вывод:
 +
<console>
 +
Received SynPing, sn=1
 +
Received AsynPing, sn=2
 +
Received SynEchoPing, sn=3
 +
response: 3
 +
</console>
 +
 
 +
== Выводы ==
 +
Таким образом, рассмотрев выше пример, мы можем сделать вывод, что GE - действительно очень удобный инструмент для разработчиков, использующих большие данные как на локальных машинах, так и на стороне сервера.
 +
 
 +
В некоторых местах (строгая типизация, создание необходимых структур) GE напоминает механизм сериализации данных от компани Google - Protobuf<ref>{{cite web|url=https://developers.google.com/protocol-buffers?hl=ru|title=Protocol Byffers|accessdate=May 22, 2020}}</ref>. Однако данные системы используются совершенно для разных целей, хотя и имеют сходства друг с другом.
 +
 
 +
Так или иначе, разработка вычислений и работы с большими данными с помощью GE сводится к созданию архитектуры структуры сервера, протоколов запросов к нему, созданию сообщений для взаимодействия с сервером, а вся сложная реализация вычислений и обработки заключена в самом Graph Engine. Несомненно, такой продукт является одним из немногих, обладающих подобным быстродействием, продуманной архитектурой, легкой интеграцией в существующие проекты, что значительно повышает шансы GE для всеобщего использования.
  
 
== Источники ==
 
== Источники ==
* https://www.microsoft.com/en-us/research/project/graph-engine/
 
* https://www.graphengine.io/
 
* https://www.graphengine.io/docs/manual/index.html
 

Текущая версия на 00:01, 23 мая 2020

Graph Engine
Graph Engine.png
Разработчики: Microsoft
Состояние разработки: Активное
Написана на: C
Операционная система: .NET
Лицензия: Open Source
Веб-сайт www.graphengine.io

Graph Engine (GE) – распределенный, находящийся в памяти, движок для обработки данных[1], подкрепленный строго-типизированной RAM и общими распределенными вычислениями движка. Распределенное хранилище RAM предоставляет глобальную адресацию по высокопроизводительному хранилищу «ключ-значение» над кластером вычислительных машин. Благодаря хранилищу RAM, GE обеспечивает быстрый произвольный доступ к данным, распределенным в огромном множестве данных. Возможность быстрого изучения данных и распределенных параллельных вычислений делают GE естественной платформой для обработки графов. GE поддерживает как онлайн обработку запросов, так и более производительный оффлайн-анализ миллиарда узлов огромных графов.

Актуальность:

В настоящее время работа с большим объемом данных имеет большую перспективу развития и уже сейчас широко применяется во всех сферах IT. Однако обработка графов с большим объемом данных сталкивается с проблемами на всех уровнях разработки, начиная от системной архитектуры и заканчивая моделями программирования. Разработанный для облегчения работы с данными GE помогает избежать этих трудностей при обработке данных. GE использует преимущества оперативной памяти для быстродействия доступа к данным и для более производительных вычислений, поддерживает расширения благодаря декларативному языку как для моделирования данных, так и для передачи сообщений. Кроме того, пользователь может сам определить схемы данных и расширить возможности системы, что делает GE незаменимым высокопроизводительным удобным продуктом для обработки большого количества данных.

Возможности GE

Выпущенный фирмой Microsoft[2] продукт Graph Engine является легко расширяемой и способной к интеграции программой для обработки больших графов с колоссальным объемом данных. Главными достоинствами данной продукта являются[3]:

  • Использование RAM для быстродействия вычислений и доступа к данным;
  • Строго-типизированная модель данных является ключом для компактного размещения данных, быстрого доступа к ним, для прозрачной семантики данных;
  • Позволяет легко управлять миллиардами объектов различного размера в режиме реального времени;
  • Эффективно использует память для размещения и реаллокации данных
  • В первую очередь, GE создавался для разработчиков, которые создают системы с выполнением определенных пользователем отдельных вычислений на стороне сервера. Более того, система вычислений является очень гибкой, что позволяет пользователям самостоятельно определять модель данных и способы вычислений.

GE поддерживает следующие функции:

  • Декларативное моделирование данных и сетевое программирование;
  • Полноценная поддержка IntelliSense;
  • Поддержка LINQ – аналог Miscrosoft языка запросов SQL;
  • Разработка, контроль, мониторинг и дебаггинг удаленных приложений.

Интеграция с другими продуктами

Так как GE является продуктом Microsoft с поддержкой качественных вычислений, GE сделан таким образом, что может легко быть интегрирован[4] со средой разработки Visual Studio и облачной вычислительной платформой Miscrosoft Azure[5]. Данная интеграция позволяет разработчикам использовать GE как на локальных машинах, так и в облаках. Кроме того, Graph Engine достаточно легко интегрируется с другими системными стеками: определенные пользователем API-интерфейсы легко могут быть доступны через RESTful[6] интерфейс. Также, приложение, работающее на GE, доступно для любого подключенного устройства.

Пример работы с GE

Приведем простейший пример на языке программирования C#, демонстрирующий простоту работы с GE.

Создадим структуру для общения между сервером и клиентом:

struct MyMessage
{
    int sn;
}

Создадим протоколы запросов к серверу:

protocol SynPing
{
    Type: Syn;
    Request: MyMessage;
    Response: void;
}

protocol SynEchoPing
{
    Type: Syn;
    Request: MyMessage;
    Response: MyMessage;
}

protocol AsynPing
{
    Type: Asyn;
    Request: MyMessage;
    Response: void;
}

Также, создадим структуру для сервера для общения по определенным протоколам:

server MyServer
{
    protocol SynPing;
    protocol SynEchoPing;
    protocol AsynPing;
}

Теперь, создав необходимые структуры, мы можем написать следующее приложение:

using System;
using System.Collections.Generic;
using System.Text;
using Trinity.Data;
using Trinity.Storage;
using Trinity;
using System.Threading;

namespace PingTest
{
    class MyServer : MyServerBase
    {
        public override void SynPingHandler(MyMessageReader request)
        {
            Console.WriteLine("Received SynPing, sn={0}", request.sn);
        }

        public override void AsynPingHandler(MyMessageReader request)
        {
            Console.WriteLine("Received AsynPing, sn={0}", request.sn);
        }

        public override void SynEchoPingHandler(MyMessageReader request,
        MyMessageWriter response)
        {
            Console.WriteLine("Received SynEchoPing, sn={0}", request.sn);
            response.sn = request.sn;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var server = new MyServer();
            server.Start(false);

            var synReq = new MyMessageWriter(1);

            Global.CloudStorage.SynPingToMyServer(0, synReq);

            var asynReq = new MyMessageWriter(2);
            Global.CloudStorage.AsynPingToMyServer(0, asynReq);

            var synReqRsp = new MyMessageWriter(3);
            Console.WriteLine("response: {0}", 
                Global.CloudStorage.SynEchoPingToMyServer(0, synReqRsp).sn);

            while (true)
            {
                Thread.Sleep(3000);
            }

        }
    }
}

Так, запустив данную программу, мы получим следующий вывод:

Received SynPing, sn=1
Received AsynPing, sn=2
Received SynEchoPing, sn=3
response: 3

Выводы

Таким образом, рассмотрев выше пример, мы можем сделать вывод, что GE - действительно очень удобный инструмент для разработчиков, использующих большие данные как на локальных машинах, так и на стороне сервера.

В некоторых местах (строгая типизация, создание необходимых структур) GE напоминает механизм сериализации данных от компани Google - Protobuf[7]. Однако данные системы используются совершенно для разных целей, хотя и имеют сходства друг с другом.

Так или иначе, разработка вычислений и работы с большими данными с помощью GE сводится к созданию архитектуры структуры сервера, протоколов запросов к нему, созданию сообщений для взаимодействия с сервером, а вся сложная реализация вычислений и обработки заключена в самом Graph Engine. Несомненно, такой продукт является одним из немногих, обладающих подобным быстродействием, продуманной архитектурой, легкой интеграцией в существующие проекты, что значительно повышает шансы GE для всеобщего использования.

Источники

  1. "Graph Engine". Retrieved May 22, 2020. 
  2. "Microsoft". Retrieved May 22, 2020. 
  3. "Graph Engine - Main". Retrieved May 22, 2020. 
  4. "Graph Engine - Main". Retrieved May 22, 2020. 
  5. "Microsoft Azure". Retrieved May 22, 2020. 
  6. "RESTful - Основы". Retrieved May 22, 2020. 
  7. "Protocol Byffers". Retrieved May 22, 2020.